# AWS - API Gateway Neautentifikovana Enumeracija

{{#include ../../../banners/hacktricks-training.md}}

### Zaobilaženje API poziva

Prema predavanju [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), Lambda Authorizers se mogu konfigurisati **koristeći IAM sintaksu** da bi se dodelile dozvole za pozivanje API krajnjih tačaka. Ovo je preuzeto [**iz dokumentacije**](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"
]
}
]
}
```
Problem sa ovim načinom davanja dozvola za pozivanje krajnjih tačaka je to što **"\*" podrazumeva "bilo šta"** i **nema više podržane regex sintakse**.

Neki primeri:

- Pravilo kao što je `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` kako bi se svakom korisniku omogućio pristup `/dashboard/user/{username}` će im omogućiti pristup i drugim rutama kao što je `/admin/dashboard/createAdmin`, na primer.

> [!WARNING]
> Imajte na umu da **"\*" ne prestaje da se širi sa kosim crticama**, stoga, ako koristite "\*" u api-id, na primer, to može takođe značiti "bilo koja faza" ili "bilo koja metoda" sve dok je konačni regex još uvek validan.\
> Tako `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\
> Može validirati post zahtev za test fazu na putanji `/prod/GET/dashboard/admin`, na primer.

Uvek treba jasno imati šta želite da dozvolite za pristup i zatim proveriti da li su drugi scenariji mogući sa dodeljenim dozvolama.

Za više informacija, osim [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html), možete pronaći kod za implementaciju autorizatora u [**this official aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints).

### IAM Policy Injection

U istoj [**talk** ](https://www.youtube.com/watch?v=bsPKk7WDOnE)izložena je činjenica da ako kod koristi **korisnički unos** za **generisanje IAM politika**, džokeri (i drugi kao što su "." ili specifične stringove) mogu biti uključeni sa ciljem **obiđanja ograničenja**.

### Public URL template
```
https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided}
```
### Dobijanje ID-a naloga sa javnog API Gateway URL-a

Baš kao i kod S3 kanti, Data Exchange i Lambda URL-ova, moguće je pronaći ID naloga koristeći **`aws:ResourceAccount`** **Policy Condition Key** iz javnog API Gateway URL-a. To se radi pronalaženjem ID-a naloga jedan po jedan karakter koristeći džoker znakove u **`aws:ResourceAccount`** sekciji politike.\
Ova tehnika takođe omogućava dobijanje **vrednosti oznaka** ako znate ključ oznake (ima nekoliko podrazumevanih zanimljivih).

Možete pronaći više informacija u [**originalnom istraživanju**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) i alatu [**conditional-love**](https://github.com/plerionhq/conditional-love/) za automatizaciju ove eksploatacije.

{{#include ../../../banners/hacktricks-training.md}}
