
Prueba de concepto ejecutable en Spring Boot que reproduce CVE-2026-84176, una vulnerabilidad CORS de credenciales con cualquier origen en Apache Camel camel-platform-http-vertx, con pasos de verificación.
Reproductor de prueba de concepto ejecutable para la vulnerabilidad de Apache Camel en la que VertxPlatformHttpServerSupport. createCorsHandler() establecía Access-Control-Allow-Credentials: true fuera de la comprobación de origen — por lo que se enviaba en
cada respuesta a una solicitud que llevaba una cabecera Origin, incluidas las respuestas a orígenes que el handler acababa de decidir
no permitir. Cuando camel.server.cors.origins no está definido, el handler trata todos los orígenes como permitidos y devuelve el
propio Origin del llamante como Access-Control-Allow-Origin. Juntos producen la configuración de cualquier origen con credenciales
que la especificación fetch se niega a expresar como un comodín literal — exactamente por lo que reflejar el origen
es la forma habitual de sortear esa regla. Por lo tanto, una página en cualquier origen puede realizar solicitudes cross-origin con credenciales al
endpoint de Camel y leer las respuestas.
| Runtime | Directorio | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http-vertx 4.22.0 (afectado; corregido en 4.22.1) |
Camel Quarkus: no aplicable. El handler vulnerable está en el propio servidor platform-http de Vert.x independiente de Camel (
camel-platform-http-vertx). En Camel Quarkus,platform-httpes servido por el servidor HTTP de Quarkus y CORS es gestionado por Quarkus (quarkus.http.cors.*), no porcreateCorsHandler(), por lo que este defecto concreto no es alcanzable allí. (Tampoco existecamel-platform-http-vertx-starter; el módulo Spring Boot usa el artefacto simplecamel-platform-http-vertx, que ejecuta su propio servidor Vert.x independiente del servidor web de Spring Boot.)
La aplicación inicia el servidor platform-http de Vert.x de Camel en el puerto 8081 con CORS habilitado y sin orígenes configurados, y
una ruta platform-http:/api. El atacante envía GET /api con Origin: https://evil.example (un origen nunca
incluido en la lista de permitidos) e inspecciona la respuesta:
Access-Control-Allow-Origin: https://evil.example (reflejado) y
Access-Control-Allow-Credentials: true.Access-Control-Allow-Credentials ya no se concede a este origen.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:
Response CORS headers:
Access-Control-Allow-Origin = https://evil.example
Access-Control-Allow-Credentials = true
>>> PROVEN: the endpoint echoes the attacker's Origin ... and sends Access-Control-Allow-Credentials: true ...
| Propiedad | Valor |
|---|---|
| Componente | camel-platform-http-vertx |
| CWE | CWE-942 (Política entre dominios permisiva con dominios no confiables) |
| Gravedad | MEDIA |
| Vector de ataque | Una solicitud entre orígenes (con credenciales) que transporta un encabezado Origin hacia un endpoint platform-http-vertx con CORS habilitado y sin orígenes configurados |
| Impacto | Cualquier origen puede realizar solicitudes entre orígenes con credenciales y leer las respuestas |
| Versiones afectadas | Desde 4.0.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-24436 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-84176.html
Access-Control-Allow-Credentials: true ya no se emite de forma incondicional para cada origen; las credenciales no se
conceden a un origen que no esté permitido explícitamente, por lo que la combinación de origen reflejado más
credenciales ("cualquier origen con credenciales") ya no se produce.
Establezca una lista de permitidos explícita en camel.server.cors.origins, y no dependa del acceso entre orígenes con
credenciales desde orígenes arbitrarios; coloque el endpoint detrás de un proxy que aplique una política CORS correcta.
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.