AWS - API Gateway Unauthenticated Enum

Support HackTricks

API Invoke bypass

Según la charla Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, los Lambda Authorizers pueden ser configurados usando la sintaxis de IAM para dar permisos para invocar endpoints de API. Esto se toma de la documentación:

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

El problema con esta forma de dar permisos para invocar endpoints es que el "*" implica "cualquier cosa" y no se admite más sintaxis regex.

Algunos ejemplos:

  • Una regla como arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/* para dar acceso a cada usuario a /dashboard/user/{username} les dará acceso a otras rutas como /admin/dashboard/createAdmin, por ejemplo.

Ten en cuenta que "*" no deja de expandirse con barras; por lo tanto, si usas "*" en api-id, por ejemplo, también podría indicar "cualquier etapa" o "cualquier método" siempre que la regex final siga siendo válida. Así que arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* Puede validar una solicitud POST para la etapa de prueba en la ruta /prod/GET/dashboard/admin, por ejemplo.

Siempre debes tener claro qué quieres permitir que acceda y luego verificar si otros escenarios son posibles con los permisos otorgados.

Para más información, aparte de la documentación, puedes encontrar código para implementar autorizadores en este github oficial de aws.

Inyección de Políticas IAM

En la misma charla se expone el hecho de que si el código está utilizando entrada del usuario para generar las políticas IAM, se pueden incluir comodines (y otros como "." o cadenas específicas) con el objetivo de eludir restricciones.

Plantilla de URL pública

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

Obtener ID de cuenta desde la URL pública de API Gateway

Al igual que con los buckets de S3, Data Exchange y las URL de Lambda, es posible encontrar el ID de cuenta de una cuenta abusando de la aws:ResourceAccount Policy Condition Key desde una URL pública de API Gateway. Esto se hace encontrando el ID de cuenta un carácter a la vez abusando de comodines en la sección aws:ResourceAccount de la política. Esta técnica también permite obtener valores de etiquetas si conoces la clave de la etiqueta (hay algunas predeterminadas interesantes).

Puedes encontrar más información en la investigación original y la herramienta conditional-love para automatizar esta explotación.

Apoya a HackTricks

Last updated