
Proof-of-Concept-Reproduktionen für Apache Camel camel-knative Structured-CloudEvent-Header-Injection (CVE-2026-63621), die Header-Injection über bösartige Erweiterungsfelder in Spring-Boot- und Quarkus-Laufzeitumgebungen demonstrieren.
Ausführbare Proof-of-Concept-Reproducer für dieselbe Apache-Camel-Schwachstelle, einer pro Laufzeitumgebung:
| Laufzeit | Verzeichnis | Stack | Stil |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.18.2 | direkte Dekodierung (siehe Hinweis) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (enthält Camel 4.20.0) | vollständige HTTP-getriebene Knative-Quelle |
Beide sind betroffene Versionen (das Problem ist in 4.14.9 / 4.18.4 / 4.22.0 behoben) und beide demonstrieren denselben
Defekt: der camel-knative-Konsument akzeptiert CloudEvents in zwei Inhaltsmodi. Im binären Modus treffen die Attribute als HTTP-Header ein und werden durch eine HeaderFilterStrategy gemappt, sodass Camel*-Header verworfen werden. Im strukturierten Modus (Content-Type: application/cloudevents+json) ist das gesamte Ereignis ein JSON-Body, und der betroffene Build bildet jedes Erweiterungsfeld dieses JSON auf die Message-Header ab, mit setHeader(key.toLowerCase(Locale.US), value) und ohne HeaderFilterStrategy. Erweiterungsnamen werden vom Absender gewählt, sodass ein Angreifer einen Camel-internen Steuer-Header setzen kann. Hier wird die injizierte Erweiterung camelsqlquery zum CamelSqlQuery-Header (Camel-Header sind case-insensitiv) – die Anweisung, die ein camel-sql-Producer ausführen würde (Header-Injektion → CWE-74).
Hinweis zur Spring-Boot-Variante. Der Knative-HTTP-Transport basiert auf Vert.x und wird in camel-main / Camel-Quarkus-Bereitstellungen verwendet. Eine Spring-Boot-Servlet-Anwendung hostet diesen Transport nicht, daher steuert der Spring-Boot-Reproducer die exakt anfällige Dekodierung (
CloudEventProcessors.fromSpecVersion("1.0").consumer(...)) direkt an – denselben Codepfad, den eine eingehendeapplication/cloudevents+json-Anfrage innerhalb des Knative-Konsumenten durchläuft. Die Camel-Quarkus-Variante ist der vollständige HTTP-getriebene Reproducer (POST eines CloudEvents an die Live-Quelle).
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Erwartete Ausgabe bei einem betroffenen Build (beide Varianten):
1) Benign structured CloudEvent (no extension):
CamelSqlQuery ... = [null]
2) Malicious structured CloudEvent (injected extension 'camelsqlquery'):
CamelSqlQuery ... = [SELECT * FROM secrets WHERE 1=1 -- injected-by-attacker]
>>> PROVEN: ... a camel-sql producer downstream would execute this attacker-supplied statement: true
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-knative (Spring Boot: camel-knative; Quarkus: camel-quarkus-knative) |
| CWE | CWE-20 (Unzureichende Eingabevalidierung) → CWE-74 (Injektion) |
| Angriffsvektor | Ein strukturierter CloudEvent (application/cloudevents+json) mit einem vom Angreifer gewählten Erweiterungsfeld |
| Auswirkung | Injektion von Camel-internen Steuer-Headern in den Exchange (hier CamelSqlQuery) |
| Betroffene Versionen | Von 3.15.0 bis vor 4.14.9, von 4.15.0 bis vor 4.18.4, von 4.19.0 bis vor 4.22.0 |
| Behobene Versionen | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-24084 |
| Anerkennung | Andrea Cosentino (Apache Software Foundation) |
Sicherheitshinweis: https://camel.apache.org/security/CVE-2026-63621.html
Die Erweiterungszuordnung im strukturierten Modus führt nun jedes Feld vor dem Setzen durch eine HeaderFilterStrategy (eine DefaultHeaderFilterStrategy) aus, konsistent mit dem Pfad des binären Inhaltsmodus – sodass Camel*-Erweiterungsnamen aus dem nicht vertrauenswürdigen Body verworfen werden:
// fixed (AbstractCloudEventProcessor.mapExtensionAsHeader)
final String headerName = key.toLowerCase(Locale.US);
if (!headerFilterStrategy.applyFilterToExternalHeaders(headerName, value, exchange)) {
message.setHeader(headerName, value);
}
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Benutzern zu helfen, die Schwachstelle zu verstehen, zu überprüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade das Problem behebt. Der injizierte Wert ist ein harmloser Marker (eine inerte SQL-Zeichenfolge, die hier nie ausgeführt wird). Verwenden Sie dieses Material nicht gegen Systeme, die Sie nicht besitzen oder betreiben.