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 <