Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-42779 — Prova de conceito demonstrando uma bypass do filtro de desserialização no Apache MINA que leva à execução remota de código, com análise detalhada da causa raiz, PoCs de exploração e orientações de remediação. | Kitploit
Ferramentas/GitHubGitHub/dinosn/cve-2026-42779
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebPapers e PesquisaAprendizado e Educação
GitHubdinosn/cve-2026-42779

CVE-2026-42779

Prova de conceito demonstrando uma bypass do filtro de desserialização no Apache MINA que leva à execução remota de código, com análise detalhada da causa raiz, PoCs de exploração e orientações de remediação.

Ver Repositório
1128há 5 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

CVE-2026-42779 — Bypass do Filtro de Desserialização do Apache MINA para RCE

CVSS 3.1: 9.8 CRÍTICO AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H CWE: CWE-502 Desserialização de Dados Não Confiáveis Reporter: Venkatraman Kumar, Securin Advisory: Lista de Discussão do Apache

Visão Geral

As versões 2.1.0 a 2.1.11 e 2.2.0 a 2.2.6 do Apache MINA contêm um bypass do filtro de desserialização em AbstractIoBuffer.resolveClass(). A lista de permissões acceptMatchers — criada para restringir quais classes Java podem ser desserializadas — é completamente ignorada quando ObjectStreamClass.forClass() retorna null.

Um atacante com acesso de rede a um endpoint MINA que utiliza ObjectSerializationCodecFactory pode criar um payload de protocolo que contorna o filtro de classes, permitindo Execução Remota de Código completa por meio de cadeias de gadgets de desserialização Java padrão (por exemplo, Commons Collections).

Esta é uma correção incompleta para o CVE-2026-41635. O patch original foi aplicado ao branch 2.0.x, mas nunca foi portado para 2.1.x ou 2.2.x devido a um descuido no merge.

Versões Afetadas

BranchVulnerávelCorrigido
2.1.x2.1.0 – 2.1.112.1.12
2.2.x2.2.0 – 2.2.62.2.7

Causa Raiz

A vulnerabilidade está em AbstractIoBuffer.resolveClass(), que lida com a resolução de classes durante a desserialização de objetos Java.

O MINA usa um protocolo de serialização personalizado com dois tipos de descritores de classe:

  • Tipo 0 — classes não-Serializable, primitivos e arrays (formato padrão de descritor de classe Java)
  • Tipo 1 — classes Serializable (formato compacto de nome de classe)

No código vulnerável, o filtro acceptMatchers é verificado apenas no branch do tipo 1 (quando forClass() retorna não-null). O branch do tipo 0 chama Class.forName() diretamente, contornando o filtro por completo:

// AbstractIoBuffer.java — VULNERÁVEL (2.2.6)
protected Class<?> resolveClass(ObjectStreamClass desc) {
    Class<?> clazz = desc.forClass();

    if (clazz == null) {
        // BUG: Nenhuma verificação de acceptMatchers — filtro completamente ignorado
        return Class.forName(name, false, classLoader);
    } else {
        // Filtro aplicado apenas aqui
        for (ClassNameMatcher matcher : acceptMatchers) { ... }
    }
}

A correção no 2.2.7 move a verificação do filtro antes do branch:

// AbstractIoBuffer.java — CORRIGIDO (2.2.7)
protected Class<?> resolveClass(ObjectStreamClass desc) {
    String className = desc.getName();

    // Filtro aplicado PRIMEIRO, independentemente do resultado de forClass()
    if (!acceptMatchers.stream().anyMatch(m -> m.matches(className))) {
        throw new ClassNotFoundException("Class not in accept list " + className);
    }

    Class<?> clazz = desc.forClass();
    // ... resolução segura em seguida
}

Exploração

Fluxo do Ataque

Atacante                                    Servidor MINA Vulnerável
   |                                              |
   |  1. Cria payload MINA com descritores        |
   |     tipo-0 para classes da cadeia de gadgets |
   |                                              |
   |  2. Envia para endpoint que usa              |
   |     ObjectSerializationCodecFactory -------->|
   |                                              |
   |          3. readClassDescriptor() lê tipo-0  |
   |             → delega para super (Java padrão)|
   |                                              |
   |          4. resolveClass() vê forClass()==null
   |             → Class.forName() SEM filtro     |
   |                                              |
   |          5. Cadeia de gadgets totalmente      |
   |             desserializada                   |
   |             → readObject() dispara a cadeia  |
   |             → Runtime.exec() é executado     |
   |                                              |
   |                               RCE ALCANÇADO  |

Pré-condições

  1. A aplicação alvo usa IoBuffer.getObject() ou ObjectSerializationCodecFactory
  2. O alvo tem accept() configurado (aplicações sem filtro já eram exploráveis via CVE-2026-41635)
  3. Uma biblioteca de cadeia de gadgets (Commons Collections, Spring, etc.) está no classpath

Insight Principal

O atacante controla o fluxo de bytes serializado. Ao usar descritores de classe tipo-0 (em vez de tipo-1) para classes Serializable da cadeia de gadgets, toda classe no grafo de desserialização contorna o filtro acceptMatchers, independentemente da configuração da lista de permissões da aplicação.

Prova de Conceito

Três PoCs demonstram impacto crescente:

PoCO que prova
FilterBypassPoC.javaBypass do filtro para primitivos, classes não-Serializable, arrays
CraftedBypassPoC.javaPayloads tipo-0 criados pelo atacante contornam o filtro para QUALQUER classe Serializable
RcePoC.javaRCE completo via cadeia de gadgets CC6 através do bypass do filtro

1. Bypass do Filtro (MINA 2.2.6 — Vulnerável)

Classes fora da lista de aceitação são desserializadas sem restrição:

Bypass do filtro no MINA 2.2.6 vulnerável

2. Payload Criado — Carregamento Arbitrário de Classes

Um atacante cria payloads de protocolo MINA com descritores tipo-0 para carregar qualquer classe além de uma lista de aceitação apenas com String:

Bypass com payload criado

3. RCE Completo — Execução de Comandos

A cadeia de gadgets variante CC6 (HashSet → TiedMapEntry → LazyMap → ChainedTransformer → Runtime.exec()) alcança execução de comandos através do bypass do filtro:

RCE confirmado no MINA 2.2.6

4. Bypass do Filtro (MINA 2.2.7 — Corrigido)

Os mesmos testes são bloqueados na versão corrigida:

Bypass do filtro bloqueado no MINA 2.2.7

5. RCE Bloqueado (MINA 2.2.7 — Corrigido)

A cadeia de gadgets é rejeitada pelo filtro:

RCE bloqueado no MINA 2.2.7

Início Rápido (Docker)

A forma mais rápida de testar — sem necessidade de JDK ou Maven:

# Clone este repositório
git clone https://github.com/dinosn/CVE-2026-42779.git
cd CVE-2026-42779

# Compile e execute todos os PoCs
docker build -t cve-2026-42779 .
docker run --rm cve-2026-42779

# Execute PoCs individuais
docker run --rm cve-2026-42779 bypass     # Apenas bypass do filtro
docker run --rm cve-2026-42779 crafted    # Bypass com payload criado
docker run --rm cve-2026-42779 rce        # RCE completo

# Entre em um shell para explorar
docker run --rm -it cve-2026-42779 shell

A imagem inclui o JAR vulnerável do MINA 2.2.6, Commons Collections 3.2.2 e os três PoCs pré-compilados. Tudo é executado de forma autônoma dentro do contêiner.

Reprodução (a partir do código-fonte)

Se preferir compilar a partir do código-fonte:

Baixar ferramenta