AWS - API Gateway Unauthenticated Enum
Bypass di Invoke API
Secondo la presentazione Vettori di attacco per le API utilizzando gli Autorizzatori Lambda di AWS API Gateway - Alexandre & Leonardo, gli Autorizzatori Lambda possono essere configurati utilizzando la sintassi IAM per concedere autorizzazioni per invocare i punti finali delle API. Questo è preso dalla documentazione:
Il problema di questo modo di concedere autorizzazioni per invocare i punti di accesso è che il "*" implica "qualsiasi cosa" e non è più supportata la sintassi regex.
Alcuni esempi:
Una regola come
arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*
per dare a ciascun utente l'accesso a/dashboard/user/{username}
darà loro accesso ad altre route come/admin/dashboard/createAdmin
, ad esempio.
Nota che il "*" non si ferma ad espandersi con le barre, quindi, se si utilizza "*" ad esempio in api-id, potrebbe anche indicare "qualsiasi stage" 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 allo stage di test al percorso /prod/GET/dashboard/admin
, ad esempio.
Dovresti sempre avere chiaro ciò a cui desideri consentire l'accesso e quindi verificare se sono possibili altri scenari con le autorizzazioni concesse.
Per ulteriori informazioni, oltre alla documentazione, puoi trovare del codice per implementare autorizzatori in questo repository ufficiale aws su GitHub.
Iniezione di Policy IAM
Nella stessa presentazione viene esposto il fatto che se il codice utilizza input utente per generare le policy IAM, i caratteri jolly (e altri come "." o stringhe specifiche) possono essere inclusi al fine di eludere le restrizioni.
Modello di URL pubblico
Ottenere l'ID dell'account da un 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 chiave di condizione di policy aws:ResourceAccount
da un URL pubblico dell'API Gateway. Ciò 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).
È possibile trovare ulteriori informazioni nella ricerca originale e nello strumento conditional-love per automatizzare questa tecnica di sfruttamento.
Last updated