Storybook 脆弱性 CVE-2026-114125(GHSA-f2ph-cmg5-wxc8、深刻度 Critical)は、影響版の Storybook 開発サーバーを動かしている間に開発者が悪性サイトを開くと、そのサイトがプロジェクトのファイルを無断で変更しうる問題です。狙われるのは本番に公開したビルドではなく、手元で動かす storybook dev です。修正版は 2026-10-12 に npm へ出ており、勧告は 2026-10-21 に公開されました。本記事では勧告の影響範囲・修正版と、読者の環境で版を確かめるコマンド(陽性・陰性の対照つきで実行済み)をまとめます。

WHERE IT HITS狙われる場所

本番ではなく手元の開発サーバーが狙われる

  1. 悪性サイト

    別のタブで開いたページ

  2. ブラウザ

    localhost への接続を仲立ちする

  3. 開発サーバー

    storybook dev(影響版)

  4. プロジェクトのファイル

    無断で変更されうる

出典: GHSA-f2ph-cmg5-wxc8(2026-10-21公開)。ビルド済みの Storybook は対象外

30秒でわかる Storybook 脆弱性 CVE-2026-114125(2026-10-22時点)

  • ・何が起きる:影響版の開発サーバーの起動中に悪性サイトを開くと、ストーリーのファイルが無断で変更されうる。追加の条件がそろうと、変更されたファイルが開発者の権限で実行されうる
  • ・修正版:storybook 8.6.19 / 9.1.21 / 10.6.2 / 11.0.0-alpha.6(関連パッケージは下の表)
  • ・対象外:ビルド済み Storybook の公開・閲覧、ブラウザで一度も開かない開発サーバー
  • ・悪用:勧告の時点で、実際のプロジェクトでの悪用の証拠は受け取っていない

まずやること

  • ・開発者:起動中の storybook dev を止め、修正版に上げてから起動し直す。上げられない間は影響版の開発サーバーを動かさない
  • ・チームの管理者:リポジトリの lockfile で版を確かめ、修正版への更新を1本の PR にまとめる。CI でビルドした Storybook の公開はこの勧告の対象外

依存パッケージを通じた攻撃の全体像はサプライチェーン攻撃とは|手口・防御ツール比較・npm 12の新機構まで実践解説にまとめています。

Storybook 脆弱性 CVE-2026-114125 の時系列

TIMELINE時系列

報告から12日で修正版、その9日後に勧告を公開

  1. 09/30

    新しい報告を受領

    悪性サイトがプレビューを埋め込める

  2. 10/12

    修正版を npm に公開

    8.6.19 / 9.1.21 / 10.6.2 / 11.0.0-alpha.6

  3. 10/21

    GHSA を公開

    CVE-2026-114125・深刻度 Critical

出典: GHSA-f2ph-cmg5-wxc8、npm レジストリの公開日時(UTC・2026-10-22確認)
日付(UTC) 出来事 出典
2026-02-26 別件の CVE-2026-27148(開発サーバーの WebSocket が接続元を確かめない問題)を公開。修正版 8.6.17 / 9.1.19 / 10.2.10 GHSA-mjf5-7g4m-gx5w
2026-09-30 Storybook チームが報告を受領。悪性サイトが開発サーバーのプレビューの iframe を埋め込み、開発者のマシン上の開発サーバーへイベントを送れることを示すもの GHSA-f2ph-cmg5-wxc8
2026-10-12 npm に修正版を公開(11.0.0-alpha.6 → 10.6.2 → 9.1.21 → 8.6.19 の順) npm レジストリの公開日時
2026-10-20 10.6.3 を公開(10 系の最新。修正を含む) npm レジストリ
2026-10-21 GHSA-f2ph-cmg5-wxc8(CVE-2026-114125)を公開 GitHub Advisory Database

10.6.2 の変更履歴には「Security: Patch GHSA-f2ph-cmg5-wxc8 and GHSA-px85-f4q5-jh77」とあり、別の勧告 ID も同じ変更(#36726)で直されています。GHSA-px85-f4q5-jh77 の中身は、2026-10-22 時点で GitHub Advisory Database のレビュー済みデータに載っていません。

何が起きたか:開発サーバーが要求の出どころを確かめていなかった

勧告の要旨は「影響版の開発サーバーの起動中に、悪性サイトが開発者のプロジェクトのファイルを無断で変更しうる」です。最悪のシナリオとして、悪性サイトが起動中の開発サーバーのプレビューとやり取りし、利用者の操作を伴ってストーリーのファイルを変更させ、そのファイルをローカルの実行環境が実行すると開発者の権限で任意のコードが動きうる、と書いています。

勧告の題名が示す原因は、プレビューでの出どころ(オリジン)の確認漏れです。やり取りの相手がどのサイトから来たかを確かめていなかったため、別のサイトからの要求が開発サーバーまで届きえました。勧告によれば、この最悪のシナリオは複数の弱点を順に突く必要があり、その中には報告されていなかったものも含まれます。チームは報告の内容と進行中のセキュリティ監査の結果を合わせ、シナリオに必要な層をすべて塞いだとしています。

CVSS v4 のベクトルは AV:N/AC:L/AT:N/PR:N/UI:P で、ネットワーク越しに認証なしで届く一方、利用者の操作(UI:P)が前提です。勧告の言葉の範囲で、影響の出方を状況ごとに分けると次のとおりです。

状況 勧告での扱い
影響版の storybook dev を起動し、ブラウザで開いている 影響を受ける
開発サーバーを動かしたまま、ブラウザで信頼できないサイトを開く 最悪のシナリオの前提(悪性サイトがプレビューとやり取りする)
ブラウザが localhost への接続の許可を求め、それを許可する Chrome と Firefox の最近の版の許可の確認はリスクを下げるが、無くしはしない
変更されたファイルをローカルの実行環境が実行する 追加の条件。そろうと開発者の権限でコードが動きうる
ブラウザで一度も開かない開発サーバー(ヘッドレスの自動化、MCP クライアント) 影響を受けない
ビルド済み Storybook を公開・閲覧する 影響を受けない

本記事は攻撃の具体的な手順や、ファイルの変更から実行に至るまでのつながり方には立ち入りません。勧告もそこは公開していません。

対策:Storybook アップデートの行き先と、修正版で変わる既定

勧告によれば、影響のある全メジャー版に修正版が出ています。storybook dev を次に起動する前に修正版へ上げ、すぐ上げられない場合は修正を当てるまで影響版の開発サーバーを動かさないよう求めています。

パッケージ 影響を受ける版 修正版
storybook 8.0.0 以上 8.6.19 未満 / 9.0.0 以上 9.1.21 未満 / 10.0.0 以上 10.6.2 未満 / 11.0.0-alpha.0 以上 alpha.6 未満 8.6.19 / 9.1.21 / 10.6.2 / 11.0.0-alpha.6
@storybook/core・@storybook/core-server・@storybook/experimental-addon-test 8.0.0 以上 8.6.19 未満 8.6.19
@storybook/addon-vitest 9.0.0 以上 9.1.21 未満 / 10.0.0 以上 10.6.2 未満 / 11.0.0-alpha.0 以上 alpha.6 未満 9.1.21 / 10.6.2 / 11.0.0-alpha.6
@storybook/addon-mcp 10.6.0 以上 10.6.2 未満 / 11.0.0-alpha.0 以上 alpha.6 未満 10.6.2 / 11.0.0-alpha.6

10 系の例です。入れている @storybook/* のうち表にあるものを同じ行に並べます。

npm install -D storybook@^10.6.2 @storybook/addon-vitest@^10.6.2

9 系なら ^9.1.21、8 系なら ^8.6.19 に置き換えます。8 系は @storybook/core と @storybook/experimental-addon-test の npm の latest タグが 8.6.14(未修正)を指しています(2026-10-22 に npm view で確認)。@latest で上げず、版を明示してください。[email protected] は依存として @storybook/core 8.6.19 を固定で引きます。

PATCHED DEFAULTS修正版の既定

修正版はlocalhost 以外からの埋め込みとメッセージを断る

修正版の開発サーバー

  • iframe埋め込み 既定で拒否ホスト名の違うサイト
  • 通信postMessage 拒否知らないオリジン
  • 通信postMessage 受け付ける自分のオリジンと localhost
  • 公開ビルド済み 従来どおりどのサイトからでも
出典: GHSA-f2ph-cmg5-wxc8「Review potentially breaking changes」。feature flag で戻せる項目あり

修正版は 8 系・9 系も含めて、ネットワークまわりの既定を変えています。手元のワークフローに関わる場合だけ確認してください。

変わったこと 影響が出る使い方 勧告が示す戻し方
開発中の manager・preview を、ホスト名の違うサイトから iframe で埋め込めない 別の Web アプリに開発サーバーを埋め込んでいる その Web アプリを localhost で動かす。feature flag security.insecureRemoteIframeEmbed
postMessage の相手を、自分のオリジンと他の localhost のサービスに限る 別オリジンの Storybook を開発中のまま composition で読み込む 読み込む側をビルドする(推奨)。feature flag security.insecureIframeMessaging
highlight イベントの形を変更 Chromatic の Visual Tests アドオン 5.5.1 以上に上げる。戻すフラグは無い

勧告はフラグを使う前に、それが何を戻すかを読むよう求めています。修正版に上げられない間の緩和として勧告が挙げるのは、影響版の開発サーバーを動かさないことと、ブラウザが localhost への接続の許可を求めてきたら信頼しないサイトには許可しないことの2つです。

自システムの確認:Storybook バージョン確認のコマンド

まず、各プロジェクトのディレクトリで入っている版を見ます(node_modules がある状態)。

npm ls storybook @storybook/core @storybook/core-server @storybook/experimental-addon-test @storybook/addon-vitest @storybook/addon-mcp

[email protected] のように版が出ます。どれも入っていなければ (empty) と出て終了コードは 1 です。node_modules が無いリポジトリや CI の設定を見るときは、lockfile を直接探します。

grep -A1 -E 'node_modules/(storybook|@storybook/(core|core-server|experimental-addon-test|addon-vitest|addon-mcp))"' package-lock.json
grep -nE "^  '?(storybook|@storybook/(core|core-server|experimental-addon-test|addon-vitest|addon-mcp))@" pnpm-lock.yaml

1 行目は npm、2 行目は pnpm の lockfile 用です。使っていない方は「ファイルが無い」と出るだけです。最後に、起動したままの開発サーバーが残っていないかを見ます(Linux と macOS)。

ps ax -o pid,command | grep -E '[s]torybook( .*)? dev( |$)'

このコマンドで分かること・分からないこと

  • ・3つとも、入っている版と起動中のプロセスを見る構成の確認で、脆弱性の判定ではありません。出てきた版を上の表と比べて判断します
  • ・修正版が出ても、別のプロジェクトや別の lockfile に影響版が残っていることがあります。この結果だけでは端末全体が安全とは言えません
  • ・影響版が出ても、開発サーバーを一度もブラウザで開いていなければ勧告上は対象外です。過去にファイルが変更されたかどうかは、これらのコマンドでは分かりません。ストーリーのファイルの身に覚えのない差分は git status と git log で確かめます
  • ・2026-10-22 に、10.6.1 と 8.6.14 の lockfile(陽性)、10.6.2 の lockfile、Storybook を含まない lockfile(陰性)で、掲載したままの形で実行しています。yarn の lockfile は確かめていません

影響範囲:Storybook 脆弱性が届く人・届かない人

影響を受けるのは、表の影響版で storybook dev を動かし、ブラウザで開いている開発者の端末です。本番環境・CDN に置いたビルド済み Storybook は対象外です。被害として勧告が挙げるのはプロジェクトのファイルの無断変更で、条件がそろえば開発者の権限でのコード実行に及びえます。その場合、その端末で開発者が持つ権限の範囲が被害の範囲を決めます。

Storybook の勧告は 2025-12 以降、少なくとも次の3件があります。狙われる場所と修正版が違うので、1件の修正で他もまとめて直ったとは考えないでください。

勧告 狙われる場所 起きること 修正版
CVE-2025-68429(2025-12) 公開したビルド済み Storybook .env の値がビルドの成果物に入りうる 7.6.21 / 8.6.15 / 9.1.17 / 10.1.10
CVE-2026-27148(2026-02) 開発サーバーの WebSocket ストーリーの作成・保存の処理を通じた XSS・RCE 8.6.17 / 9.1.19 / 10.2.10
CVE-2026-114125(2026-10) 開発サーバーのプレビュー ファイルの無断変更、条件つきで実行 8.6.19 / 9.1.21 / 10.6.2 / 11.0.0-alpha.6

2月の CVE-2026-27148 も「開発サーバーの起動中に悪性サイトを開く」ことが前提でした。そのとき 10.2.10 に上げたプロジェクトも、今回の影響範囲(10.6.2 未満)に入ります。版の確認は今回の表でやり直してください。依存の脆弱性をどれから直すかの決め方はnpm audit の結果はどれから直す?依存関係の脆弱性を到達性・EPSS・KEVで仕分ける実践手順、同じく開発用ツールの脆弱性を扱った例はVitest 脆弱性の修正版は4.1.10/3.2.7|Browser Mode 4件の確認手順つきにあります。

参照ソース

・GHSA-f2ph-cmg5-wxc8(GitHub Advisory Database) — 影響範囲・修正版・CVSS v4・CWE(2026-10-22確認)
・Storybook 公式のセキュリティ勧告 GHSA-f2ph-cmg5-wxc8 — 影響を受ける条件・推奨対応・既定の変更・開示の経緯
・storybookjs/storybook CHANGELOG — 10.6.2 の「Security: Patch GHSA-f2ph-cmg5-wxc8 and GHSA-px85-f4q5-jh77」
・修正 PR #36726 と v10.6.2・v9.1.21・v8.6.19 のリリース
・GHSA-mjf5-7g4m-gx5w(CVE-2026-27148) — 2026-02 の開発サーバーの WebSocket の問題
・GHSA-8452-54wp-rmv6(CVE-2025-68429) — 2025-12 のビルド済み Storybook の環境変数の問題