# AWS - Вкрасти запити Lambda {{#include ../../../../banners/hacktricks-training.md}} ## Потік 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`** – повернути помилку виконання 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 <