ShowDocのファイルアップロードRCE(CVE-2025-0520)が5年越しで実攻撃に
目次
VulnCheckのCanaries(ハニーポット型の実悪用検知サービス)が2026年4月11日、ShowDocに対するCVE-2025-0520の初の実悪用を確認した。
ファイルアップロードの拡張子検証欠如を突いてウェブシェル(任意のOSコマンドをHTTP経由で実行できる悪意あるスクリプト)を設置するこの攻撃は、脆弱性の発見から約5年後に初の実攻撃として記録された。
ShowDocとは
ShowDocは中国発のオープンソースドキュメント管理・共有ツールで、API仕様書やプロジェクト文書の作成・公開に使われる。
GitHubリポジトリのスター数は2万超、中国のIT企業や開発チームを中心に採用されている。
実装言語はPHPで、Composerでもインストールできる。
現時点でインターネットに公開されているインスタンスは2,000件以上と推定され、その大半は中国に位置している。
脆弱性の技術的詳細
| 項目 | 値 |
|---|---|
| CVE識別子 | CVE-2025-0520(別称 CNVD-2020-26585) |
| CVSSv4.0スコア | 9.4(Critical) |
| CVSS v4.0ベクター | CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/SC:H/SI:H/SA:L |
| CWE | CWE-434(Unrestricted Upload of File with Dangerous Type) |
| 影響バージョン | ShowDoc 2.8.7未満 |
脆弱性の根源は PageController クラスの uploadImg メソッドにある。
このエンドポイントはMarkdownエディタ上の画像アップロード機能として公開されているが、ファイル拡張子の検証が不適切で、PHPファイルを含む任意の種類のファイルをアップロードできてしまう。
攻撃の流れ
flowchart TD
A[攻撃者] -->|POSTリクエスト| B["/index.php?s=/home/page/uploadImg"]
B -->|拡張子検証をバイパス| C["filename='test.<>php'"]
C -->|サーバーが受理| D[PHPファイルをウェブルートに保存]
D -->|GETリクエスト| E[任意のPHPコードを実行]
E --> F[ウェブシェル確立]
F --> G[サーバー完全掌握]
攻撃者は test.<>php のようにファイル名に角括弧を混入させることでサーバー側の拡張子チェックをすり抜ける。
アップロードされたPHPファイルはウェブアクセス可能なディレクトリに配置されるため、URLで直接呼び出すだけでコードが実行される。
PoC リクエスト例
VulHub(脆弱環境の教育用リポジトリ)が公開しているCNVD-2020-26585のデモ環境では、以下のようなリクエストで攻撃が成立する。
POST /index.php?s=/home/page/uploadImg HTTP/1.1
Host: target:8080
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="editormd-image-file"; filename="test.<>php"
Content-Type: text/plain
<?=phpinfo();?>
------Boundary--
実際の攻撃ではウェブシェルが送り込まれ、サーバーの完全制御を可能にする。
CVSSの「PR:L」について
NVDが付与したCVSS v4.0では PR:L(Privileges Required: Low)と評価されているが、VulnCheckの報告やGitHubアドバイザリは「unauthenticated」と記述している。
uploadImg エンドポイントはShowDocのバージョンや設定によって認証なしでアクセスできる状態になることがあり、実際の攻撃もハニーポットに対して認証なしで行われたと見られる。
この点はCVSS評価の解釈が分かれるところだが、悪用難易度として「ほぼ認証不要」に近い状態と理解しておくのが現実的だ。
発見から実悪用までの経緯
| 日付 | 出来事 |
|---|---|
| 2020年5月 | CNVD(中国国家情報セキュリティ脆弱性データベース)が CNVD-2020-26585 として登録 |
| 2020年10月 | ShowDoc 2.8.7 でパッチ配布 |
| 2025年4月29日 | CVE-2025-0520 として正式発番(CNVDからCVEへの遅延割り当て) |
| 2026年4月11日 | VulnCheck CanariesがUSベースのハニーポットで初の実悪用を確認 |
| 2026年4月14日 | The Hacker Newsが報告 |
脆弱性の発見からCVE番号が割り当てられるまで約5年のラグがある。
これはCNVD(中国の脆弱性データベース)とCVEの間の情報連携が依然として不完全であることを示している。
CNVDとCVEの非対称性については SentinelOne のLABScon分析が詳しく取り上げている。
現在の露出状況
ShowDoc 3.8.1 が現行の最新版だが、2,000以上のインターネット公開インスタンスのうち相当数が未パッチの状態で稼働している。
Canariesで観測された攻撃は米国拠点のハニーポットに対するものだったが、ShowDocの主要ユーザー層は中国圏に集中しており、実際の攻撃対象も同様の偏りがあると考えられる。
VulnCheck KEV(Known Exploited Vulnerabilities)には既に追加済みで、Canaries由来の実悪用証拠がエントリに紐付けられている。
2025年10月に VulnCheck がCanary Intelligenceを KEV エントリに統合したことで、ハニーポットへの実際の攻撃観測がVulnCheck KEVの追加根拠になっている。
対処
パッチが提供されたのは2020年10月と5年以上前であるため、ShowDocを運用している場合はバージョン 2.8.7 以降(最新は 3.8.1)へのアップグレードが唯一の根本的な対策となる。
インターネット向けに ShowDoc を公開している場合は追加の対策も必要になる。
| 対策 | 内容 |
|---|---|
| アップロードエンドポイントへのアクセス制限 | /index.php?s=/home/page/uploadImg への外部からのPOSTを WAFまたはリバースプロキシでブロック |
| アップロードディレクトリのPHP実行無効化 | Nginxや Apache の設定で php_flag engine off 相当の設定を追加 |
| ウェブシェルの痕跡確認 | アップロードディレクトリに .php 拡張子のファイルが存在しないか点検 |
Magento の PolyShell(MagentoのREST APIで未認証RCEを可能にするPolyShell脆弱性)でも同様に、ファイルアップロードの拡張子検証をポリグロットファイルで回避する手法が使われていた。
ファイルアップロード機能は実装が簡単なぶんバリデーションが甘くなりやすく、定期的に攻撃対象になるエントリーポイントだ。
CVSS v4.0 の読み方
今回の CVE は CVSS v4.0 で評価されており、従来のv3.1とは評価軸が変わっている。主要なメトリクスの意味を整理した。
| メトリクス | 値 | 意味 |
|---|---|---|
| AV(攻撃ベクター) | N(ネットワーク) | インターネット経由でリモート攻撃可能 |
| AC(攻撃複雑性) | L(低) | 特別な条件なしに再現可能 |
| AT(攻撃要件) | N(なし) | ターゲット環境に特別な前提条件不要 |
| PR(必要権限) | L(低) | 高度な権限不要 |
| UI(ユーザー操作) | N(なし) | 被害者の操作を必要としない |
| VC/VI(機密性/完全性への影響) | H/H | サーバー上の全データを読み書き可能 |
| SC/SI(後続システムへの影響) | H/H | 侵害後の横展開(内部ネットワークへの移動)リスクが高い |
後続システムへの影響(SC/SI)が高評価になっているのは、ウェブシェル設置後に内部ネットワークへ横展開する可能性が考慮されているためだ。
関連記事
- FlowiseのCustomMCPノードにCVSS 10.0のRCE脆弱性、12,000超のインスタンスが攻撃にさらされている - 同じくVulnCheckが実悪用を確認したオープンソースツールのRCE。パッチ済みだが大量のインスタンスが露出し続けるパターン
- CISAがアクティブ悪用中の脆弱性4件をKEVカタログに追加 - 2008年の脆弱性が2026年にKEV入りした事例。古いCVEが何年も経って実攻撃に使われる現象はShowDocに限った話ではない