
Reprodutor executável em Spring Boot e Quarkus para a CVE-2026-85254, demonstrando o bypass da supressão de eco de cabeçalhos do Apache Camel camel-platform-http por meio da capitalização de nomes de cabeçalhos, com controles afetados e corrigidos.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que a proteção que impede que um cabeçalho de requisição seja refletido na resposta comparava os nomes dos cabeçalhos diferenciando maiúsculas de minúsculas, enquanto os nomes de cabeçalhos HTTP não diferenciam maiúsculas de minúsculas. Um chamador poderia contornar a supressão simplesmente variando a caixa do nome do cabeçalho — e sob HTTP/2 ela nunca correspondia, porque o protocolo exige que os nomes dos cabeçalhos estejam em minúsculas no fio, de modo que a supressão era inerte para toda requisição HTTP/2. A consequência é que o conteúdo escolhido pelo chamador é ecoado de volta na resposta (a base para ataques de divisão de resposta e envenenamento de cache), e ele reflete os próprios cabeçalhos de credencial (Authorization, Cookie, Proxy-Authorization) que a supressão deveria manter fora da resposta.
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http-vertx 4.22.0 (afetado; corrigido 4.22.1), servidor Vert.x do Camel |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-platform-http (Camel 4.15.0, afetado; controle corrigido CQ 3.40.0 / Camel 4.22.1) |
Ambos os módulos demonstram o comportamento afetado e o corrigido.
Um endpoint platform-http:/echo é servido. Seu HeaderFilterStrategy deveria suprimir cabeçalhos de requisição comuns da resposta. O driver verifica a estratégia diretamente e também envia uma requisição ao vivo carregando um cabeçalho de credencial em minúsculas (estilo HTTP/2).
Authorization (canônico) mas não authorization (minúsculo), e uma requisição ao vivo carregando authorization: Bearer <secret> é ecoada de volta na resposta.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: lowercase header echoed back; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85254-platform-http-header-echo-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: suppressed; >>> 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.15.0): lowercase header echoed back
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: suppressed
| Propriedade | Valor |
|---|---|
| Componente | camel-platform-http (PlatformHttpEndpoint, COMMON_HTTP_REQUEST_HEADERS) |
| CWE | CWE-178 (Tratamento Incorreto de Sensibilidade a Maiúsculas e Minúsculas) |
| Severidade | MÉDIA |
| Vetor de ataque | Um cabeçalho de requisição cujo nome difere em maiúsculas/minúsculas da grafia canônica (por exemplo, qualquer requisição HTTP/2) |
| Impacto | Conteúdo de cabeçalho escolhido pelo chamador refletido na resposta — response-splitting / cache-poisoning, e reflexão de cabeçalhos de credenciais que a supressão deveria reter |
| Versões Afetadas | A partir de 4.0.0 antes de 4.18.5, a partir de 4.19.0 antes de 4.22.1 |
| Versões Corrigidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24453 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85254.html
PlatformHttpEndpoint agora mantém COMMON_HTTP_REQUEST_HEADERS em um
TreeSet(String.CASE_INSENSITIVE_ORDER) insensível a maiúsculas e minúsculas, em vez de um Set.of(...) sensível a
maiúsculas e minúsculas, de modo que a supressão corresponde independentemente de como o chamador grafou o nome do
cabeçalho — incluindo os nomes totalmente em minúsculas que o HTTP/2 exige.
Remova os cabeçalhos em questão antes do endpoint do Camel, ou remova-os da resposta na rota em vez de depender da supressão integrada.
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. O valor de cabeçalho injetado é um fixture local inerte. Não use este material contra sistemas que você não possui ou opera.