AWS - API Gateway Unauthenticated Enum

Supporta HackTricks

API Invoke bypass

Secondo la conferenza Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, i Lambda Authorizers possono essere configurati usando la sintassi IAM per concedere permessi di invocare endpoint API. Questo è preso dalla documentazione:

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

Il problema con questo modo di dare permessi per invocare endpoint è che il "*" implica "qualsiasi cosa" e non c'è nessuna sintassi regex supportata.

Alcuni esempi:

  • Una regola come arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/* per dare a ogni utente accesso a /dashboard/user/{username} darà loro accesso ad altre rotte come /admin/dashboard/createAdmin per esempio.

Nota che "*" non smette di espandersi con le barre, quindi, se usi "*" in api-id per esempio, potrebbe anche indicare "qualsiasi stage" o "qualsiasi metodo" finché il regex finale è ancora valido. Quindi arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* Può validare una richiesta post a test stage al percorso /prod/GET/dashboard/admin per esempio.

Dovresti sempre avere chiaro cosa vuoi permettere di accedere e poi verificare se altri scenari sono possibili con i permessi concessi.

Per maggiori informazioni, oltre ai docs, puoi trovare codice per implementare authorizers in questo github ufficiale aws.

IAM Policy Injection

Nella stessa talk è esposto il fatto che se il codice sta usando input utente per generare le IAM policies, i caratteri jolly (e altri come "." o stringhe specifiche) possono essere inclusi lì con l'obiettivo di bypassare le restrizioni.

Public URL template

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

Ottenere l'ID dell'account dall'URL pubblico di API Gateway

Proprio come con i bucket S3, Data Exchange e gli URL di Lambda, è possibile trovare l'ID dell'account abusando del aws:ResourceAccount Policy Condition Key da un URL pubblico di API Gateway. Questo viene fatto trovando l'ID dell'account un carattere alla volta abusando dei caratteri jolly nella sezione aws:ResourceAccount della policy. Questa tecnica consente anche di ottenere valori dei tag se si conosce la chiave del tag (ce ne sono alcuni predefiniti interessanti).

Puoi trovare maggiori informazioni nella ricerca originale e lo strumento conditional-love per automatizzare questa exploitazione.

Supporta HackTricks

Last updated