
Apache Camel の脆弱性を再現する実行可能な概念実証(PoC)です。この脆弱性では、camel-netty-http の security constraint がリクエストパスを設定済みのコンテキストパスと 大文字小文字を区別する マッチングで比較していた一方、リクエストをエンドポイントへディスパッチするルーティングは同じルールを適用して いませんでした。設定値と大文字小文字が異なるあらゆるパスにおいて、この2つの比較結果は食い違います。外部の呼び出し元がコンテキストパスセグメント内の文字の大文字小文字を変更すると、security constraint はそのパスを保護対象として認識しなくなる一方、リクエストは依然として同じエンドポイントへディスパッチされます。その結果、constraint はスキップされ、保護されたルートが constraint を満たすことなく到達されます。認証情報、事前のアクセス権、特別な設定はいずれも不要です。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-netty-http 4.22.0(影響あり、修正版 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-netty-http 3.29.0(Camel 4.15.0、影響あり、修正版コントロール 3.40.0 / Camel 4.22.1) |
netty-http コンシューマーがコンテキストパス /app で待ち受け、SecurityConstraintMapping によって保護されています。このマッピングは(エンドポイントからの相対パスで)/secret を保護し、拒否するオーセンティケータを備えています。以下の2つのリクエストはいずれも 認証情報を持ちません:
GET /app/secret(設定どおりの大文字小文字)→ constraint が保護対象として認識 → 401。GET /App/secret(コンテキストパスの大文字小文字を変更)→ ハンドラの extractTarget は大文字小文字を区別する startsWith でのみコンテキストパスを除去するため、除去がスキップされ、constraint はそのパスを保護対象として認識しない → ルーターは依然として /app エンドポイントへディスパッチ → 200 となり、認証なしで保護されたボディが返る。修正版ビルドでは、両方のリクエストが 401 を返します。
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
影響を受けるビルドでの想定出力:
Configured case GET /app/secret -> status 401, body:
Altered case GET /App/secret -> status 200, body: PROTECTED-ADMIN-DATA: reached the protected endpoint
>>> PROVEN: /app/secret is correctly rejected (401), but /App/secret bypassed the security constraint ...
| 項目 | 値 |
|---|---|
| コンポーネント | camel-netty-http |
| CWE | CWE-178(大文字小文字の扱いの不備) |
| 深刻度 | HIGH |
| 攻撃ベクター | コンテキストパスの大文字小文字が設定済みエンドポイントパスと異なるリクエスト |
| 影響 | security constraint がスキップされ、認証なしで保護されたルートに到達 |
| 影響を受けるバージョン | 4.0.0 から 4.18.5 未満、4.19.0 から 4.22.1 未満 |
| 修正バージョン | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24412 |
| クレジット | Claude Security Scan Tool |
アドバイザリ: https://camel.apache.org/security/CVE-2026-80343.html
security constraint とコンテキストパスの処理が、パスを一貫して比較するようになりました(コンテキストパスでは大文字小文字を区別しない)。これにより、大文字小文字を変更したリクエストは、設定どおりの大文字小文字の形式とまったく同様に保護対象として認識され、同じ認証の対象となります。
アップグレードできるようになるまで、netty-http の security constraint のみに依存するのではなく、ルート自体で認可を強制するか、セキュリティチェックの前にリクエストパスの大文字小文字を正規化してください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、アップグレードによって解決されることを確証できるようにするためです。所有または運用していないシステムに対してこの資料を使用しないでください。