AWS - API Gateway Unauthenticated Enum
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
API Invoke bypass
Dem Vortrag Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo zufolge können Lambda Authorizers mithilfe der IAM-Syntax so konfiguriert werden, dass sie Berechtigungen zum Aufrufen von API endpoints erteilen. Dies ist from the docs:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Permission",
"Action": ["execute-api:Execution-operation"],
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path"
]
}
]
}
The problem with this way to give permissions to invoke endpoints is that the "*" implies "anything" and there is no more regex syntax supported.
Einige Beispiele:
- Eine Regel wie
arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*, die jedem Benutzer Zugriff auf/dashboard/user/{username}geben soll, würde ihm zum Beispiel auch Zugriff auf andere Routen wie/admin/dashboard/createAdmingewähren.
warning
Beachte, dass "*" bei Slashes nicht aufhört zu expandieren, daher, wenn du "*" z. B. im api-id verwendest, könnte es auch "jede Stage" oder "jede Methode" bedeuten, solange das finale Regex noch gültig ist.
Also arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*
Kann z. B. eine POST-Anfrage an die Stage test für den Pfad /prod/GET/dashboard/admin validieren.
Du solltest immer genau wissen, worauf du Zugriff gewähren willst, und dann prüfen, ob mit den erteilten Berechtigungen andere Szenarien möglich sind.
Für mehr Infos, abgesehen von den docs, findest du Code zur Implementierung von Authorizern in this official aws github.
IAM Policy Injection
In demselben talk wird gezeigt, dass, wenn der Code Benutzereingaben verwendet, um die IAM-Policies zu generieren, Wildcards (und andere wie "." oder spezifische Strings) dort eingeschleust werden können, mit dem Ziel, Einschränkungen zu umgehen.
Öffentliches URL-Template
https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided}
Account-ID von einer öffentlichen API Gateway-URL erhalten
Wie bei S3 buckets, Data Exchange und Lambda URLs gateways ist es möglich, die Account-ID eines Kontos auszulesen, indem man den aws:ResourceAccount Policy Condition Key von einer öffentlichen API Gateway-URL missbraucht.
Dies geschieht, indem man die Account-ID Zeichen für Zeichen ermittelt und Wildcards im aws:ResourceAccount-Abschnitt der Policy ausnutzt.
Mit dieser Technik lassen sich auch Werte von Tags auslesen, wenn man den Tag-Key kennt (es gibt einige voreingestellte, interessante).
Weitere Informationen finden Sie in der original research und im Tool conditional-love zur Automatisierung dieser Ausnutzung.
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud