Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-42779 — Proof-of-concept che dimostra un bypass del filtro di deserializzazione in Apache MINA che porta all'esecuzione remota di codice, con analisi dettagliata della causa principale, PoC di exploit e indicazioni di rimedio. | Kitploit
Strumenti/GitHubGitHub/dinosn/cve-2026-42779
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPaper e RicercaApprendimento e Formazione
GitHubdinosn/cve-2026-42779

CVE-2026-42779

Proof-of-concept che dimostra un bypass del filtro di deserializzazione in Apache MINA che porta all'esecuzione remota di codice, con analisi dettagliata della causa principale, PoC di exploit e indicazioni di rimedio.

Vedi Repository
1123 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-42779 — Bypass del filtro di deserializzazione Apache MINA verso RCE

CVSS 3.1: 9.8 CRITICO AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H CWE: CWE-502 Deserializzazione di dati non attendibili Segnalatore: Venkatraman Kumar, Securin Avviso: Mailing list Apache

Panoramica

Le versioni di Apache MINA dalla 2.1.0 alla 2.1.11 e dalla 2.2.0 alla 2.2.6 contengono un bypass del filtro di deserializzazione in AbstractIoBuffer.resolveClass(). La lista consentita acceptMatchers — progettata per limitare quali classi Java possono essere deserializzate — viene completamente saltata quando ObjectStreamClass.forClass() restituisce null.

Un attaccante con accesso di rete a un endpoint MINA che utilizza ObjectSerializationCodecFactory può creare un payload di protocollo che bypassa il filtro delle classi, consentendo la tramite catene di gadget standard di deserializzazione Java (ad es., Commons Collections).

piena esecuzione remota di codice

Si tratta di una correzione incompleta per CVE-2026-41635. La patch originale è stata applicata al ramo 2.0.x ma non è mai stata portata ai rami 2.1.x o 2.2.x a causa di una svista durante il merge.

Versioni interessate

RamoVulnerabileCorretta
2.1.x2.1.0 – 2.1.112.1.12
2.2.x2.2.0 – 2.2.62.2.7

Causa principale

La vulnerabilità si trova in AbstractIoBuffer.resolveClass(), che gestisce la risoluzione delle classi durante la deserializzazione di oggetti Java.

MINA utilizza un protocollo di serializzazione personalizzato con due tipi di descrittori di classe:

  • Tipo 0 — classi non-Serializable, primitivi e array (formato standard del descrittore di classe Java)
  • Tipo 1 — classi Serializable (formato compatto del nome della classe)

Nel codice vulnerabile, il filtro acceptMatchers viene controllato solo nel ramo di tipo 1 (quando forClass() restituisce un valore non nullo). Il ramo di tipo 0 chiama direttamente Class.forName(), bypassando completamente il filtro:

root@kitploit:~
// AbstractIoBuffer.java — VULNERABILE (2.2.6)
protected Class<?> resolveClass(ObjectStreamClass desc) {
    Class<?> clazz = desc.forClass();

    if (clazz == null) {
        // BUG: Nessun controllo acceptMatchers — filtro completamente bypassato
        return Class.forName(name, false, classLoader);
    } else {
        // Il filtro viene applicato solo qui
        for (ClassNameMatcher matcher : acceptMatchers) { ... }
    }
}

La correzione nella 2.2.7 sposta il controllo del filtro prima del ramo:

root@kitploit:~
// AbstractIoBuffer.java — CORRETTO (2.2.7)
protected Class<?> resolveClass(ObjectStreamClass desc) {
    String className = desc.getName();

    // Filtro applicato PRIMA, indipendentemente dal risultato di forClass()
    if (!acceptMatchers.stream().anyMatch(m -> m.matches(className))) {
        throw new ClassNotFoundException("Class not in accept list " + className);
    }

    Class<?> clazz = desc.forClass();
    // ... la risoluzione sicura prosegue
}

Sfruttamento

Flusso dell'attacco

root@kitploit:~
Attaccante                                    Server MINA vulnerabile
   |                                              |
   |  1. Crea un payload MINA con descrittori      |
   |     di tipo 0 per le classi della catena      |
   |     di gadget                                  |
   |                                              |
   |  2. Invia all'endpoint che utilizza           |
   |     ObjectSerializationCodecFactory -------->|
   |                                              |
   |          3. readClassDescriptor() legge il tipo 0
   |             → delega al super (Java standard) |
   |                                              |
   |          4. resolveClass() vede forClass()==null
   |             → Class.forName() SENZA filtro    |
   |                                              |
   |          5. La catena di gadget viene          |
   |             completamente deserializzata       |
   |             → readObject() attiva la catena    |
   |             → Runtime.exec() viene eseguito    |
   |                                              |
   |                               RCE OTTENUTA    |

Prerequisiti

  1. L'applicazione target utilizza IoBuffer.getObject() o ObjectSerializationCodecFactory
  2. Il target ha accept() configurato (le applicazioni senza filtro erano già sfruttabili tramite CVE-2026-41635)
  3. Una libreria di catene di gadget (Commons Collections, Spring, ecc.) è presente nel classpath

Intuizione chiave

L'attaccante controlla il flusso di byte serializzato. Utilizzando descrittori di classe di tipo 0 (invece del tipo 1) per le classi Serializable della catena di gadget, ogni classe nel grafo di deserializzazione bypassa il filtro acceptMatchers, indipendentemente dalla configurazione della lista consentita dell'applicazione.

Prova di concetto

Tre PoC dimostrano un impatto crescente:

PoCCosa dimostra
FilterBypassPoC.javaBypass del filtro per primitivi, classi non-Serializable, array
CraftedBypassPoC.javaPayload di tipo 0 creati dall'attaccante bypassano il filtro per QUALSIASI classe Serializable
RcePoC.javaRCE completa tramite la catena di gadget CC6 attraverso il bypass del filtro

1. Bypass del filtro (MINA 2.2.6 — Vulnerabile)

Le classi non presenti nella lista consentita vengono deserializzate senza restrizioni:

Bypass del filtro su MINA 2.2.6 vulnerabile

2. Payload creato — Caricamento arbitrario di classi

Un attaccante crea payload di protocollo MINA con descrittori di tipo 0 per caricare qualsiasi classe oltre una lista consentita di soli String:

Bypass del payload creato

3. RCE completa — Esecuzione di comandi

La catena di gadget variante CC6 (HashSet → TiedMapEntry → LazyMap → ChainedTransformer → Runtime.exec()) ottiene l'esecuzione di comandi attraverso il bypass del filtro:

RCE confermata su MINA 2.2.6

4. Bypass del filtro (MINA 2.2.7 — Corretta)

Gli stessi test vengono bloccati sulla versione corretta:

Bypass del filtro bloccato su MINA 2.2.7

5. RCE bloccata (MINA 2.2.7 — Corretta)

La catena di gadget viene respinta dal filtro:

RCE bloccata su MINA 2.2.7

Avvio rapido (Docker)

Il modo più veloce per testare — nessun JDK o Maven richiesto:

root@kitploit:~
# Clona questo repository
git clone https://github.com/dinosn/CVE-2026-42779.git
cd CVE-2026-42779

# Compila ed esegui tutti i PoC
docker build -t cve-2026-42779 .
docker run --rm cve-2026-42779

# Esegui singoli PoC
docker run --rm cve-2026-42779 bypass     # Solo bypass del filtro
docker run --rm cve-2026-42779 crafted    # Bypass del payload creato
docker run --rm cve-2026-42779 rce        # RCE completa

# Accedi a una shell per esplorare
docker run --rm -it cve-2026-42779 shell

L'immagine include il JAR vulnerabile di MINA 2.2.6, Commons Collections 3.2.2 e tutti e tre i PoC pre-compilati. Tutto viene eseguito in modo autonomo all'interno del contenitore.

Riproduzione (dal sorgente)

Se preferisci compilare dal sorgente:

root@kitploit:~
# Clona e compila la versione vulnerabile
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

# Scarica commons-collections (per il PoC 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

# Compila i PoC
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

# Esegui il PoC di bypass del filtro
java -cp .:mina-core/target/mina-core-2.2.6.jar FilterBypassPoC

# Esegui il PoC del payload creato
java -cp .:mina-core/target/mina-core-2.2.6.jar CraftedBypassPoC

# Esegui il PoC 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

Oppure usa il Makefile incluso:

root@kitploit:~
make run-all    # Compila ed esegui tutti e tre i PoC
make run-rce    # Solo il PoC RCE

Requisiti: JDK 11+ e Maven (per la compilazione dal sorgente) oppure Docker (per il contenitore)

Rimedio

Aggiorna ad Apache MINA 2.1.12 o 2.2.7.

Se l'aggiornamento non è immediatamente possibile:

  • Non utilizzare IoBuffer.getObject() o ObjectSerializationCodecFactory con input non attendibili
  • Considera l'uso di un filtro di serializzazione JEP 290 come livello di difesa aggiuntivo

Cronologia

DataEvento
2026-05-01Avviso pubblicato dal PMC di Apache MINA
2026-05-01Rilasciate le versioni corrette 2.1.12 e 2.2.7
2026-05-02Questo PoC sviluppato e testato

Riferimenti

  • Avviso Apache MINA
  • Registro CVE
  • Voce NVD
  • Download Apache MINA

Dichiarazione di esclusione di responsabilità

Questa prova di concetto è fornita esclusivamente per ricerca di sicurezza difensiva, istruzione e test di penetrazione autorizzati. Utilizzala in modo responsabile e solo contro sistemi su cui hai il permesso di testare.

Scarica lo strumento