
Reproductor de PoC para CVE-2026-49042 (Apache Camel camel-langchain4j-tools): los argumentos de llamada a herramientas de un LLM con inyección de prompt se convierten en cabeceras Exchange sin filtrar, secuestrando el sink exec: de la ruta de herramientas para lograr RCE. Corregido en 4.14.8/4.18.3/4.21.0.
Reproductores de prueba de concepto ejecutables para la misma vulnerabilidad de Apache Camel, uno por runtime:
| Runtime | Directorio | Stack | Sink secuestrado | Impacto demostrado |
|---|---|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | exec: mediante CamelExecCommand* | ejecución remota de código |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (incluye Camel 4.20.0) | http mediante CamelHttpUri | SSRF + divulgación de secretos |
Ambas son versiones afectadas (corregidas en 4.14.8 / 4.18.3 / 4.21.0) y ambas demuestran el mismo defecto:
LangChain4jToolsProducer#invokeTools copia todos los campos del JSON de argumentos de llamada a herramientas del modelo directamente
a las cabeceras de Exchange, sin comprobar el esquema de parámetros declarado. La herramienta declara un parámetro
(host), pero un modelo con inyección de prompt emite campos adicionales que acaban como cabeceras de control de Camel y secuestran
cualquier productor que la ruta de la herramienta utilice aguas abajo (CWE-20).
No se necesita ningún LLM real ni clave API: la inyección reside por completo en los argumentos de llamada a herramientas que emite un modelo mock, exactamente como los produciría un modelo con jailbreak o con inyección indirecta de prompt.
La variante Spring Boot demuestra RCE a través de un sink exec:. Ese sink no es alcanzable por defecto en Camel
4.20.0 (el que incluye Camel Quarkus 3.36.0): CAMEL-23315 añadió una opción allowControlHeaders a
camel-exec, con valor por defecto false, publicada por primera vez en 4.20.0. Ese endurecimiento es independiente de este CVE y
no lo corrige: los campos inyectados siguen convirtiéndose en cabeceras de Exchange en 4.20.0 (verificado en el registro de la ruta);
solo ese sink aguas abajo dejó de respetar sus cabeceras de control. Por lo tanto, la variante Quarkus secuestra el
productor http, que se respeta por defecto, y además cuela un placeholder de propiedad de Camel que el
productor resuelve, lo que produce SSRF además de la divulgación de un secreto real de la aplicación.
Cada subdirectorio es un proyecto autónomo con su propio Dockerfile, docker-compose.yml y README. En
resumen, para cualquiera de los dos:
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
Aviso: https://camel.apache.org/security/CVE-2026-49042.html
Estos reproductores se proporcionan únicamente para investigación de seguridad y pruebas autorizadas, para una vulnerabilidad divulgada públicamente y corregida. No los utilice contra sistemas sin permiso explícito.
| Propiedad | Valor |
|---|
| Componente | camel-langchain4j-tools (también camel-langchain4j-agent, camel-spring-ai-tools) |
| Clase afectada | org.apache.camel.component.langchain4j.tools.LangChain4jToolsProducer#invokeTools |
| CWE | CWE-20 (Improper Input Validation) — los argumentos de llamada a herramientas sin filtrar se convierten en cabeceras de control de Exchange |
| Impacto | RCE / SSRF / escritura arbitraria de archivos, según el productor aguas abajo de la ruta de la herramienta |
| Versiones afectadas | 4.8.0–4.14.7, 4.15.0–4.18.2, 4.19.0–4.20.x |
| Versiones corregidas | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23621 (PR apache/camel#23535) |
| Crédito | Yu Bao (PayPal) |