
Reproducteur exécutable Spring Boot et Quarkus pour CVE-2026-85249, démontrant l'injection d'en-tête de métadonnées camel-tika dans CamelFileName avec des contrôles affectés et corrigés.
CamelFileName)Reproducteur de preuve de concept exécutable pour la vulnérabilité Apache Camel où le producteur Tika mappait chaque
clé de métadonnées extraite du document soumis sur l'Exchange en tant qu'en-tête, sans aucun filtre appliqué. Les
métadonnées d'un document sont un contenu contrôlé par l'attaquant : la partie qui fournit le fichier choisit les clés
de métadonnées qu'il transporte. Un document forgé pouvait donc définir des en-têtes de l'Exchange dont dépend le reste
de la route, y compris des en-têtes de l'espace de noms Camel tels que CamelFileName, que les composants en aval
utilisent pour décider où le contenu est écrit. Il s'agit de la même classe d'injection d'en-têtes que celle des avis
concernant les consommateurs, atteinte ici via le contenu analysé d'un fichier plutôt que via un en-tête de protocole.
| Runtime | Répertoire | Pile technique |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-tika 4.22.0 (affecté ; corrigé en 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-tika (Camel 4.22.0, affecté ; contrôle corrigé CQ 3.40.0 / Camel 4.22.1) |
Les deux modules démontrent le comportement affecté ainsi que le comportement corrigé.
L'attaquant soumet un document HTML — un attribut HTML <meta name="..."> parvient aux métadonnées de Tika
tel quel, de sorte que le document choisit les noms d'en-têtes :
<meta name="CamelFileName" content="ATTACKER-SET-../../pwned.txt"/>
<meta name="author" content="legitimate-metadata"/>
La route est simplement from(...).to("tika:parse"). Après l'analyse, les en-têtes de l'Exchange sont inspectés.
CamelFileName (Exchange.FILE_NAME) est défini sur la valeur de l'attaquant issue du document. Un producteur de fichiers en aval utiliserait cette valeur choisie par l'attaquant pour décider où le contenu est écrit.CamelFileName est filtré (non défini à partir du document), tandis que les métadonnées ordinaires telles que author sont toujours mappées — le filtre ne bloque que l'espace de noms interne de Camel.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: document sets CamelFileName; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85249-tika-header-injection-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: CamelFileName filtered; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): document sets CamelFileName
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: CamelFileName filtered
| Propriété | Valeur |
|---|---|
| Composant | camel-tika (TikaProducer.convertMetadataToHeaders) |
| CWE | CWE-20 (Validation d'entrée incorrecte) |
| Gravité | MOYENNE |
| Vecteur d'attaque | Un document soumis dont les métadonnées analysées déclarent des noms d'en-têtes internes à Camel (par ex. via HTML <meta name="CamelFileName">) |
| Impact | Injection d'en-têtes : un document définit des en-têtes Exchange sur lesquels la route s'appuie, tels que CamelFileName, qui détermine où les composants en aval écrivent le contenu |
| Versions affectées | À partir de 4.0.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-24423 |
| Crédit | Claude Security Scan Tool |
Avis : https://camel.apache.org/security/CVE-2026-85249.html
TikaProducer.convertMetadataToHeaders filtre désormais chaque nom de métadonnée analysé
via un HeaderFilterStrategy (configuré avec inFilterStartsWith("Camel", "camel", "org.apache.camel."),
insensible à la casse) avant de le mapper sur l'Exchange — de la même manière qu'un consumer filtre les noms fournis par un
expéditeur externe — afin qu'un document ne puisse pas déclarer un nom de métadonnée qui atterrit dans l'espace de noms interne à Camel. Les métadonnées hors de cet
espace de noms sont toujours mappées.
Supprimez l'espace de noms Camel après le producer Tika avec removeHeaders("Camel*") avant tout composant qui agit sur
ces en-têtes.
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 document forgé et le nom de fichier injecté sont des fixtures locales inertes. N'utilisez pas ce matériel contre des systèmes que vous ne possédez pas ou n'exploitez pas.