Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-42779 — Preuve de concept démontrant un contournement du filtre de désérialisation dans Apache MINA menant à une exécution de code à distance, avec une analyse détaillée des causes racines, des PoC d'exploitation et des recommandations de remédiation. | Kitploit
Outils/GitHubGitHub/dinosn/cve-2026-42779
Analyse des VulnérabilitésExploitationExploitation d'Applications WebArticles et RechercheApprentissage et Éducation
GitHubdinosn/cve-2026-42779

CVE-2026-42779

Preuve de concept démontrant un contournement du filtre de désérialisation dans Apache MINA menant à une exécution de code à distance, avec une analyse détaillée des causes racines, des PoC d'exploitation et des recommandations de remédiation.

Voir le dépôt
1128il y a 5 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-42779 — Contournement du filtre de désérialisation Apache MINA menant à une exécution de code à distance

CVSS 3.1 : 9.8 CRITIQUE AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H CWE : CWE-502 Désérialisation de données non fiables Signaleur : Venkatraman Kumar, Securin Avis : Liste de diffusion Apache

Vue d'ensemble

Les versions d'Apache MINA 2.1.0 à 2.1.11 et 2.2.0 à 2.2.6 contiennent un contournement du filtre de désérialisation dans AbstractIoBuffer.resolveClass(). La liste blanche acceptMatchers — destinée à restreindre les classes Java pouvant être désérialisées — est complètement ignorée lorsque ObjectStreamClass.forClass() renvoie null.

Un attaquant disposant d'un accès réseau à un point de terminaison MINA utilisant ObjectSerializationCodecFactory peut concevoir une charge utile de protocole qui contourne le filtre de classes, permettant une exécution de code à distance complète via des chaînes de gadgets de désérialisation Java standard (par exemple, Commons Collections).

Il s'agit d'un correctif incomplet pour CVE-2026-41635. Le correctif d'origine a été appliqué à la branche 2.0.x mais n'a jamais été rétroporté vers 2.1.x ou 2.2.x en raison d'un oubli lors de la fusion.

Versions concernées

BrancheVulnérableCorrigée
2.1.x2.1.0 – 2.1.112.1.12
2.2.x2.2.0 – 2.2.62.2.7

Cause racine

La vulnérabilité se trouve dans AbstractIoBuffer.resolveClass(), qui gère la résolution de classes lors de la désérialisation d'objets Java.

MINA utilise un protocole de sérialisation personnalisé avec deux types de descripteurs de classes :

  • Type 0 — classes non sérialisables, primitives et tableaux (format standard de descripteur de classe Java)
  • Type 1 — classes sérialisables (format de nom de classe compact)

Dans le code vulnérable, le filtre acceptMatchers n'est vérifié que dans la branche de type 1 (lorsque forClass() renvoie une valeur non nulle). La branche de type 0 appelle Class.forName() directement, contournant entièrement le filtre :

// AbstractIoBuffer.java — VULNÉRABLE (2.2.6)
protected Class<?> resolveClass(ObjectStreamClass desc) {
    Class<?> clazz = desc.forClass();

    if (clazz == null) {
        // BOGUE : aucune vérification acceptMatchers — filtre complètement contourné
        return Class.forName(name, false, classLoader);
    } else {
        // Le filtre n'est appliqué qu'ici
        for (ClassNameMatcher matcher : acceptMatchers) { ... }
    }
}

Le correctif dans 2.2.7 déplace la vérification du filtre avant la branche :

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

    // Le filtre est appliqué EN PREMIER, quel que soit le résultat de forClass()
    if (!acceptMatchers.stream().anyMatch(m -> m.matches(className))) {
        throw new ClassNotFoundException("Class not in accept list " + className);
    }

    Class<?> clazz = desc.forClass();
    // ... la résolution sécurisée suit
}

Exploitation

Déroulement de l'attaque

Attaquant                                   Serveur MINA vulnérable
   |                                              |
   |  1. Conçoit une charge utile MINA avec des   |
   |     descripteurs de type 0 pour les classes  |
   |     de la chaîne de gadgets                  |
   |                                              |
   |  2. Envoie au point de terminaison utilisant |
   |     ObjectSerializationCodecFactory -------->|
   |                                              |
   |          3. readClassDescriptor() lit le type 0
   |             → délègue à super (Java standard)|
   |                                              |
   |          4. resolveClass() voit forClass()==null
   |             → Class.forName() SANS filtre    |
   |                                              |
   |          5. La chaîne de gadgets est entièrement
   |             désérialisée                     |
   |             → readObject() déclenche la chaîne
   |             → Runtime.exec() s'exécute       |
   |                                              |
   |                               RCE RÉUSSIE   |

Conditions préalables

  1. L'application cible utilise IoBuffer.getObject() ou ObjectSerializationCodecFactory
  2. La cible a accept() configuré (les applications sans filtre étaient déjà exploitables via CVE-2026-41635)
  3. Une bibliothèque de chaînes de gadgets (Commons Collections, Spring, etc.) est présente dans le classpath

Point clé

L'attaquant contrôle le flux d'octets sérialisé. En utilisant des descripteurs de classes de type 0 (au lieu du type 1) pour les classes sérialisables de la chaîne de gadgets, chaque classe du graphe de désérialisation contourne le filtre acceptMatchers, quelle que soit la configuration de la liste blanche de l'application.

Preuve de concept

Trois PoC démontrent un impact croissant :

PoCCe qu'il prouve
FilterBypassPoC.javaContournement du filtre pour les primitives, les classes non sérialisables, les tableaux
CraftedBypassPoC.javaLes charges utiles de type 0 conçues par l'attaquant contournent le filtre pour TOUTE classe sérialisable
RcePoC.javaRCE complète via la chaîne de gadgets CC6 à travers le contournement du filtre

1. Contournement du filtre (MINA 2.2.6 — Vulnérable)

Les classes absentes de la liste d'acceptation sont désérialisées sans restriction :

Contournement du filtre sur MINA 2.2.6 vulnérable

2. Charge utile conçue — Chargement arbitraire de classes

Un attaquant conçoit des charges utiles de protocole MINA avec des descripteurs de type 0 pour charger n'importe quelle classe au-delà d'une liste d'acceptation limitée à String :

Contournement par charge utile conçue

3. RCE complète — Exécution de commandes

La chaîne de gadgets variante CC6 (HashSet → TiedMapEntry → LazyMap → ChainedTransformer → Runtime.exec()) permet l'exécution de commandes via le contournement du filtre :

RCE confirmée sur MINA 2.2.6

4. Contournement du filtre (MINA 2.2.7 — Corrigé)

Les mêmes tests sont bloqués sur la version corrigée :

Contournement du filtre bloqué sur MINA 2.2.7

5. RCE bloquée (MINA 2.2.7 — Corrigé)

La chaîne de gadgets est rejetée par le filtre :

RCE bloquée sur MINA 2.2.7

Démarrage rapide (Docker)

Le moyen le plus rapide de tester — aucun JDK ni Maven requis :

# Clonez ce dépôt
git clone https://github.com/dinosn/CVE-2026-42779.git
cd CVE-2026-42779

# Compilez et exécutez tous les PoC
docker build -t cve-2026-42779 .
docker run --rm cve-2026-42779
Télécharger l’outil