AWS - Steal Lambda Requests
Lambda-Fluss
Slicer ist ein Prozess außerhalb des Containers, der Aufrufe an den init-Prozess sendet.
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
bootstrap.py hat eine Schleife, die Aufrufe vom init-Prozess abruft und den Benutzercode aufruft, um sie zu verarbeiten (
/next
).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
Finden Sie eine RCE-Verwundbarkeit.
Generieren Sie einen bösartigen Bootstrap (z. B. https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
Führen Sie den bösartigen Bootstrap aus.
Diese Aktionen können Sie problemlos ausführen, indem Sie:
Für weitere Informationen siehe https://github.com/carlospolop/lambda_bootstrap_switcher
Referenzen
Last updated