
Reproductor ejecutable de prueba de concepto para el bypass de validación del emisor de Apache Camel camel-keycloak (CWE-287), que demuestra el comportamiento afectado y el corregido en Spring Boot y Quarkus.
Reproductor ejecutable de prueba de concepto para la vulnerabilidad de Apache Camel en la que el
KeycloakSecurityProcessor de camel-keycloak validaba el emisor de un token introspeccionado solo cuando la respuesta de introspección
contenía realmente una declaración iss. Cuando la declaración estaba ausente, la comprobación se omitía en lugar de tratarse como un
fallo, por lo que un token que el emisor configurado no había emitido podía ser aceptado — siempre que el endpoint de introspección
respondiera active sin indicar un emisor. Cuando un despliegue realiza la introspección contra un endpoint que omite iss y
atiende a más de un emisor, la consecuencia es que autentica a un llamante que debería haber rechazado (CWE-287).
| Runtime | Directorio | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-keycloak 4.22.0 (afectado; corregido en 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-keycloak (Camel 4.22.0, afectado; control corregido CQ 3.40.0 / Camel 4.22.1) |
Ambos módulos demuestran el comportamiento afectado y el corregido frente al KeycloakSecurityProcessor real.
El driver configura un KeycloakSecurityPolicy con validateIssuer=true (emisor esperado
http://localhost:8080/realms/test-realm) y un introspector de tokens que informa del token como activo pero devuelve
ninguna declaración iss — exactamente lo que produce un endpoint de introspección de broker/gateway, ya que la RFC 7662 hace que iss
sea opcional. A continuación, ejecuta un KeycloakSecurityProcessor con una cabecera Authorization: Bearer <attacker-token> e
informa de si se alcanza la ruta protegida.
iss hace que el procesador omita la comprobación del emisor, por lo que el token es aceptado y la
ruta es alcanzada — se autentica un token de un emisor no previsto.iss ausente es un fallo de validación; el procesador lanza CamelAuthorizationException
("Token issuer missing…") y la ruta nunca es alcanzada.# 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"
| Propiedad | Valor |
|---|---|
| Componente | camel-keycloak (KeycloakSecurityProcessor.validateIssuerFromIntrospection) |
| CWE | CWE-287 (Autenticación incorrecta) |
| Gravedad | MEDIA |
| Vector de ataque | Un token de un emisor no previsto, introspeccionado contra un endpoint que omite iss y sirve a más de un emisor, mientras validateIssuer=true |
| Impacto | El despliegue autentica a un llamante cuyo token no fue emitido por el emisor configurado |
| Versiones afectadas | Desde 4.15.0 anterior a 4.18.5, desde 4.19.0 anterior a 4.22.1 |
| Versiones corregidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24448 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85301.html
El módulo afectado de Quarkus está construido sobre CQ 3.39.0 (Camel 4.22.0), donde
camel-quarkus-keycloakse corresponde con una versión de Camel afectada. El control parcheado es CQ 3.40.0 (Camel 4.22.1).
KeycloakSecurityProcessor ahora trata una reclamación iss ausente como un
fallo de validación: cuando la validación del emisor está habilitada y el resultado de la introspección no incluye ningún emisor, lanza
CamelAuthorizationException en lugar de retornar anticipadamente y dejar pasar la solicitud. El código anterior omitía la
comparación siempre que faltaba la reclamación, lo que dejaba el emisor sin verificar precisamente para los tokens que no indicaban
ningún emisor.
Asegúrese de que el endpoint de introspección devuelve la reclamación iss y sirve exactamente a un emisor, de modo que un token de cualquier otro
emisor o bien se identifica (y se rechaza) o nunca se introspecciona como activo.
Este repositorio se publica con fines educativos y defensivos: para ayudar a los usuarios de Apache Camel a comprender la vulnerabilidad, verificar si se ven afectados y confirmar que la actualización la resuelve. El introspector de tokens es un stub en proceso y no interviene ningún servidor Keycloak real ni llamada de red; el "token del atacante" es una cadena de marcador de posición opaca. No utilice este material contra sistemas que no sean de su propiedad o que no opere.