
Lauffähiger Proof-of-Concept-Reproduzierer für die Umgehung der Issuer-Validierung in Apache Camel camel-keycloak (CWE-287), der das Verhalten in Spring Boot und Quarkus sowohl im betroffenen als auch im gepatchten Zustand demonstriert.
Lauffähiger Proof-of-Concept-Reproduzierer für die Apache-Camel-Schwachstelle, bei der der
KeycloakSecurityProcessor von camel-keycloak den Issuer eines introspektierten Tokens nur dann validierte, wenn die Introspektionsantwort
tatsächlich einen iss-Claim enthielt. Fehlte der Claim, wurde die Prüfung übersprungen, statt als
Fehler behandelt zu werden, sodass ein Token, das der konfigurierte Issuer nicht ausgestellt hatte, akzeptiert werden konnte — vorausgesetzt, der Introspektionsendpunkt
antwortete mit active, ohne einen Issuer zu nennen. Wenn eine Bereitstellung gegen einen Endpunkt introspektiert, der iss auslässt und
mehr als einen Issuer bedient, hat dies zur Folge, dass sie einen Aufrufer authentifiziert, den sie hätte ablehnen müssen (CWE-287).
| Laufzeitumgebung | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-keycloak 4.22.0 (betroffen; behoben in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-keycloak (Camel 4.22.0, betroffen; behobene Kontrolle CQ 3.40.0 / Camel 4.22.1) |
Beide Module demonstrieren das betroffene und das behobene Verhalten gegenüber dem echten KeycloakSecurityProcessor.
Der Treiber konfiguriert eine KeycloakSecurityPolicy mit validateIssuer=true (erwarteter Issuer
http://localhost:8080/realms/test-realm) und einen Token-Introspektor, der das Token als aktiv meldet, aber
keinen iss-Claim zurückgibt — genau das, was ein Broker-/Gateway-Introspektionsendpunkt erzeugt, da RFC 7662 iss
optional macht. Anschließend steuert er einen KeycloakSecurityProcessor mit einem Authorization: Bearer <attacker-token>-Header an und
meldet, ob die geschützte Route erreicht wird.
iss bewirkt, dass der Prozessor die Issuer-Prüfung überspringt, sodass das Token akzeptiert und die
Route erreicht wird — ein Token von einem unbeabsichtigten Issuer wird authentifiziert.iss ist ein Validierungsfehler; der Prozessor wirft eine CamelAuthorizationException
(„Token issuer missing…“) und die Route wird nie erreicht.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: route reached, token accepted; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85301-keycloak-issuer-bypass-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: CamelAuthorizationException "Token issuer missing"; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): route reached, token accepted
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: CamelAuthorizationException "Token issuer missing"
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-keycloak (KeycloakSecurityProcessor.validateIssuerFromIntrospection) |
| CWE | CWE-287 (Improper Authentication) |
| Schweregrad | MITTEL |
| Angriffsvektor | Ein Token von einem unbeabsichtigten Aussteller, introspiziert gegen einen Endpunkt, der iss auslässt und mehr als einen Aussteller bedient, während validateIssuer=true |
| Auswirkung | Die Bereitstellung authentifiziert einen Aufrufer, dessen Token nicht vom konfigurierten Aussteller ausgestellt wurde |
| Betroffene Versionen | Ab 4.15.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-24448 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85301.html
Das betroffene Quarkus-Modul basiert auf CQ 3.39.0 (Camel 4.22.0), wobei
camel-quarkus-keycloakauf eine betroffene Camel-Version verweist. Die gepatchte Kontrolle ist CQ 3.40.0 (Camel 4.22.1).
KeycloakSecurityProcessor behandelt nun einen fehlenden iss-Claim als
Validierungsfehler: Wenn die Aussteller-Validierung aktiviert ist und das Introspektionsergebnis keinen Aussteller
enthält, wird eine CamelAuthorizationException ausgelöst, anstatt frühzeitig zurückzukehren und die Anfrage
durchzulassen. Der frühere Code übersprang den Vergleich, wann immer der Claim fehlte, wodurch der Aussteller
genau für diejenigen Tokens ungeprüft blieb, die keinen Aussteller nannten.
Stellen Sie sicher, dass der Introspektionsendpunkt den iss-Claim zurückgibt und genau einen Aussteller bedient, sodass
ein Token von einem anderen Aussteller entweder benannt (und abgelehnt) oder niemals als aktiv introspiziert wird.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Nutzern zu helfen, die Schwachstelle zu verstehen, zu überprüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Der Token-Introspector ist ein In-Process-Stub, und es ist kein echter Keycloak-Server oder Netzwerkaufruf beteiligt; das „Angreifer-Token“ ist eine undurchsichtige Platzhalterzeichenkette. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.