脆弱性・CVE速報深刻度: 高

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

目次(4)

CVE-2026-120203

ドキュメント共有ツール 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 のリリースとコミットの記録に基づきます。

この記事について

出典

この記事を共有