Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-40047 — Reproducteur pour CVE-2026-40047 : injection d'arguments CLI / traversée de chemin dans camel-docling d'Apache Camel | Kitploit
Outils/GitHubGitHub/oscerd/cve-2026-40047
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et Éducation
GitHuboscerd/cve-2026-40047

CVE-2026-40047

Reproducteur pour CVE-2026-40047 : injection d'arguments CLI / traversée de chemin dans camel-docling d'Apache Camel

Voir le dépôt
21il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

camel-docling Injection d'arguments CLI / Contournement de chemin (CVE-2026-40047)

Ce projet démontre une vulnérabilité d'injection d'arguments CLI et de contournement de chemin dans le composant camel-docling d'Apache Camel, suivie sous la référence CVE-2026-40047. DoclingProducer construit l'invocation de l'outil en ligne de commande externe docling à partir des en-têtes de message ; les arguments personnalisés fournis via l'en-tête CamelDoclingCustomArguments étaient ajoutés avec une validation insuffisante (une liste noire plus une vérification littérale de ../), de sorte qu'un attaquant qui influence ces en-têtes peut injecter des drapeaux CLI docling arbitraires et des valeurs de chemin avec traversée dans le sous-processus.

Avis de sécurité : https://camel.apache.org/security/CVE-2026-40047.html

Résumé de la vulnérabilité

PropriétéValeur
Composantcamel-docling
Classe affectéeorg.apache.camel.component.docling.DoclingProducer (addCustomArguments / validateCustomArguments)
Cause racineCamelDoclingCustomArguments (une List<String>) ajoutée aux arguments CLI de docling avec une liste noire faible + vérification littérale de ../
CWECWE-88 (Injection d'arguments) / CWE-22 (Contournement de chemin)
ImpactInjection de drapeaux CLI docling arbitraires/non intentionnels et de valeurs de chemin hors répertoire dans l'outil externe. PAS d'injection de commandes OS (ProcessBuilder basé sur liste, sans shell).
Versions affectéesDe 4.15.0 avant 4.18.3
Versions corrigées4.18.3, 4.19.0
JIRACAMEL-23212
RapporteurAndrea Cosentino (Apache Software Foundation)

Détails techniques

DoclingProducer assemble l'invocation de docling et l'exécute via java.lang.ProcessBuilder (forme liste — pas de shell). Les arguments CLI personnalisés de l'en-tête CamelDoclingCustomArguments sont ajoutés à la commande :

root@kitploit:~
// DoclingProducer.addCustomArguments(...) - version affectée
List<String> customArgs = exchange.getIn().getHeader(DoclingHeaders.CUSTOM_ARGUMENTS, List.class);
if (customArgs != null && !customArgs.isEmpty()) {
    validateCustomArguments(customArgs);   // liste noire + vérification littérale "../" (faible)
    command.addAll(customArgs);
}

Dans les versions affectées, validateCustomArguments s'appuyait sur une liste noire de drapeaux interdits et ne rejetait que les valeurs de chemin contenant un ../ littéral. En conséquence :

  • Les drapeaux non reconnus (pas sur la liste noire) sont transmis directement à docling.
  • Les valeurs de type chemin qui traversent sans ../ littéral (chemins absolus, ou séquences normalisées) ne sont pas détectées.

Comme Camel construit l'invocation de docling, le composant est responsable de contraindre ces valeurs. Le correctif (CAMEL-23212) remplace la liste noire par une liste blanche stricte de drapeaux reconnus, rejette les drapeaux gérés par le producteur (--output/-o) et les métacaractères de shell (défense en profondeur), et normalise les valeurs de type chemin avec Path.normalize() avant validation.

L'invocation utilise la forme liste de ProcessBuilder, donc un shell n'interprète pas les valeurs — l'injection de commandes OS via des métacaractères de shell n'est pas possible ; le rejet de métacaractères dans le correctif est une défense en profondeur.

La route

root@kitploit:~
from("direct:convert")
    .to("docling:convert?operation=CONVERT_TO_MARKDOWN&contentInBody=true");

Comment ce reproducteur observe l'injection

docling est un outil externe. Ce reproducteur fournit un docling factice (sur le PATH à l'intérieur du conteneur) qui enregistre les argv qu'il reçoit et écrit un fichier markdown en retour, de sorte que les arguments injectés sont visibles dans la réponse HTTP et dans /tmp/docling-invocations.log. Tout s'exécute dans une image Docker (application + factice) — donc aucune installation réelle de docling n'est nécessaire.

Prérequis

  • Java 17+ et Maven 3.8+ (pour construire le jar)
  • Docker (exécute l'application + le factice docling)

Étapes de reproduction

Étape 1 : Construire le jar et l'image

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build

Étape 2 : Conversion normale

root@kitploit:~
curl http://localhost:8080/exploit/normal
# le docling factice reçoit : docling --to md --ocr-lang en --output <tmp> /tmp/input.txt

Étape 3 : Injecter des arguments CLI arbitraires

root@kitploit:~
curl "http://localhost:8080/exploit/attack"
# injecte CamelDoclingCustomArguments = [--injected-by-attacker, arbitrary-value]
# -> le docling factice reçoit :
#    docling --injected-by-attacker arbitrary-value --to md --ocr-lang en --output <tmp> /tmp/input.txt

# une valeur de chemin sans ../ littéral (chemin absolu) passe également :
curl "http://localhost:8080/exploit/attack?flag=--artifacts-path&value=/etc/attacker-controlled"

Sur une version affectée (ce reproducteur épingle 4.18.2), la route réussit et les arguments injectés atteignent le sous-processus. Sur une version corrigée (4.18.3 / 4.19.0), la liste blanche rejette --injected-by-attacker avec une IllegalArgumentException et la route échoue.

Nettoyage

root@kitploit:~
docker compose down

Conditions d'exploitation

  1. Une route Camel qui transmet des données influencées de l'extérieur vers CamelDoclingCustomArguments (ou les en-têtes contenant des chemins) d'un producteur docling:.
  2. Absence de suppression des en-têtes internes Camel sur les messages provenant de producteurs non fiables.

Correctif recommandé

Mettez à jour vers 4.18.3 / 4.19.0. Le correctif utilise une liste blanche stricte de drapeaux docling reconnus, rejette les drapeaux gérés par le producteur et les métacaractères de shell, et normalise les valeurs de chemin avec Path.normalize() avant de les valider.

Atténuation

En attendant la mise à jour :

  1. Ne pas mapper de contenu non fiable dans CamelDoclingCustomArguments ou les en-têtes contenant des chemins.
  2. Supprimer les en-têtes internes Camel (removeHeaders("Camel*")) des messages arrivant de producteurs non fiables avant le producteur docling:.

Fichiers

root@kitploit:~
CVE-2026-40047/
├── pom.xml
├── Dockerfile                       # app + stub 'docling' sur PATH
├── docker-compose.yml
├── docling-stub.sh                  # stub 'docling' (enregistre argv, écrit markdown)
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── DoclingRoute.java         # from(direct:convert).to(docling:convert)
    │   └── ExploitController.java    # injecte CamelDoclingCustomArguments
    └── resources/
        └── application.properties

Avertissement

Ce reproducteur est fourni uniquement pour la recherche en sécurité et les tests autorisés, pour une vulnérabilité publiquement divulguée et corrigée. Ne l'utilisez pas contre des systèmes sans autorisation explicite.

Télécharger l’outil