AWS - API Gateway Unauthenticated Enum

Unterstützen Sie HackTricks

API Invoke bypass

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 stammt aus den Dokumenten:

{
"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 mit dieser Methode, Berechtigungen zum Aufrufen von Endpunkten zu erteilen, ist, dass das "*" "alles" impliziert und keine weiteren Regex-Syntax unterstützt wird.

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 auch Zugriff auf andere Routen wie /admin/dashboard/createAdmin, zum Beispiel.

Beachten Sie, dass "*" nicht aufhört, sich mit Schrägstrichen zu erweitern, daher könnte die Verwendung von "*" im api-id beispielsweise auch "jede Stufe" oder "jede Methode" anzeigen, solange der endgültige Regex weiterhin 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 erlauben möchten, und dann überprüfen, ob andere Szenarien mit den erteilten Berechtigungen möglich sind.

Für weitere Informationen, abgesehen von den docs, finden Sie Code zur Implementierung von Authorizern in diesem offiziellen aws github.

IAM Policy Injection

In der gleichen Talk wird das Faktum angesprochen, dass, wenn der Code Benutzereingaben verwendet, um die IAM-Richtlinien zu generieren, Wildcards (und andere wie "." oder spezifische Strings) dort enthalten sein können, mit dem Ziel, Einschränkungen zu umgehen.

Öffentliches URL-Template

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

Konto-ID von öffentlicher API-Gateway-URL abrufen

Genau wie bei S3-Buckets, Data Exchange und Lambda-URLs-Gateways ist es möglich, die Konto-ID eines Kontos zu finden, indem man den aws:ResourceAccount Policy Condition Key von einer öffentlichen API-Gateway-URL ausnutzt. Dies geschieht, indem man die Konto-ID Zeichen für Zeichen findet und Wildcards im aws:ResourceAccount-Abschnitt der Richtlinie ausnutzt. Diese Technik ermöglicht es auch, Werte von Tags abzurufen, wenn man den Tag-Schlüssel kennt (es gibt einige standardmäßige interessante).

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

HackTricks unterstützen

Last updated