
Prueba de concepto ejecutable para CVE-2026-80312, una protección OAuth de tipo fail-open en Apache Camel camel-oauth, con reproductores afectados y corregidos de Spring Boot y Quarkus.
Reproductor de prueba de concepto ejecutable para la vulnerabilidad de Apache Camel en la que los procesadores de camel-oauth que protegen
una ruta no detenían el exchange cuando no se podía completar la autenticación. Donde un fallo al establecer una
sesión autenticada debería haber terminado el enrutamiento y devuelto un error, el procesador establecía un código de respuesta pero
devolvía el control a la ruta — de modo que la petición continuaba hacia el endpoint protegido como si la autenticación hubiera
tenido éxito. El resultado es una guarda de autenticación fail-open: un llamante no autenticado alcanza lo que la ruta
hace a continuación, en la ruta de petición ordinaria, sin ninguna configuración especial.
| Runtime | Directorio | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-oauth 4.22.0 (afectado; corregido en 4.22.1), HTTP mediante camel-undertow |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-oauth 3.39.0 (Camel 4.22.0, afectado; corregido en el control 3.40.0 / Camel 4.22.1), HTTP mediante camel-quarkus-platform-http |
Ambos módulos demuestran el comportamiento afectado y el corregido. (El módulo de Spring Boot usa camel-undertow como
transporte HTTP — la guarda es independiente del transporte, y camel-platform-http-starter 4.22.0 está compilado contra una
línea de Spring Boot distinta de la 3.5.x.)
Una ruta expone /protected, protegida por OAuthBearerTokenProcessor; solo una petición autenticada debería alcanzar los
pasos protegidos que siguen. El atacante envía GET /protected sin cabecera Authorization.
exchange.setRouteStop(true), por lo que la ruta
continuaba hacia los pasos protegidos → HTTP 200 y el cuerpo protegido.rejectUnauthorized(...), que responde 401 y detiene la ruta → los pasos protegidos
nunca se ejecutan.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Salida esperada en la compilación afectada:
Sent: GET /protected (NO Authorization header)
Response status: 200
Response body : PROTECTED-DATA: reached the protected endpoint WITHOUT authenticating
>>> PROVEN: the OAuth guard failed open ...
En la compilación corregida: Response status: 401, cuerpo Authorization header, los pasos protegidos nunca se ejecutaron.
| Propiedad | Valor |
|---|---|
| Componente | camel-oauth (procesadores de protección de rutas, p. ej. OAuthBearerTokenProcessor) |
| CWE | CWE-287 (Autenticación incorrecta) |
| Severidad | ALTA |
| Vector de ataque | Una solicitud ordinaria a una ruta protegida por OAuth en la que la autenticación no puede completarse (aquí: sin cabecera Authorization) |
| Impacto | Acceso no autenticado al endpoint protegido (omisión de autenticación) |
| Versiones afectadas | Desde 4.11.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-24411 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-80312.html
Los procesadores de protección ahora llaman a rejectUnauthorized(...) / reject(...) en cada ruta en la que la autenticación no puede completarse, lo que establece el estado HTTP (401) y llama a exchange.setRouteStop(true) para que no se ejecute ningún paso posterior para una solicitud que el procesador no autenticó. "La ausencia de credenciales debe rechazarse al menos con la misma firmeza que las credenciales no válidas."
Coloque una comprobación de autorización explícita después del guard, o asegúrese de que la ruta termine cuando la propiedad de exchange CamelOAuthUserProfile esté ausente, hasta que pueda actualizar.
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. No utilice este material contra sistemas que no sean de su propiedad o que no opere.