
Riproduttore PoC per CVE-2026-49042 (Apache Camel camel-langchain4j-tools): gli argomenti delle tool-call di un LLM colpito da prompt injection diventano header Exchange non filtrati, dirottando il sink exec: della route dello strumento per ottenere RCE. Corretto nelle versioni 4.14.8/4.18.3/4.21.0.
Reproducer proof-of-concept eseguibili per la stessa vulnerabilità Apache Camel, uno per runtime:
| Runtime | Directory | Stack | Sink dirottato | Impatto dimostrato |
|---|---|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | exec: via CamelExecCommand* | esecuzione remota di codice |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (che include Camel 4.20.0) | http via CamelHttpUri | SSRF + divulgazione di segreti |
Entrambe sono versioni interessate (corrette in 4.14.8 / 4.18.3 / 4.21.0) e dimostrano il medesimo difetto:
LangChain4jToolsProducer#invokeTools copia ogni campo del JSON degli argomenti di tool-call del modello direttamente
nelle intestazioni Exchange, senza alcun controllo rispetto allo schema dei parametri dichiarato. Il tool dichiara un solo
parametro (host), ma un modello manipolato tramite iniezione nel prompt emette campi aggiuntivi che finiscono come intestazioni
di controllo Camel e dirottano qualunque producer utilizzi la route del tool a valle (CWE-20).
Non serve alcun LLM reale né chiave API: l'iniezione risiede interamente negli argomenti di tool-call emessi da un modello mock, esattamente come li produrrebbe un modello jailbroken o soggetto a iniezione indiretta nel prompt.
La variante Spring Boot dimostra RCE tramite un sink exec:. Quel sink non è raggiungibile di default su Camel
4.20.0 (quella inclusa in Camel Quarkus 3.36.0): CAMEL-23315 ha aggiunto un'opzione allowControlHeaders a
camel-exec, con default false, distribuita per la prima volta in 4.20.0. Questa mitigazione è indipendente da questa
CVE e non la corregge — i campi iniettati diventano comunque intestazioni Exchange in 4.20.0 (verificato nel log della route);
solo quel singolo sink a valle ha smesso di onorare le proprie intestazioni di controllo. La variante Quarkus dirotta quindi il
producer http, che è onorato di default, e in più introduce di nascosto un property placeholder Camel che il producer risolve —
con conseguente SSRF e divulgazione di un segreto reale dell'applicazione.
Ogni sottodirectory è un progetto autonomo con il proprio Dockerfile, docker-compose.yml e README. In breve, per entrambi:
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
Advisory: https://camel.apache.org/security/CVE-2026-49042.html
Questi reproducer sono forniti esclusivamente per ricerca sulla sicurezza e test autorizzati, per una vulnerabilità divulgata pubblicamente e corretta. Non utilizzarli contro sistemi senza autorizzazione esplicita.
| Proprietà | Valore |
|---|
| Componente | camel-langchain4j-tools (anche camel-langchain4j-agent, camel-spring-ai-tools) |
| Classe interessata | org.apache.camel.component.langchain4j.tools.LangChain4jToolsProducer#invokeTools |
| CWE | CWE-20 (Improper Input Validation) — gli argomenti di tool-call non filtrati diventano intestazioni di controllo Exchange |
| Impatto | RCE / SSRF / scrittura arbitraria di file, a seconda del producer a valle nella route del tool |
| Versioni interessate | 4.8.0–4.14.7, 4.15.0–4.18.2, 4.19.0–4.20.x |
| Versioni corrette | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23621 (PR apache/camel#23535) |
| Crediti | Yu Bao (PayPal) |