FlawOpen

flawopen.com/Incidents/papercut-patch-bypass-scan2fax-chain-october-2026

● PaperCut NG/MF · CVE-2026-82077 · 2026-10-09 · CVSS 7.3 · 高
セキュリティ研究 · FlawOpen

PaperCutのパッチ回避:Scan2Faxから未認証RCEに至る連鎖

10月9日、watchTowrはPaperCutの中間リリースを対象とする認証回避とScan2Faxの新たな連鎖を公開しました。パッチ回避によって、認証後のコマンド実行の欠陥へ未認証で到達する経路が再び開くことを示しています。PaperCutの最終修正版は26.0.5/25.0.13です。[1], [2]

💡 わかりやすい解説 (ELI5)

各部屋で訪問者証を確認する建物を想像してください。しかしロビーでは、経路上の最初の部屋だけを確認します。開いている部屋を通る近道があると、制限された机に着いても再確認されないことがあります。PaperCutの修正履歴では複数の経路を塞ぐ必要がありました。最終修正はフォーム自体とScan-to-Faxが使うファイルパスを保護します。[1]

主要な概念と専門用語

パッチ回避
最初に報告された経路だけを塞いだ後、別経路から同じ保護対象の操作へ到達できる状態です。元の修正が完全に適用されていなかった証拠ではなく、境界に新たな欠陥があることを示します。[1]
認証前の連鎖
一つの欠陥が通常のログイン確認を回避し、別の欠陥がコマンド実行などの影響につながる連続した仕組みです。それぞれの仕組みを正確に分けて説明する必要があります。[1]
CVE-2026-82077
PaperCutのScan-to-Faxの欠陥はパストラバーサルで、認証済み管理者がホスト上でコマンドを実行できる可能性があります。PaperCutは26.0.5と25.0.13で修正し、watchTowrは中間版の別の認可回避と連鎖できることを示しました。[2], [3], [4], [1]
WT-2026-0143
watchTowrが10月9日に公開した認証パッチ回避の識別子です。PaperCutの公開告知では独立したCVEは割り当てられていません。緊急ビルド26.0.4-PO 76530で修正されました。[1]
悪用状況
PaperCutは8月に以前のPaperCut欠陥が実環境で悪用されたと報告しました。9月の告知では、CVE-2026-82077を含む同告知の問題について悪用の証拠はないとしています。10月9日の研究は中間版での連鎖を実証したもので、新しい連鎖が顧客に対して使われた証拠ではありません。[5], [2], [1]

フレームワーク対応

  • このガイドで説明する弱点の CWE 参照: CWE-22 CWE-78

リリース状態:PaperCut の2つの攻撃チェーンを区別する

PaperCut のバージョン情報源で確認できる内容防御側の対応
26.0.3watchTowr は、以前に実環境で悪用された CVE-2026-81578 + CVE-2026-82078 のチェーンをこのバージョンに関連付けています。PaperCut の緊急アドバイザリに従ってください。これは以前の悪用チェーンであり、10月の調査とは別です。
26.0.4watchTowr はこのバージョンの分析中に別のパッチ回避を発見しました。中間パッチを最終状態と見なさず、ベンダーが修正済みとするバージョンに従ってください。
26.0.4-PO build 76508watchTowr はこのバージョンで WT-2026-0143 + CVE-2026-82077 を再現しました。これは研究上の実証であり、顧客への悪用を示す証拠ではありません。ベンダー修正版へ更新してください。以前の緊急修正が含まれることだけで、このビルドが安全だと判断しないでください。
26.0.4-PO build 76530watchTowr によると、この版で WT-2026-0143 は修正されました。CVE-2026-82077 は後続版で修正されました。CVE-2026-82077 の最終修正版まで更新してください。この中間的なバイパス修正だけでは不十分です。
26.0.5 / 25.0.13 以降PaperCut はこれらを CVE-2026-82077 の修正版として示しています。現在サポートされている版へ更新し、導入済みの系列とビルドを確認してください。
メンテナンスリリース 24.1.10PaperCut の8月アドバイザリでは、24.1.10 は Emergency Patch 1~3 を置き換えるメンテナンスリリースとして記載されています。これは8月アドバイザリの修正を確認するものであり、CVE-2026-82077 の状態を示すものではありません。
24.x 系列:CVE-2026-82077PaperCut の9月アドバイザリでは、修正版として 26.0.5 と 25.0.13(25.x 系列)が挙げられていますが、24.x 系列は明記されていません。24.x におけるこの CVE の状態を推測せず、系列に関する PaperCut の最新案内を確認してください。

インシデントのタイムライン

2026-08-27

PaperCutはPaperCut NG/MFの悪用について緊急告知を公開しました。watchTowrは後に以前の連鎖をCVE-2026-81578とCVE-2026-82078に結び付けました。これは新しいWT-2026-0143とCVE-2026-82077の連鎖とは別です。[5], [1]

2026-08-28

PaperCutは26.0.4と緊急ビルド26.0.4-PO 76508を公開しました。watchTowrはこれらのパッチを分析する過程で、複数の回避方法を見つけたと報告しています。[1], [5]

2026-08-31〜2026-09-10

watchTowrはWT-2026-0143とCVE-2026-82077をPaperCutに報告しました。PaperCutは9月1日に26.0.4-PO 76530でWT-2026-0143を、9月10日に26.0.5/25.0.13でCVE-2026-82077を修正しました。[1], [2]

2026-10-09

watchTowrは中間版に対する連鎖の技術説明を公開しました。この公開は、新しい連鎖が顧客に対して使われた証拠ではありません。[1], [2]

ステップ・バイ・ステップの攻撃フロー

ステップ 1

ルート単位の権限確認がネストした宛先を見落とす

watchTowrによると、PaperCutの旧式Tapestryルーティングでは、リクエストにルートページと後続ページやフォームを指定できます。従来の認可確認は、宛先フォーム自身の権限境界を常に適用していませんでした。[1]

ステップ 2

パッチ回避により保護されたフォームへ到達する

26.0.4-PO 76508の連鎖ではWT-2026-0143を使い、宛先フォームの確認を呼び出さないページ経由で設定機能へ到達しました。これは認可境界の説明であり、経路やリクエストの再現ではありません。[1]

ステップ 3

Scan-to-Faxには別のパスからコマンドへの欠陥がある

PaperCutはCVE-2026-82077をScan-to-Fax設定のパストラバーサルと分類し、認証済み管理者がホストでコマンドを実行できる可能性を示しています。watchTowrは中間版の認可回避が不足していた認証コンテキストを与え得ると説明しました。[1], [2]

ステップ 4

最終リリースで公開された連鎖を修正

PaperCutは緊急ビルド76530でWT-2026-0143を、26.0.5/25.0.13でCVE-2026-82077を修正しました。10月の公開は、最終版が今も脆弱であることや、新しい連鎖が実環境で悪用されたことを意味しません。[1], [2]

ソースコード比較:脆弱 vs 堅牢化

この一般的なJava例は、特権操作自体の認可と、サーバーが管理するコネクタ一覧からの実行ファイル選択および正規パス検証という二つの制御を示します。PaperCutのソースコードやベンダーのパッチではありません。本番コードでは引数検証とプロセス権限の制限も必要で、修正版PaperCutを使用してください。パス検証だけではページルーティングの認可回避は修正できません。

脆弱な実装
Path executable = faxDirectory.resolve(clientConnectorName).normalize();
// ルート単位の検査は、この操作自体の認可の代わりにはならない。
new ProcessBuilder(executable.toString(), faxArguments).start();
堅牢化されたセキュアパッチ
if (!principal.canAdministerFax()) {
    throw new SecurityException("Fax administration is required");
}
Path root = faxDirectory.toRealPath();
Path executable = approvedConnectors.get(connectorId); // Server-owned allowlist.
if (executable == null) {
    throw new IllegalArgumentException("Unknown connector");
}
Path resolved = executable.toRealPath();
if (!resolved.startsWith(root) || !Files.isExecutable(resolved)) {
    throw new SecurityException("Connector is outside the approved directory");
}
new ProcessBuilder(resolved.toString(), validatedArguments).start();

エンジニアリング&システム堅牢化チェックリスト

参考資料