
CVE-2026-41729 PoC
Dieses Repository enthält einen minimalen reproduzierbaren Proof-of-Concept (PoC) für die CVE-2026-41729, die im offiziellen Spring-Sicherheitshinweis veröffentlicht wurde.
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:NWenn Spring Data REST JSON-Patch-Anfragen (Content-Type: application/json-patch+json) verarbeitet, besteht das Problem, dass der Map-Key-Pfad-Abschnitt einer Map-typed-Property direkt in einen SpEL-Ausdruck eingefügt wird.
Gemäß dem offiziellen Sicherheitshinweis kann ein Angreifer, wenn eine persistente Entität eine Map-Typ-Eigenschaft offenlegt und eine PATCH-Anfrage an die entsprechende Item-Ressource senden kann, das Map-Key-Segment manipulieren, um aus dem beabsichtigten Map-Indexer-Literal auszubrechen und eine SpEL-Teilauswertung im Kontext der Aggregate-Root zu erreichen. Es wurde veröffentlicht, dass sowohl der Lese- als auch der Schreib-Patch-Pfad betroffen sind.
Dieser PoC nutzt den Schreib-Patch-Pfad, um zu demonstrieren, wie ein @JsonIgnore-Feld, das in der normalen REST-Darstellung nicht sichtbar ist, über einen konstruierten JSON-Patch-Pfad geändert werden kann.
Laut offiziellem Sicherheitshinweis betroffene Produkte:
Betroffene Versionen:
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.5Behobene Versionen:
3.7.204.3.174.4.154.5.12 oder 4.5.11.15.0.6 oder 5.0.5.1Der Test startet eine echte Spring-Boot-Anwendung und sendet eine HTTP PATCH-Anfrage an einen Spring Data REST Repository-Endpunkt.
Das Domain-Objekt hat die folgende Struktur:
people-MaphiddenChildren-Map, die in jedem Person-Objekt vorhanden, aber in der Jackson/Spring Data REST-Darstellung verborgen istIn der normalen REST-Antwort sind hiddenChildren und die darin enthaltenen Werte nicht sichtbar.
GET /wrappers/sample
Ein JSON-Patch, der direkt auf die versteckte Eigenschaft verweist, wird abgelehnt.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a/hiddenChildren/b/name",
"value": "after"
}
]
Durch die Verwendung eines konstruierten Map-Keys kann jedoch die Umwandlung des JSON-Patch-Pfades in einen SpEL-Pfad in Spring Data REST dazu führen, dass das beabsichtigte Map-Key-Literal verlassen und ein Pfad zu einer versteckten Eigenschaft erreicht wird.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a'].hiddenChildren['b/name",
"value": "after"
}
]
In der anfälligen Version ist diese Anfrage erfolgreich und der interne Wert ändert sich wie folgt:
before -> after
Der Test bestätigt, dass in der Map kein tatsächlicher Schlüssel a'].hiddenChildren['b angelegt wurde, sondern dass der versteckte Property-Pfad aufgrund des Ausbruchs aus dem Ausdruck geändert wurde.
Windows:
.\mvnw.cmd test
macOS/Linux:
./mvnw test
Erwartetes Ergebnis für die anfällige Version:
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
Ein erfolgreicher Test bedeutet, "dass das anfällige Verhalten reproduziert wurde". Das heißt, dass unter Verwendung der anfälligen Abhängigkeiten die konstruierte JSON-Patch-Anfrage erfolgreich ist und die Änderung des versteckten internen Zustands nachweist.
Dieses Repository verwendet das Spring Boot 3.5.14-Parent, woraus sich spring-data-rest-webmvc 4.5.11 ergibt. Dies liegt im betroffenen Bereich 4.5.0 - 4.5.11 des offiziellen Sicherheitshinweises.
Ein Angreifer, der JSON-Patch-Anfragen an einen Spring Data REST-Endpunkt senden kann, kann den Map-Key manipulieren, um eine unbeabsichtigte Auswertung eines SpEL-Pfades auf der Serverseite zu erzwingen. Dadurch können interne Werte des Objektgraphen, die die Anwendung nicht über die REST-Darstellung offenlegen wollte, gelesen oder geändert werden.
Der offizielle Sicherheitshinweis bewertete die Auswirkungen auf Vertraulichkeit und Integrität als High.
Der offizielle Spring-Hinweis enthält folgende Angabe: