
Reproductores ejecutables de Spring Boot y Quarkus para CVE-2026-84180, que demuestran la fuga de excepciones del consumidor HTTP de camel-knative y verifican la corrección muteException.
Reproductor de prueba de concepto ejecutable para la vulnerabilidad de Apache Camel en la que el consumidor HTTP de Knative, cuando un
exchange fallaba en el lado del consumidor, escribía la excepción resultante de vuelta al llamador remoto como cuerpo de la respuesta
HTTP — incluyendo su nombre de clase, mensaje y traza de pila completa. Un remitente externo podía, por tanto, provocar un fallo
y leer detalles internos sobre el despliegue: nombres de clases y paquetes, nombres de sistema de archivos o de host incluidos en los mensajes
de excepción, la forma de la ruta y — cuando un mensaje de excepción incorpora una cadena de conexión o configuración — esos
datos directamente. camel-knative era el consumidor restante de la familia HTTP que no se había alineado con el comportamiento
muteException establecido para los demás consumidores HTTP por CAMEL-23651.
| Runtime | Directorio | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0 (afectado; corregido en 4.22.1), consumidor sobre el servidor platform-http de Vert.x de Camel |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative (Camel 4.15.0, afectado; control corregido CQ 3.40.0 / Camel 4.22.1), consumidor sobre Quarkus HTTP |
Ambos módulos demuestran el comportamiento afectado y el corregido.
Una ruta source (consumidor) HTTP de Knative recibe un CloudEvent y luego falla mientras lo procesa — representando
cualquier ruta que sufre un error interno (una consulta fallida a una fuente de datos, un timeout de un servicio posterior, un bug). La ruta lanza una
IllegalStateException cuyo mensaje lleva detalle interno simulado: un nombre de host interno falso
(internal-db.prod.svc.cluster.local), una URL JDBC falsa y un token marcador INTERNAL-DETAIL-MARKER-7F3A2B. El atacante
es simplemente un llamador remoto: envía por POST un CloudEvent bien formado al consumidor y lee la respuesta que el consumidor
devuelve.
at com.example... / del framework.muteException (por defecto
true), por lo que se devuelve el estado de error pero ningún detalle de la excepción llega al llamador.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: stack trace leaks; prints >>> PROVEN
docker compose down
# Patched control: rebuild with the fixed version, then run on the host
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-84180-knative-info-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: empty body; prints >>> 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.15.0): stack trace leaks; >>> PROVEN
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: empty body; >>> Not exploited
| Propiedad | Valor |
|---|---|
| Componente | camel-knative (consumidor HTTP de Knative, KnativeHttpConsumer.computeResponseBody) |
| CWE | CWE-209 (Generación de mensaje de error que contiene información sensible) |
| Severidad | MEDIA |
| Vector de ataque | Un llamador remoto provoca un fallo de ruta en el lado del consumidor y lee el detalle de la excepción del cuerpo de la respuesta |
| Impacto | Divulgación de información: la clase/mensaje/traza de pila de la excepción (nombres de host internos, nombres de paquetes, forma de la ruta, cadenas de conexión embebidas) llegan a un remitente externo |
| 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-24428 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-84180.html
KnativeHttpConsumer.computeResponseBody ahora comprueba una nueva
opción muteException (consumidor, por defecto true). Cuando está silenciada, un intercambio fallido produce un cuerpo de respuesta vacío
(new byte[0]) en lugar de la traza de pila — el cuerpo vacío es intencional para que se preserve el estado de error (un
cuerpo null haría que el llamador enviara 204 No Content). Establezca muteException=false para restaurar la salida anterior.
Esto alinea camel-knative con los demás consumidores de la familia HTTP (CAMEL-23651).
Añada un manejador onException a la ruta del consumidor que establezca el cuerpo de respuesta explícitamente (por ejemplo, a un cuerpo
vacío o a un mensaje genérico), de modo que el framework nunca escriba la excepción de vuelta al llamador.
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 nombre de host "interno", la URL JDBC y el token marcador en la ruta fallida son fixtures locales ficticios e inertes — no hay ningún secreto real involucrado. No utilice este material contra sistemas que no sean de su propiedad o que no opere.