PaperCut CVE-2026-81578 および CVE-2026-82078 のセキュリティ調査ツール
PaperCut NG/MF の脆弱性評価および許可された悪用テストのためのプロフェッショナルなセキュリティ調査ツール
╔══════════════════════════════════════════════════════════════════╗
║ PAPERCUT SECURITY TOOL – POWER MODE ║
║ CVE-2026-81578 · CVE-2026-82078 · v3.1.0 ║
║ ⚡ powered by yora 1928 ⚡ ║
╚══════════════════════════════════════════════════════════════════╝
このツールは、PaperCut NG/MF サーバーに対する安全で非破壊的な脆弱性評価と、(明示的な許可を得た上での)任意のリモート悪用テストを提供します。
セキュリティ研究者、ペネトレーションテスター、ブルーチームの防御担当者が、PaperCut の2つの重大な脆弱性の存在を検証するために設計されています。
| CVE ID | 説明 | CVSS | CWE |
|---|---|---|---|
| CVE-2026-81578 | Apache Tapestry の「complex direct」リクエストによる認証バイパス | 8.8 (HIGH) | CWE-306 |
| CVE-2026-82078 | データベース接続ユーティリティにおける安全でない動的クラスロード | 9.4 (CRITICAL) | CWE-470 |
主な参考情報:
このツールは指標ベースのリモート検出を実行します。--force を明示的な書面による許可を得て使用しない限り、実際の PaperCut サーバーに対する悪用可能性を証明するものではありません。
| ステータス | 意味 |
|---|---|
SAFE | バージョンが修正済み、または指標が検出されない |
AFFECTED_VERSION | バージョンが影響を受ける範囲に一致(ベンダー勧告) |
TAPESTRY_DETECTED | Apache Tapestry フレームワークが検出された(PaperCut が使用) |
ADMIN_ENDPOINT_ACCESSIBLE | 管理エンドポイントが認証なしでアクセス可能 |
DB_CONFIG_ACCESSIBLE | データベース設定エンドポイントがアクセス可能 |
POTENTIALLY_VULNERABLE | 指標の組み合わせが潜在的な脆弱性を示唆するが、悪用可能性は検証されていない |
NOT_DETECTABLE | 評価するための情報が不十分 |
信頼度スコアは証拠の重みに基づいて計算され、過大評価を避けるためリモート検出では最大85%に制限されています。
--force フラグ使用時(認可が必要)--input、--threads)--prefilter)| 機能 | 実ターゲットに対して | ローカルラボに対して |
|---|---|---|
| フィンガープリンティング | ✅ 安全(読み取り専用) | ✅ 安全 |
| CVE 評価 | ✅ 安全(指標ベース) | ✅ 安全 |
| 概念デモンストレーション | ❌ ブロック(localhost のみ) | ✅ 許可 |
| リモート悪用テスト | ⚠️ --force と認可が必要 | ✅ 許可 |
| 設定変更 | ❌ 決して行わない | ✅ ラボ内のみ |
| RCE / ペイロード実行 | ❌ 決して行わない | ❌ 実装されていない(シミュレーションのみ) |
# リポジトリをクローン
git clone https://github.com/yourusername/papercut-cve-tool.git
cd papercut-cve-tool
# 仮想環境を作成
python3 -m venv .venv
source .venv/bin/activate # Linux/macOS
# または
.venv\Scripts\activate # Windows
# 依存関係をインストール
pip install -r requirements.txt
# インストールを検証
python papercut.py self-test
# ヘルプを表示
python papercut.py --help
# ターゲットに対してフルスキャンを実行
python papercut.py scan http://127.0.0.1:8080
# フィンガープリントのみ
python papercut.py fingerprint http://127.0.0.1:8080
# 特定の CVE をチェック
python papercut.py check http://127.0.0.1:8080 --cve 81578
# 教育用ローカルラボを起動
python papercut.py lab
# 概念デモンストレーションを実行(ラボのみ)
python papercut.py exploit --cve 81578
# リモート悪用テスト(認可が必要)
python papercut.py exploit --cve 81578 --target https://target.com:9192 --force
# 事前フィルタとスレッドを使用したバッチスキャン
python papercut.py scan --input targets.txt --prefilter --threads 10 --timeout 5
# IOC のログファイルを分析
python papercut.py detect server.log
# HTML レポートを生成
python papercut.py report result.json --format html
# 対話モード
python papercut.py interactive
| コマンド | 説明 |
|---|---|
scan TARGET | フィンガープリンティング + CVE チェックによるフル脆弱性スキャン |
fingerprint TARGET | PaperCut のバージョン、Tapestry フレームワーク、公開エンドポイントを検出 |
check TARGET --cve {81578,82078} | 特定の CVE 指標チェックを実行 |
lab [--port PORT] [--test] | 教育用ローカルラボを起動(オプションでセルフテスト付き) |
exploit --cve {81578,82078} [--target] [--force] | 概念デモンストレーションまたはリモート悪用テストを実行(認可されている場合) |
detect LOGFILE [--output] | 不審な指標のログファイルを分析 |
report INPUT [--format {html,json,text}] [--output] | JSON 結果からプロフェッショナルレポートを生成 |
interactive | 対話メニューを起動 |
self-test | 内部診断を実行 |
| オプション | 説明 |
|---|---|
--timeout N | リクエストタイムアウト(秒)(デフォルト: 10) |
--verbose | 詳細なデバッグ出力を表示 |
--quiet | 必須でない出力を抑制 |
--output FILE | 結果をファイルに保存 |
--format {text,json,html} | スキャン/レポートの出力形式 |
| オプション | 説明 |
|---|---|
--input FILE | バッチスキャン用のターゲットファイル(1行に1つ) |
--output-dir DIR | バッチ結果を保存するディレクトリ |
--threads N | 同時スレッド数(バッチモード) |
--prefilter | スキャン前に開いているポートを確認(バッチのみ) |
ラボは、教育目的で両方の脆弱性の概念を再現する最小限の Python HTTP サーバーです。
Error.page、Exception.page)を表示しながら管理コンポーネント(ConfigEditor、UserList)を呼び出す# ラボを起動
python papercut.py lab
# 自動ラボテストを実行
python papercut.py lab --test
ラボエンドポイント:
http://127.0.0.1:8080/lab/cve-81578?component=ConfigEditor&display=Errorhttp://127.0.0.1:8080/lab/cve-82078?driver=org.attacker.RCEPayloadこのツールは、脆弱性のメカニズムから導出された不審な指標(IOC)についてログファイルを分析します:
| 指標 | 重大度 | 説明 |
|---|---|---|
tapestry_complex_direct | CRITICAL | Tapestry .page.*.zone リクエストパターン |
admin_component_access | HIGH | ConfigEditor / UserList ページアクセス |
public_page_tapestry | HIGH | Tapestry を使用した Error / Exception ページ |
tapestry_post_request | CRITICAL | Tapestry .page への POST リクエスト |
db_driver_config | CRITICAL | データベースドライバー設定の変更 |
class_loading_error | HIGH | ClassNotFoundException / NoClassDefFoundError |
dynamic_class_loading | CRITICAL | 外部ソースからのクラスロード |
python papercut.py detect /var/log/papercut/server.log --output detection.json
HTML、JSON、またはプレーンテキストでプロフェッショナルレポートを生成します。
# まず、スキャン結果を JSON として保存
python papercut.py scan http://127.0.0.1:8080 --format json --output result.json
# HTML レポートを生成
python papercut.py report result.json --format html --output report.html
# JSON レポートを生成
python papercut.py report result.json --format json --output report.json
# テキストレポートを生成
python papercut.py report result.json --format text --output report.txt
HTML レポートに含まれるもの:
PaperCut セキュリティ速報(2026年8月27日)に基づく:
| バージョン範囲 | ステータス |
|---|---|
| 24.x < 24.1.10 | ❌ 影響あり |
| 24.1.10+ | ✅ 修正済み |
| 25.x < 25.0.13 | ❌ 影響あり |
| 25.0.13+ | ✅ 修正済み |
| 26.x < 26.0.5 | ❌ 影響あり |
| 26.0.5+ | ✅ 修正済み |
| 23.x 以下 | ⚠️ サポート終了 – アップグレード推奨 |
PaperCut は Apache Tapestry フレームワークを使用しています。Tapestry の「complex direct」リクエスト形式では、以下を指定できます:
Error.page)ConfigEditor.page)アクセス検証は表示されたページのみをチェックし、実行されるコンポーネントはチェックしません。攻撃者は公開ページを表示しながら管理コンポーネントを呼び出し、認証を完全にバイパスできます。
攻撃ベクトル: POST /papercut/ConfigEditor.page?... を .zone リクエストで使用し、Error.page 経由で表示
PaperCut は、設定可能なドライバー名(例: database.driver.class)から JDBC データベースドライバークラスをインスタンス化します。アプリケーションはこれらのクラス名を許可リストに対して検証しません。(認証バイパスやその他の手段で)システム設定を操作できる攻撃者は、任意の Java クラス名を指定でき、PaperCut サービスプロセスによってロードおよびインスタンス化されます。
影響: PaperCut サービスのセキュリティコンテキストでのリモートコード実行(RCE)
貢献を歓迎します!ガイドラインについては CONTRIBUTING.md をお読みください。
MIT ライセンス – 詳細は LICENSE を参照してください。
このツールは許可されたセキュリティテストおよび教育目的のみを対象としています。明示的な書面による許可なしにシステムに対して使用しないでください。概念デモンストレーションは localhost にロックされており、リモートホストに対しては機能しません。
このツールを使用することで、以下に同意したものとみなされます:
バージョン: 3.1.0
最終更新: 2026-08-29
メンテナー: yora 1928
「セキュリティは製品ではなく、プロセスである。」 – ブルース・シュナイアー
---
## 🚀 GitHub での次のステップ
1. **開く** `https://github.com/yora1928/PaperCut-CVE-2026-81578-82078`
2. **クリック** `README.md`
3. **クリック** 鉛筆アイコン(編集)
4. **削除** 古い内容をすべて
5. **貼り付け** 上記のテキスト全体
6. **クリック** `Commit changes...`
7. **記入** コミットメッセージ: `Update README.md with final version`
8. **クリック** `Commit changes`
---
## 🎉 **完了!プロジェクトはプロフェッショナルになり、ポートフォリオに最適です!** ⚡