
Reproducteur de PoC pour CVE-2026-49042 (Apache Camel camel-langchain4j-tools) : les arguments d'appel d'outil d'un LLM injecté par prompt deviennent des en-têtes Exchange non filtrés, détournant le sink exec: de la route d'outils pour une RCE. Corrigé dans 4.14.8/4.18.3/4.21.0.
Reproducteurs de preuve de concept exécutables pour la même vulnérabilité Apache Camel, un par runtime :
| Runtime | Répertoire | Stack | Sink détourné | Impact démontré |
|---|---|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | exec: via CamelExecCommand* | exécution de code à distance |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (embarque Camel 4.20.0) | http via CamelHttpUri | SSRF + divulgation de secrets |
Les deux sont des versions affectées (corrigées en 4.14.8 / 4.18.3 / 4.21.0) et démontrent toutes deux le même défaut :
LangChain4jToolsProducer#invokeTools copie tous les champs du JSON des arguments d'appel d'outil du modèle directement
dans les en-têtes Exchange, sans aucune vérification par rapport au schéma de paramètres déclaré. L'outil déclare un paramètre
(host), mais un modèle soumis à une injection par prompt émet des champs supplémentaires qui atterrissent comme en-têtes de contrôle
Camel et détournent le producteur utilisé en aval par la route de l'outil (CWE-20).
Aucun LLM réel ni clé API n'est nécessaire : l'injection réside entièrement dans les arguments d'appel d'outil émis par un modèle simulé, exactement comme les produirait un modèle jailbreaké ou soumis à une injection indirecte par prompt.
La variante Spring Boot prouve la RCE via un sink exec:. Ce sink n'est pas accessible par défaut sur Camel
4.20.0 (ce que Camel Quarkus 3.36.0 embarque) : CAMEL-23315 a ajouté une option allowControlHeaders à
camel-exec, avec pour valeur par défaut false, livrée pour la première fois dans 4.20.0. Ce durcissement est indépendant de cette CVE et
ne la corrige pas — les champs injectés deviennent toujours des en-têtes Exchange en 4.20.0 (vérifié dans le journal de la route) ;
seul ce sink en aval a cessé de respecter ses en-têtes de contrôle. La variante Quarkus détourne donc le
producteur http, qui est respecté par défaut, et fait également passer en fraude un espace réservé de propriété Camel que le
producteur résout — ce qui produit une SSRF et la divulgation d'un secret applicatif réel.
Chaque sous-répertoire est un projet autonome avec son propre Dockerfile, docker-compose.yml et README. En
bref, pour l'un ou l'autre :
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Avis de sécurité : https://camel.apache.org/security/CVE-2026-49042.html
Ces reproducteurs sont fournis uniquement à des fins de recherche en sécurité et de tests autorisés, pour une vulnérabilité divulguée publiquement et corrigée. Ne les utilisez pas contre des systèmes sans autorisation explicite.
| Propriété | Valeur |
|---|
| Composant | camel-langchain4j-tools (également camel-langchain4j-agent, camel-spring-ai-tools) |
| Classe affectée | org.apache.camel.component.langchain4j.tools.LangChain4jToolsProducer#invokeTools |
| CWE | CWE-20 (Improper Input Validation) — les arguments d'appel d'outil non filtrés deviennent des en-têtes de contrôle Exchange |
| Impact | RCE / SSRF / écriture de fichier arbitraire, selon le producteur en aval de la route de l'outil |
| Versions affectées | 4.8.0–4.14.7, 4.15.0–4.18.2, 4.19.0–4.20.x |
| Versions corrigées | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23621 (PR apache/camel#23535) |
| Crédit | Yu Bao (PayPal) |