---
title: "ShowDoc 2.8.14〜3.9.5 のモック機能で mockjs の占位符が eval され、ログイン済みユーザーがコマンドを実行できる（CVE-2026-120203）: 3.9.6 で修正"
url: https://n-t-p.io/worldsecurity/articles/showdoc-mock-mockjs-eval-code-injection-2-8-14-3-9-6-2026-120203
lang: ja
kind: 速報
category: 脆弱性・CVE
author: World Security 編集部
published: 2026年10月31日
updated: 2026年10月31日
severity: 高
cve: CVE-2026-120203
---

# ShowDoc 2.8.14〜3.9.5 のモック機能で mockjs の占位符が eval され、ログイン済みユーザーがコマンドを実行できる（CVE-2026-120203）: 3.9.6 で修正

> **TL;DR:** ShowDoc 2.8.14 以上 3.9.6 未満のモック機能で、テンプレート内の mockjs 占位符が eval で評価され、ログイン済みユーザーが OS コマンドを実行できる（CVE-2026-120203、CVSS v3.1 8.8・v4.0 8.7、CNA の値）。公式 Docker イメージでは root 権限。3.9.6（10/30）で修正済み。NVD の評価は未実施、EPSS は公開直後のため未算出、KEV なし。

**要点**
- ShowDoc 2.8.14 以上 3.9.6 未満：モックのテンプレートに括弧をエスケープして保存した占位符が `eval()` で評価され、OS コマンドを実行できる（CWE-94）
- 必要なのはログイン済みのアカウント。公式の Docker イメージではコマンドが root 権限で動く（NVD の説明）。コマンド実行の再現は当サイトでは未実施
- 修正版は 3.9.6（10/30 リリース）。修正は、モックのサーバーと PHP 側に占位符の引数の許可リスト検査を入れ、モックのサーバーを低権限で動かす内容（コミット差分を確認）
- CVSS は CNA（VulnCheck）の値で v3.1 8.8・v4.0 8.7。NVD の評価は未実施（Received）、EPSS は公開直後のため未算出、KEV なし、悪用の報告なし
- 3.9.6 以上へ更新する。更新までは、アカウント作成の制限やモックのサーバーの非公開化を検討する（本記事の推定を含む）

ドキュメント共有ツール ShowDoc の 2.8.14 から 3.9.5 まで（3.9.6 で修正）で、モック機能のテンプレートに含まれる mockjs の占位符が `eval()` で評価され、ログイン済みのユーザーが OS コマンドを実行できる不具合（CVE-2026-120203、CWE-94）が 10/31 に NVD へ公開されました。CVSS は v3.1 が 8.8、v4.0 が 8.7 の High です（どちらも CNA の値）。NVD の説明では、公式の Docker イメージではコマンドが root 権限で動きます。**修正版 3.9.6 は 10/30 にリリース済みです。**

## 何が起きるか

- NVD の説明によると、`MockController::add` に、括弧をエスケープした形のテンプレートを保存し、続いて `MockController::infoByKey` で呼び出すと、mockjs が `eval()` で評価してシェルコマンドが走ります。
- 当サイトでは、修正コミット（5a2087a）の差分を読み、mockjs の占位符の引数が `eval` に渡る面があるため、モックのサーバー（`mock/index.js`）と PHP 側（`MockController`）の両方に引数の許可リスト検査を入れたことを確認しました。v3.9.5 の `mock/index.js` は、受け取った JSON を検査なしで `Mock.mock` に渡していました。
- 修正では、モックのサーバーを低権限ユーザー（mockmock）で動かすよう Docker 側も変わっています。公開キーの生成も、予測可能な `md5(time().rand())` から `random_bytes(32)` に変わりました。
- 実際の悪用の報告は確認できていません。CISA の KEV には載っていません（2026.10.30 版・1766 件で確認）。公開された概念実証の存在が参照に載っていますが、当サイトでは実行していません。

## 影響を受ける条件

| 項目 | 内容 |
|---|---|
| 対象 | ShowDoc 2.8.14 以上 3.9.6 未満（NVD の記載） |
| 前提 | 認証済みのユーザーで、モック機能を使えること（NVD の説明）。誰でもアカウントを作れる設定かは未確認 |
| 評価 | CVSS v3.1 は 8.8（High、AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H）、v4.0 は 8.7。値は CNA の VulnCheck が付けたもので、NVD 自身の評価ではない。NVD の状態は「Received」（10/31 時点）。GitHub の勧告（GHSA-fm4v-42hr-rpgp）も High で同値、未レビュー |
| 弱点の分類 | CWE-94（コードの生成の不適切な制御） |
| 修正版 | 3.9.6（10/30 17:11 UTC リリース） |

## 対応

1. ShowDoc を 3.9.6 以上に更新します。Docker で運用している場合は、新しいイメージを取得して作り直します。
2. 更新できない間は、アカウントの作成を管理者に限る、モック機能を使うユーザーを絞る、モックのサーバー（既定のポート 7123）を外部に出さない、といった方法が考えられます（本記事の推定で、効果は検証していません）。
3. 更新後は、既存のモックのテンプレートも `infoByKey` などの呼び出し時に検査されます。許可リスト外の書き方のモックは、エラーになる可能性があります（修正コミットの内容に基づく推定）。

## 未確認の点

- 悪用の報告は確認できていません。KEV にも載っていません。
- NVD の評価は未実施（状態は Received）で、CVSS は CNA（VulnCheck）の値です。
- EPSS は FIRST にデータがなく、公開直後のため未算出です。
- 当サイトでは、実際のコマンド実行の再現をしていません。コードの変更内容の確認のみです。
- 2.8.14 より前の版が対象かは確認できていません。モック機能を使うのに必要な権限の範囲も確認していません。
- 3.9.6 のリリースノートに本件の記載があるかは確認できていません（本文は空でした）。
- 日付は、NVD の公開（2026-10-31 18:17 UTC）、GitHub のリリースとコミットの記録に基づきます。


## 出典
- [NVD CVE-2026-120203](https://nvd.nist.gov/vuln/detail/CVE-2026-120203) — NIST NVD
- [GitHub Advisory GHSA-fm4v-42hr-rpgp](https://github.com/advisories/GHSA-fm4v-42hr-rpgp) — GitHub
- [修正コミット 5a2087a](https://github.com/star7th/showdoc/commit/5a2087a3f408f5266f61e9e2fb98845ef4788288) — GitHub
- [ShowDoc v3.9.6 リリース](https://github.com/star7th/showdoc/releases/tag/v3.9.6) — GitHub
- [v3.9.5 の mock/index.js](https://github.com/star7th/showdoc/blob/v3.9.5/mock/index.js#L42) — GitHub
- [VulnCheck の勧告](https://www.vulncheck.com/advisories/showdoc-2.8.14-before-3.9.6-code-injection-via-mock-templates) — VulnCheck
- [FIRST EPSS CVE-2026-120203](https://api.first.org/data/v1/epss?cve=CVE-2026-120203) — FIRST

---
出典: World Security（株式会社NTP） https://n-t-p.io/worldsecurity/articles/showdoc-mock-mockjs-eval-code-injection-2-8-14-3-9-6-2026-120203