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

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:

json
{
"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/createAdmin gewä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