
Proof-of-Concept-Reproducer für die Umgehung der JWT-Authentifizierung in Apache Camel (CVE-2026-66908), der die fehlende iss/aud-Validierung in camel-platform-http-main demonstriert, mit Docker-basiertem Setup und Verifizierungsschritten.
iss/aud nicht validiertAusführbarer Proof-of-Concept-Reproduktor für die Apache-Camel-Schwachstelle, bei der der in camel-main eingebettete HTTP-Server seinen JWT-Authentifikator allein aus einem Keystore erstellt, wenn weder jwtIssuer noch jwtAudience konfiguriert ist, sodass eingehende Token nur auf Signatur und Ablauf geprüft werden – die Ansprüche iss und aud werden nie validiert.
| Laufzeit | Verzeichnis | Stack |
|---|
| Camel Main (Standalone) | camel-main/ | camel-main 4.21.0 + camel-platform-http-main |
Warum camel-main und nicht Camel Spring Boot / Camel Quarkus? Die anfällige Klasse
JWTAuthenticationConfigurerlebt incamel-platform-http-main— dem in camel-main eingebetteten HTTP-Server (MainHttpServer), der von eigenständigen camel-main-Anwendungen undcamel-jbangverwendet wird. Dieser Server ist nicht die Camel-Spring-Boot-Plattform-HTTP-Integration (servlet-basiert) und auch nicht die Camel-Quarkus-Integration (Quarkus/Vert.x-HTTP mit eigener Sicherheit), daher gibt es keinen getreuen Spring-Boot- oder Quarkus-Reproduktor für diesen spezifischen Fehler. Dieses Repository stellt daher einen eigenständigen camel-main-Reproduktor bereit, der den zutreffenden Host für den Fehler darstellt.
cd camel-main
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit
docker compose down
Expected output on an affected build:
[1] GET /protected with NO token -> HTTP 401 (auth is enforced)
[2] GET /protected with token iss=https://attacker.example aud=some-unrelated-service -> HTTP 200 (ACCEPTED — iss/aud NOT validated)
[3] GET /protected with the same token but EXPIRED -> HTTP 401 (expiry IS checked)
>>> PROVEN: ... the iss and aud claims were never checked ... : true
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-platform-http-main (der in camel-main eingebettete HTTP-Server) |
| CWE | CWE-287 (Unsachgemäße Authentifizierung) / CWE-1259 (fehlende Validierung von Sicherheitsansprüchen) |
| Angriffsvektor | Ein JWT, das mit dem vertrauenswürdigen Schlüssel signiert wurde (z. B. ein gemeinsames JWKS), aber für einen anderen Aussteller/eine andere Zielgruppe ausgestellt wurde |
| Auswirkung | Jedes nicht abgelaufene Token von einer Partei, die den Signaturschlüssel teilt, wird akzeptiert – die Bereitstellung erzwingt weniger, als der Betreiber annimmt |
| Betroffene Versionen | Von 4.8.0 bis vor 4.22.0 |
| Behobene Versionen | 4.22.0 |
| JIRA | CAMEL-24281 |
| Danksagung | n0mi1k |
Ab 4.22.0 verweigert der Server den Start, wenn ein JWT-Keystore konfiguriert ist, aber weder jwtIssuer noch jwtAudience gesetzt ist, und benennt die fehlenden Eigenschaften. Ein Betreiber, der tatsächlich eine reine Signatur- und Ablaufvalidierung wünscht, muss dies explizit mit camel.server.jwtAllowMissingIssuerAndAudience=true zulassen (standardmäßig Fail-Closed):
// fixed (JWTAuthenticationConfigurer.assertIssuerOrAudienceConfigured)
if (ObjectHelper.isEmpty(audience) && ObjectHelper.isEmpty(issuer)) {
throw new IllegalArgumentException(
"JWT authentication requires camel.server.jwtIssuer or camel.server.jwtAudience to be configured, ...");
}
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Anwendern zu helfen, die Schwachstelle zu verstehen, zu prüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Die Token werden lokal mit einem Wegwerf-Demo-Keystore erstellt, der im Projekt enthalten ist. Verwenden Sie dieses Material nicht gegen Systeme, die Sie nicht besitzen oder betreiben.