AWS - RDS Privesc
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
RDS - Relational Database Service
Für weitere Informationen über RDS siehe:
AWS - Relational Database (RDS) Enumrds:ModifyDBInstance
rds:ModifyDBInstance
Mit dieser Berechtigung kann ein Angreifer das Passwort des Master-Benutzers ändern und sich in die Datenbank einloggen:
Sie müssen in der Lage sein, Kontakt zur Datenbank aufzunehmen (sie sind normalerweise nur von innerhalb von Netzwerken zugänglich).
Potentielle Auswirkung: Finden Sie sensible Informationen in den Datenbanken.
rds-db:connect
Laut den Dokumentationen könnte ein Benutzer mit dieser Berechtigung eine Verbindung zur DB-Instanz herstellen.
Missbrauch von RDS Role IAM-Berechtigungen
Postgresql (Aurora)
Wenn Sie SELECT datname FROM pg_database;
ausführen und eine Datenbank namens rdsadmin
finden, wissen Sie, dass Sie sich in einer AWS postgresql-Datenbank befinden.
Zuerst können Sie überprüfen, ob diese Datenbank verwendet wurde, um auf einen anderen AWS-Dienst zuzugreifen. Sie könnten dies überprüfen, indem Sie die installierten Erweiterungen ansehen:
Wenn du etwas wie aws_s3
findest, kannst du davon ausgehen, dass diese Datenbank irgendeine Art von Zugriff auf S3 hat (es gibt auch andere Erweiterungen wie aws_ml
und aws_lambda
).
Außerdem, wenn du die Berechtigungen hast, aws rds describe-db-clusters
auszuführen, kannst du dort sehen, ob der Cluster eine IAM-Rolle angehängt hat im Feld AssociatedRoles
. Falls ja, kannst du davon ausgehen, dass die Datenbank vorbereitet wurde, um auf andere AWS-Dienste zuzugreifen. Basierend auf dem Namen der Rolle (oder wenn du die Berechtigungen der Rolle erhalten kannst) könntest du vermuten, welchen zusätzlichen Zugriff die Datenbank hat.
Um nun eine Datei in einem Bucket zu lesen, musst du den vollständigen Pfad kennen. Du kannst ihn lesen mit:
Wenn Sie rohe AWS-Anmeldeinformationen hätten, könnten Sie diese auch verwenden, um auf S3-Daten zuzugreifen mit:
Postgresql muss keine Parametergruppenvariable ändern, um auf S3 zugreifen zu können.
Mysql (Aurora)
Innerhalb eines mysql, wenn Sie die Abfrage SELECT User, Host FROM mysql.user;
ausführen und es einen Benutzer namens rdsadmin
gibt, können Sie davon ausgehen, dass Sie sich in einer AWS RDS mysql db befinden.
Innerhalb des mysql führen Sie show variables;
aus und wenn die Variablen wie aws_default_s3_role
, aurora_load_from_s3_role
, aurora_select_into_s3_role
Werte haben, können Sie davon ausgehen, dass die Datenbank für den Zugriff auf S3-Daten vorbereitet ist.
Auch wenn Sie Berechtigungen haben, aws rds describe-db-clusters
auszuführen, können Sie überprüfen, ob der Cluster eine zugeordnete Rolle hat, was normalerweise den Zugriff auf AWS-Dienste bedeutet.
Um nun eine Datei in einem Bucket zu lesen, müssen Sie den vollständigen Pfad kennen. Sie können ihn lesen mit:
rds:AddRoleToDBCluster
, iam:PassRole
rds:AddRoleToDBCluster
, iam:PassRole
Ein Angreifer mit den Berechtigungen rds:AddRoleToDBCluster
und iam:PassRole
kann eine bestimmte Rolle zu einer bestehenden RDS-Instanz hinzufügen. Dies könnte dem Angreifer ermöglichen, auf sensible Daten zuzugreifen oder die Daten innerhalb der Instanz zu ändern.
Potentieller Einfluss: Zugriff auf sensible Daten oder unautorisierte Änderungen an den Daten in der RDS-Instanz. Beachten Sie, dass einige DBs zusätzliche Konfigurationen erfordern, wie z.B. Mysql, das die Angabe der Rollen-ARN in den Parametergruppen benötigt.
rds:CreateDBInstance
rds:CreateDBInstance
Nur mit dieser Berechtigung könnte ein Angreifer eine neue Instanz innerhalb eines bereits existierenden Clusters erstellen, der eine IAM-Rolle angehängt hat. Er wird nicht in der Lage sein, das Master-Benutzerpasswort zu ändern, aber er könnte in der Lage sein, die neue Datenbankinstanz dem Internet auszusetzen:
rds:CreateDBInstance
, iam:PassRole
rds:CreateDBInstance
, iam:PassRole
TODO: Testen
Ein Angreifer mit den Berechtigungen rds:CreateDBInstance
und iam:PassRole
kann eine neue RDS-Instanz mit einer angegebenen Rolle erstellen. Der Angreifer kann dann möglicherweise auf sensible Daten zugreifen oder die Daten innerhalb der Instanz ändern.
Einige Anforderungen an das anzuhängende Rollen-/Instanzprofil (von hier):
Das Profil muss in Ihrem Konto existieren.
Das Profil muss eine IAM-Rolle haben, die Amazon EC2-Berechtigungen zum Übernehmen hat.
Der Name des Instanzprofils und der zugehörige IAM-Rollenname müssen mit dem Präfix
AWSRDSCustom
beginnen.
Potenzielle Auswirkungen: Zugriff auf sensible Daten oder unbefugte Änderungen an den Daten in der RDS-Instanz.
rds:AddRoleToDBInstance
, iam:PassRole
rds:AddRoleToDBInstance
, iam:PassRole
Ein Angreifer mit den Berechtigungen rds:AddRoleToDBInstance
und iam:PassRole
kann eine angegebene Rolle zu einer bestehenden RDS-Instanz hinzufügen. Dies könnte dem Angreifer ermöglichen, auf sensible Daten zuzugreifen oder die Daten innerhalb der Instanz zu ändern.
Die DB-Instanz muss sich außerhalb eines Clusters befinden
Potenzielle Auswirkungen: Zugriff auf sensible Daten oder unautorisierte Änderungen an den Daten in der RDS-Instanz.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated