In 2017 è stata individuata una vulnerabilità critica (CVSS 9.8) nelle versioni di Spring Data REST precedenti alla 2.6.9 (Ingalls SR9) e 3.0.1 (Kay SR1), e in Spring Boot nelle versioni precedenti alla 1.5.9 e 2.0 M6. Questa falla consente ad attaccanti remoti di eseguire codice arbitrario sul server tramite richieste PATCH appositamente costruite. Sebbene la vulnerabilità sia stata riconosciuta e corretta dal team Spring, non sono stati segnalati casi diffusi di sfruttamento attivo al momento, probabilmente a causa della specificità dell’attacco che richiede l’elaborazione di patch JSON abilitata ed esposta.
| Prodotto | Spring Eureka |
| Data | 2025-06-02 10:53:23 |
| Informazioni | Trending, Fix Available |
Riassunto tecnico
La vulnerabilità deriva dalla deserializzazione non sicura e dalla gestione pericolosa delle espressioni nel modo in cui Spring Data REST gestisce le richieste PATCH con il tipo di contenuto application/json-patch+json.
Gli attaccanti possono costruire un’operazione JSON Patch utilizzando il linguaggio di espressione di Spring (SpEL), come nel seguente esempio:
[
{
"op": "replace",
"path": "T(java.lang.Runtime).getRuntime().exec(\"<command>\").x",
"value": "pwned"
}
]
Questo consente di eseguire codice Java arbitrario (ad esempio, lanciare comandi di sistema o esfiltrare dati). L’espressione viene interpretata dal motore SpEL del framework Spring a causa della mancata validazione dell’input nella gestione delle PATCH.
Esempio di sfruttamento tramite curl:
curl --request PATCH \
-H "Content-Type: application/json-patch+json" \
-d '[{ "op" : "replace", "path" : "T(java.lang.Thread).sleep(10000).x", "value" : "pwned" }]' \
http://localhost:8080/entity/1
Questo ritarderebbe la risposta di 10 secondi, dimostrando l’esecuzione del codice.
Payload più complessi possono estrarre l’output del comando o stabilire reverse shell tramite l’esecuzione di comandi a runtime.
Raccomandazioni
-
Aggiornare immediatamente:
- Aggiornare Spring Data REST alla versione 2.6.9 o successiva (Ingalls SR9) oppure 3.0.1 o successiva (Kay SR1).
- Aggiornare Spring Boot alla versione 1.5.9 o successiva oppure 2.0 M6 o successiva.
-
Disabilitare il supporto PATCH JSON se non necessario:
- JSON Patch non è comunemente richiesto nella maggior parte delle API REST. Se non utilizzato, disattivare il supporto per
application/json-patch+json.
- JSON Patch non è comunemente richiesto nella maggior parte delle API REST. Se non utilizzato, disattivare il supporto per
-
Filtrare e sanificare l’input:
- Applicare una validazione rigorosa delle richieste per impedire che espressioni malevole vengano interpretate.