
Lauffähiger Proof-of-Concept für CVE-2026-80343, eine Umgehung der Groß-/Kleinschreibung von Security-Constraints in camel-netty-http, mit Spring-Boot- und Quarkus-Reproduzierern und Verifikation des Fixes.
Lauffähiger Proof-of-Concept zur Reproduktion der Apache-Camel-Schwachstelle, bei der die Security-Constraint von camel-netty-http den Anfragepfad anhand eines groß-/kleinschreibungssensitiven Abgleichs mit dem konfigurierten Kontextpfad verglich, während das Routing, das die Anfrage an den Endpoint weiterleitet, nicht dieselbe Regel anwendete. Die beiden Vergleiche stimmen für jeden Pfad nicht überein, dessen Schreibweise vom konfigurierten Wert abweicht: Ein externer Aufrufer kann die Schreibweise eines Zeichens im Kontextpfad-Segment ändern, sodass die Security-Constraint den Pfad nicht mehr als geschützt erkennt, während die Anfrage dennoch an denselben Endpoint weitergeleitet wird. Die Constraint wird übersprungen und die geschützte Route wird erreicht, ohne sie zu erfüllen — es sind keine Anmeldedaten, kein vorheriger Zugriff und keine besondere Konfiguration erforderlich.
| Laufzeitumgebung | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-netty-http 4.22.0 (betroffen; behoben in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-netty-http 3.29.0 (Camel 4.15.0, betroffen; behobene Kontrolle 3.40.0 / Camel 4.22.1) |
Ein netty-http-Consumer lauscht auf dem Kontextpfad /app und wird durch ein SecurityConstraintMapping geschützt, das /secret (relativ zum Endpoint) mit einem ablehnenden Authenticator absichert. Beide untenstehenden Anfragen enthalten keine Anmeldedaten:
GET /app/secret (konfigurierte Schreibweise) → die Constraint erkennt ihn als geschützt → 401.GET /App/secret (Schreibweise des Kontextpfads geändert) → das extractTarget des Handlers entfernt den Kontextpfad nur bei einem groß-/kleinschreibungssensitiven startsWith, sodass das Entfernen übersprungen wird und die Constraint den Pfad nicht als geschützt erkennt → der Router leitet ihn dennoch an den /app-Endpoint weiter → 200 und der geschützte Inhalt, unauthentifiziert.Im behobenen Build liefern beide Anfragen 401.
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Erwartete Ausgabe im betroffenen Build:
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 ...
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-netty-http |
| CWE | CWE-178 (Improper Handling of Case Sensitivity) |
| Schweregrad | HOCH |
| Angriffsvektor | Eine Anfrage, deren Kontextpfad-Schreibweise vom konfigurierten Endpoint-Pfad abweicht |
| Auswirkung | Security-Constraint übersprungen; geschützte Route ohne Authentifizierung erreicht |
| Betroffene Versionen | Ab 4.0.0 vor 4.18.5, ab 4.19.0 vor 4.22.1 |
| Behobene Versionen | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24412 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-80343.html
Die Security-Constraint und die Behandlung des Kontextpfads vergleichen den Pfad nun konsistent (Groß-/Kleinschreibung wird beim Kontextpfad nicht unterschieden), sodass eine Anfrage mit geänderter Schreibweise genau wie ihre konfigurierte Form als geschützt erkannt wird und derselben Authentifizierung unterliegt.
Erzwingen Sie die Autorisierung in der Route selbst, anstatt sich ausschließlich auf die Security-Constraint von netty-http zu verlassen, oder normalisieren Sie die Schreibweise des Anfragepfads vor der Sicherheitsprüfung, bis ein Upgrade möglich ist.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Nutzern zu helfen, die Schwachstelle zu verstehen, zu prüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.