# AWS - API Gateway Unauthenticated Enum {{#include ../../../banners/hacktricks-training.md}} ### API Invoke Bypass Laut dem Vortrag [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE) können Lambda Authorizers **mit IAM-Syntax** konfiguriert werden, um Berechtigungen zum Aufrufen von API-Endpunkten zu gewähren. Dies stammt [**aus den Dokumenten**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): ```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" ] } ] } ``` 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. > [!WARNING] > Beachten Sie, dass **"\*" nicht aufhört, sich mit Schrägstrichen zu erweitern**, daher könnte die Verwendung von "\*" im api-id beispielsweise auch "irgendeine Stufe" oder "irgendeine Methode" anzeigen, solange der endgültige Regex weiterhin gültig ist.\ > Daher kann `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ > 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**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html), finden Sie Code zur Implementierung von Authorizern in [**diesem offiziellen aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints). ### IAM Policy Injection In der gleichen [**talk** ](https://www.youtube.com/watch?v=bsPKk7WDOnE) 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**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) und dem Tool [**conditional-love**](https://github.com/plerionhq/conditional-love/), um diese Ausnutzung zu automatisieren. {{#include ../../../banners/hacktricks-training.md}}