AWS - API Gateway Unauthenticated Enum

Supporta HackTricks

Bypass dell'invocazione API

Secondo il talk Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, i Lambda Authorizers possono essere configurati utilizzando la sintassi IAM per dare permessi di invocazione degli 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 gli endpoint è che il "*" implica "qualsiasi" e non c'è più sintassi regex supportata.

Alcuni esempi:

  • Una regola come arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/* per dare a ciascun 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 fase" o "qualsiasi metodo" purché la regex finale sia ancora valida. Quindi arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* Può convalidare una richiesta post per testare la fase al percorso /prod/GET/dashboard/admin, per esempio.

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

Per ulteriori informazioni, oltre alla docs, puoi trovare codice per implementare autorizzatori in questo github ufficiale aws.

Iniezione di Politiche IAM

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

Modello di URL Pubblico

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

Ottieni l'ID dell'account dall'URL pubblico dell'API Gateway

Proprio come con i bucket S3, i gateway Data Exchange e Lambda URLs, è possibile trovare l'ID dell'account di un account abusando della aws:ResourceAccount Policy Condition Key da un URL pubblico dell'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 di tag se conosci la chiave del tag (ce ne sono alcune di default interessanti).

Puoi trovare ulteriori informazioni nella ricerca originale e nello strumento conditional-love per automatizzare questa sfruttamento.

Supporta HackTricks

Last updated