
Reprodutor de prova de conceito executável para CVE-2026-85316, demonstrando modo proxy não intencional na correspondência de prefixo de caminho do camel-platform-http do Apache Camel, com controles de versão corrigida.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que o camel-platform-http decidia se um
endpoint era executado em modo proxy testando se o caminho configurado começava com a string proxy, em vez de
corresponder exatamente a ela. O modo proxy transforma um endpoint em um catch-all (getPath() passa a ser /) cujo alvo de encaminhamento
é obtido do próprio cabeçalho Host da requisição. Assim, qualquer endpoint cujo caminho apenas começasse com esses caracteres —
proxyStats, proxy-health, proxying, … — tornava-se silenciosamente um proxy de encaminhamento que o autor da rota nunca solicitou: uma
primitiva de falsificação de requisições e uma exposição de tudo o que o caminho de encaminhamento consegue alcançar (CWE-1220).
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http 4.22.0 (afetado; corrigido em 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-platform-http (Camel 4.22.0, afetado; controle corrigido CQ 3.40.0 / Camel 4.22.1) |
Ambos os módulos demonstram o comportamento afetado e o corrigido contra o PlatformHttpEndpoint real.
O driver espelha o próprio teste de regressão da correção (PlatformHttpEndpointProxyPathTest). Ele cria um
endpoint platform-http:proxyStats — um endpoint de estatísticas cujo nome por acaso começa com proxy — e pergunta
ao componente se ele é um proxy:
isHttpProxy() retorna true e getPath() colapsa para o catch-all / — o endpoint foi
transformado em um proxy de encaminhamento.isHttpProxy() retorna false e getPath() é proxyStats — apenas o caminho exato proxy seleciona
o modo proxy.O endpoint documentado platform-http:proxy permanece um proxy em ambas as versões (mostrado para contraste), confirmando que a
correção apenas remove a classificação não intencional.
# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: proxyStats isHttpProxy=true, path "/"; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85316-platform-http-proxy-prefix-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: isHttpProxy=false, path "proxyStats"; >>> 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): proxyStats isHttpProxy=true, path "/"
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: isHttpProxy=false, path "proxyStats"
| Propriedade | Valor |
|---|---|
| Componente | camel-platform-http (PlatformHttpEndpoint.isHttpProxy) |
| CWE | CWE-1220 (Granularidade Insuficiente de Controle de Acesso) |
| Severidade | MÉDIA |
| Vetor de ataque | Uma rota declara um endpoint platform-http cujo caminho começa com proxy (mas não se destina a fazer proxy); ele se torna um encaminhamento catch-all para o cabeçalho Host do chamador |
| Impacto | Proxy/request-forgery não intencional e exposição de tudo o que o caminho de encaminhamento consegue alcançar |
| Versões Afetadas | Da 4.0.0 anterior à 4.18.5, da 4.19.0 anterior à 4.22.1 |
| Versões Corrigidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24455 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85316.html
O módulo afetado do Quarkus é construído sobre o CQ 3.39.0 (Camel 4.22.0). O controle corrigido é o CQ 3.40.0 (Camel 4.22.1). A demonstração apenas cria e inspeciona um endpoint (
isHttpProxy()/getPath()), portanto nenhum servidor HTTP é iniciado; o módulo Spring Boot usa o componente simplescamel-platform-httpem vez do starter.
PlatformHttpEndpoint.isHttpProxy() agora compara o caminho por igualdade
com proxy (PROXY_PATH.equals(this.path)) em vez de usar startsWith, de modo que apenas o endpoint documentado platform-http:proxy
é executado em modo proxy.
Renomeie qualquer caminho de endpoint que comece com proxy mas não se destine a ser um proxy.
Este repositório é publicado para fins educacionais e defensivos: para ajudar os usuários do Apache Camel a entender a vulnerabilidade, verificar se são afetados e confirmar que a atualização a resolve. A demonstração apenas inspeciona a classificação do endpoint em processo e não encaminha nenhum tráfego. Não use este material contra sistemas que você não possui ou opera.