Une resource policy d'API Gateway décide quels principals, VPC sources ou plages d'IP peuvent invoquer l'API. Lorsqu'elle est écrite avec un principal en wildcard, une condition manquante ou une source trop large, une API censée être privée devient invocable par quiconque peut atteindre son endpoint, y compris des API strictement internes exposées à un attaquant qui détient n'importe quel crédentiel de compte ou position réseau.
Lire la politique et invoquer#
aws apigateway get-rest-api --rest-api-id <id> --query 'policy'
# invoke the stage endpoint directly
curl -s "https://<id>.execute-api.<region>.amazonaws.com/<stage>/<path>"
Pour une API PRIVATE liée à un endpoint de VPC, invoquez-la depuis l'intérieur du VPC (ou via une SSRF depuis une ressource qui s'y trouve) lorsque la politique ne restreint pas davantage l'appelant.
Notes d'exploitation#
- Un
Principal: "*"sansConditionrend l'API invocable par le monde entier à son endpoint ; une conditionaws:SourceVpcen'aide que l'attaquant déjà présent dans ce VPC. - Les API privées s'atteignent depuis une ressource compromise située dans le VPC ou via une primitive SSRF : associez donc ceci à la SSRF.
- Cartographiez d'abord les routes avec
get-resources: les routes non documentées derrière la gateway sont souvent les plus intéressantes.
Outils#
- AWS CLI (
apigateway get-rest-api,get-resources) : découverte de la politique et des routes. - curl / Burp Suite : invoquer et fuzzer les routes exposées.