
Reproductor ejecutable de prueba de concepto para CVE-2026-85316, que demuestra el modo proxy no intencionado en la coincidencia de prefijos de ruta de Apache Camel camel-platform-http, con controles de versión corregida.
Reproductor de prueba de concepto ejecutable para la vulnerabilidad de Apache Camel en la que camel-platform-http decidía si un
endpoint se ejecutaba en modo proxy comprobando si su ruta configurada comenzaba con la cadena proxy, en lugar de
coincidir exactamente con ella. El modo proxy convierte un endpoint en un catch-all (getPath() pasa a ser /) cuyo destino de reenvío
se toma del propio encabezado Host de la petición. Así, cualquier endpoint cuya ruta simplemente empiece por esos caracteres —
proxyStats, proxy-health, proxying, … — se convertía silenciosamente en un proxy de reenvío que el autor de la ruta nunca solicitó: una
primitiva de falsificación de peticiones y una exposición de todo aquello que la ruta de reenvío pueda alcanzar (CWE-1220).
| Runtime | Directorio | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http 4.22.0 (afectado; corregido en 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-platform-http (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 contra el PlatformHttpEndpoint real.
El driver replica la propia prueba de regresión de la corrección (PlatformHttpEndpointProxyPathTest). Crea un
endpoint platform-http:proxyStats — un endpoint de estadísticas cuyo nombre resulta empezar por proxy — y pregunta al
componente si es un proxy:
isHttpProxy() devuelve true y getPath() se reduce al catch-all / — el endpoint se ha
convertido en un proxy de reenvío.isHttpProxy() devuelve false y getPath() es proxyStats — solo la ruta exacta proxy selecciona
el modo proxy.El endpoint documentado platform-http:proxy sigue siendo un proxy en ambas versiones (mostrado a modo de contraste), lo que confirma que la
corrección solo elimina la clasificación no intencionada.
# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: proxyStats isHttpProxy=true, path "/"; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85316-platform-http-proxy-prefix-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: isHttpProxy=false, path "proxyStats"; >>> 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): proxyStats isHttpProxy=true, path "/"
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: isHttpProxy=false, path "proxyStats"
| Propiedad | Valor |
|---|---|
| Componente | camel-platform-http (PlatformHttpEndpoint.isHttpProxy) |
| CWE | CWE-1220 (Granularidad insuficiente del control de acceso) |
| Severidad | MEDIA |
| Vector de ataque | Una ruta declara un endpoint platform-http cuya ruta comienza con proxy (pero no está destinada a actuar como proxy); se convierte en un comodín que reenvía al encabezado Host del llamador |
| Impacto | Proxy/request-forgery no intencionado y exposición de todo aquello que la ruta de reenvío pueda alcanzar |
| 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-24455 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85316.html
El módulo afectado de Quarkus está construido sobre CQ 3.39.0 (Camel 4.22.0). El control parcheado es CQ 3.40.0 (Camel 4.22.1). La demostración solo crea e inspecciona un endpoint (
isHttpProxy()/getPath()), por lo que no se inicia ningún servidor HTTP; el módulo de Spring Boot utiliza el componente simplecamel-platform-httpen lugar del starter.
PlatformHttpEndpoint.isHttpProxy() ahora compara la ruta por igualdad
con proxy (PROXY_PATH.equals(this.path)) en lugar de usar startsWith, de modo que solo el endpoint documentado platform-http:proxy
se ejecuta en modo proxy.
Renombre cualquier ruta de endpoint que comience con proxy pero que no esté destinada a ser un proxy.
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. La demostración solo inspecciona la clasificación del endpoint en proceso y no reenvía tráfico alguno. No utilice este material contra sistemas que no sean de su propiedad o que no opere.