# AWS - Lambda İsteklerini Çal {{#include ../../../../banners/hacktricks-training.md}} ## Lambda Akışı

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

1. **Slicer**, **invocation**'ları **init** sürecine **gönderen** konteyner dışındaki bir süreçtir. 2. Init süreci, bazı ilginç uç noktaları açığa çıkaran **9001** portunu dinler: - **`/2018-06-01/runtime/invocation/next`** – bir sonraki invocation olayını al - **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – invoke için handler yanıtını döndür - **`/2018-06-01/runtime/invocation/{invoke-id}/error`** – bir yürütme hatası döndür 3. **bootstrap.py**, init sürecinden invocation'ları alan bir döngüye sahiptir ve bunları işlemek için kullanıcı kodunu çağırır (**`/next`**). 4. Son olarak, **bootstrap.py** init'e **yanıtı** gönderir. Bootstrap'ın kullanıcı kodunu bir modül olarak yüklediğini unutmayın, bu nedenle kullanıcı kodu tarafından gerçekleştirilen herhangi bir kod yürütmesi aslında bu süreçte gerçekleşmektedir. ## Lambda İsteklerini Çalmak Bu saldırının amacı, kullanıcı kodunun, savunmasız isteği işleyen **`bootstrap.py`** süreci içinde kötü niyetli bir **`bootstrap.py`** süreci çalıştırmasını sağlamaktır. Bu şekilde, **kötü niyetli bootstrap** süreci, istekleri işlemek için **init süreciyle** **iletişim kurmaya** başlayacakken, **meşru** bootstrap, kötü niyetli olanı çalıştırarak **tuzağa düşürülmüş** olacaktır, böylece init sürecine istek sormayacaktır. Bu, kullanıcı kodunun meşru **`bootstrap.py`** süreci tarafından yürütüldüğü için basit bir görevdir. Böylece saldırgan: - **Mevcut invocation'ın sahte bir sonucunu init sürecine gönderebilir**, böylece init, bootstrap sürecinin daha fazla invocation beklediğini düşünebilir. - **`/${invoke-id}/response`** adresine bir istek gönderilmelidir. - Invoke-id, meşru **`bootstrap.py`** sürecinin yığınından [**inspect**](https://docs.python.org/3/library/inspect.html) python modülünü kullanarak elde edilebilir (burada [önerildiği gibi](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) veya sadece tekrar **`/2018-06-01/runtime/invocation/next`** adresine istekte bulunarak elde edilebilir (burada [önerildiği gibi](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)). - Bir sonraki invocation'ları yönetecek kötü niyetli bir **`boostrap.py`** çalıştırın. - Gizlilik amacıyla, lambda invocation parametrelerini saldırganın kontrolündeki bir C2'ye göndermek ve ardından istekleri normal şekilde işlemek mümkündür. - Bu saldırı için, **`bootstrap.py`**'nin orijinal kodunu sistemden veya [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py) üzerinden almak, kötü niyetli kodu eklemek ve mevcut lambda invocation'ından çalıştırmak yeterlidir. ### Saldırı Adımları 1. Bir **RCE** açığı bulun. 2. **Kötü niyetli** bir **bootstrap** oluşturun (örneğin, [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. Kötü niyetli bootstrap'ı **çalıştırın**. Bu eylemleri kolayca gerçekleştirebilirsiniz: ```bash python3 <