Reprodutor de PoC para CVE-2026-49042 (Apache Camel camel-langchain4j-tools): os argumentos de chamada de ferramenta de um LLM com injeção de prompt tornam-se cabeçalhos Exchange não filtrados, sequestrando o sink exec: da rota da ferramenta para RCE. Corrigido em 4.14.8/4.18.3/4.21.0.
Reprodutores de prova de conceito executáveis para a mesma vulnerabilidade do Apache Camel, um por runtime:
| Runtime | Diretório | Stack | Sink sequestrado | Impacto demonstrado |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | exec: via CamelExecCommand* | execução remota de código |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (inclui Camel 4.20.0) | http via CamelHttpUri | SSRF + divulgação de segredos |
Ambas são versões afetadas (corrigidas em 4.14.8 / 4.18.3 / 4.21.0), e ambas demonstram o mesmo defeito:
LangChain4jToolsProducer#invokeTools copia todos os campos do JSON de argumentos de chamada de ferramenta do modelo
diretamente para os cabeçalhos do Exchange, sem qualquer verificação contra o esquema de parâmetros declarado. A ferramenta declara um parâmetro
(host), mas um modelo com injeção de prompt emite campos adicionais que se tornam cabeçalhos de controle do Camel e sequestram
qualquer produtor que a rota da ferramenta use a jusante (CWE-20).
Nenhum LLM real ou chave de API é necessário: a injeção vive inteiramente nos argumentos de chamada de ferramenta que um modelo simulado emite, exatamente como um modelo com jailbreak ou injeção indireta de prompt produziria.
A variante Spring Boot prova RCE através de um sink exec:. Esse sink não é alcançável por padrão no Camel
4.20.0 (o que o Camel Quarkus 3.36.0 inclui): CAMEL-23315 adicionou uma opção allowControlHeaders ao
camel-exec, com padrão false, lançada pela primeira vez em 4.20.0. Esse endurecimento é independente deste CVE e
não o corrige — os campos injetados ainda se tornam cabeçalhos do Exchange na versão 4.20.0 (verificado no log da rota);
apenas aquele sink a jusante parou de honrar seus cabeçalhos de controle. A variante Quarkus, portanto, sequestra o
produtor http, que é honrado por padrão, e adicionalmente contrabandeia um placeholder de propriedade do Camel que o
produtor resolve — resultando em SSRF mais divulgação de um segredo real da aplicação.
Cada subdiretório é um projeto autossuficiente com seu próprio Dockerfile, docker-compose.yml e README. Em
resumo, para qualquer um deles:
cd camel-spring-boot # ou: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
| Propriedade | Valor |
|---|---|
| Componente | camel-langchain4j-tools (também camel-langchain4j-agent, camel-spring-ai-tools) |
| Classe Afetada | org.apache.camel.component.langchain4j.tools.LangChain4jToolsProducer#invokeTools |
| CWE | CWE-20 (Validação de Entrada Incorreta) — argumentos de chamada de ferramenta não filtrados se tornam cabeçalhos de controle do Exchange |
| Impacto | RCE / SSRF / escrita arbitrária de arquivos, dependendo do produtor a jusante da rota da ferramenta |
| Versões Afetadas | 4.8.0–4.14.7, 4.15.0–4.18.2, 4.19.0–4.20.x |
| Versões Corrigidas | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23621 (PR apache/camel#23535) |
| Crédito | Yu Bao (PayPal) |
Estes reprodutores são fornecidos apenas para pesquisa de segurança e testes autorizados, para uma vulnerabilidade divulgada publicamente e corrigida. Não os utilize contra sistemas sem permissão explícita.