AWS - API Gateway Unauthenticated Enum

Unterstütze HackTricks

API Invoke Umgehung

Laut dem Vortrag Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo können Lambda Authorizers unter Verwendung der IAM-Syntax konfiguriert werden, um Berechtigungen zum Aufrufen von API-Endpunkten zu erteilen. Dies ist aus den Dokumenten entnommen:

{
"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"
]
}
]
}

Das Problem bei dieser Art, Berechtigungen zum Aufrufen von Endpunkten zu erteilen, ist, dass das "*" "alles" impliziert und es keine weitere Regex-Syntax unterstützt.

Einige Beispiele:

  • Eine Regel wie arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*, um jedem Benutzer Zugriff auf /dashboard/user/{username} zu gewähren, gibt ihnen beispielsweise auch Zugriff auf andere Routen wie /admin/dashboard/createAdmin.

Beachten Sie, dass "*" nicht mit Schrägstrichen aufhört zu expandieren, daher könnte "*" im api-id beispielsweise auch "jede Stufe" oder "jede Methode" bedeuten, solange der endgültige Regex noch gültig ist. Also arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* Kann eine Post-Anfrage an die Teststufe zum Pfad /prod/GET/dashboard/admin validieren, zum Beispiel.

Sie sollten immer klar haben, was Sie den Zugriff erlauben möchten, und dann überprüfen, ob andere Szenarien mit den gewährten Berechtigungen möglich sind.

Für weitere Informationen, abgesehen von den Dokumentationen, können Sie Code zur Implementierung von Authorizern in diesem offiziellen aws GitHub finden.

IAM Policy Injection

In dem gleichen Vortrag wird aufgezeigt, dass, wenn der Code Benutzereingaben verwendet, um IAM-Richtlinien zu generieren, Platzhalter (und andere wie "." oder spezifische Zeichenfolgen) dort eingefügt werden können, um Einschränkungen zu umgehen.

Public URL template

https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided}

Account-ID von öffentlicher API Gateway URL abrufen

Genau wie bei S3-Buckets, Data Exchange und Lambda URLs Gateways ist es möglich, die Account-ID eines Kontos zu finden, 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 findet und dabei Wildcards im aws:ResourceAccount Abschnitt der Richtlinie ausnutzt. Diese Technik ermöglicht es auch, Werte von Tags zu erhalten, wenn man den Tag-Schlüssel kennt (es gibt einige interessante Standardwerte).

Weitere Informationen finden Sie in der Originalforschung und dem Tool conditional-love, um diese Ausnutzung zu automatisieren.

Unterstütze HackTricks

Last updated