AWS - API Gateway Unauthenticated Enum
Reading time: 4 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
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 concedere permessi per invocare gli 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 altri percorsi come/admin/dashboard/createAdmin
, per esempio.
warning
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 ufficiale aws github.
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, Data Exchange e gli URL dei gateway Lambda, è 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 dei tag se conosci la chiave del tag (ce ne sono alcuni predefiniti interessanti).
Puoi trovare ulteriori informazioni nella ricerca originale e nello strumento conditional-love per automatizzare questa sfruttamento.
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.