「最新の Playwright でも CVE 入りの古い Chromium を同梱していて、サンドボックスも既定でオフだから今すぐ消せ」——という投稿がバズり、Playwright 公式(@playwrightweb)が「削除しないで。それは誤解です」と反論した。どちらが正しいのか。結論を先に言うと、「消せ」は言い過ぎだが、主張の芯(ピン留めブラウザの遅れ+サンドボックスOFF)は本物で、それが効くのは“開いたウェブを触るエージェント”だ。この記事は、Playwright 公式ドキュメントと両者のポストを一次に、Playwright サンドボックスの既定と対策を中立に整理する。攻撃の再現手順(PoC)は扱わない。まず確かめることは、自分の使い方が「信頼アプリのテスト」か「任意サイトを開くエージェント」かだ。
THE DEBATE削除しろ vs 削除するな
『Playwrightを消せ』は言い過ぎ、でも芯はある
バズった主張(nisten)
Playwright公式の反論
バズった主張(nisten): 最新1.64.1でも古いChromium 156を同梱しCVEが残る
Playwright公式の反論: Playwrightパッケージはブラウザを同梱していない
バズった主張(nisten): サンドボックスは既定でOFF=危険、今すぐ削除を
Playwright公式の反論: MCP/CLIのエージェントはあなたの安定版Chromeを使い更新もサンドボックスも効く
バズった主張(nisten): (本人も)信頼アプリのlocalhostテストはリスク低いと認める
Playwright公式の反論: 削除しないで。仕組みと対処法はある、という立場
30秒でわかる(2026-11-04確認)
- ・Playwrightのnpmパッケージはブラウザを同梱していない(公式)。MCP/CLIが『あなたのChrome』を使う構成なら更新もサンドボックスも効く。
- ・ただし既定は危うい:test runner/libraryの
chromium.launch()はピン留めブラウザ+サンドボックスOFF。Chromeの修正に遅れ、壁も無い。 - ・効くのは“開いたウェブを触るエージェント”。信頼アプリ/localhostのe2eならリスクは低い。分かれ目は「何を訪れるか」。
- ・対策は本物のChrome+サンドボックスON+隔離。MCPは0.0.40以降(CVE-2025-9611修正)。削除はしない。
基盤ソフトの脆弱性がどう広がるかはサプライチェーン攻撃とは|手口・防御ツール比較・npm 12の新機構まで実践解説にまとめている。盗まれた認証情報の悪用経路はCursor 改ざん拡張のSSHバックドアやVOLTA(AIで被害者を値付けする情報窃取)が参考になる。今回は「エージェントが使うブラウザ自体」の安全性だ。
そもそもこの話がこれほど刺さったのは、コーディングエージェントが開発者のノートPC上で“開いたウェブ”を自分で開くことが、ここ数か月で一気に当たり前になったからだ。元の投稿も「コンテナなしでラップトップの上で裸でバイブコーディングしている人へ」と呼びかけている。テスト自動化の道具だった Playwright が、いまはエージェントの“手足”としてインターネット全体に向けられている——その文脈の変化が、同じ既定値(ピン留めブラウザ+サンドボックスOFF)の意味を変えた、というのが要点だ。
誤解と事実:パッケージはブラウザを同梱していない
まず、バズった主張のうち事実と違う部分を公式が正している。Playwright の npm パッケージは、それ自体がブラウザを同梱しているわけではない。ブラウザは別途取得する。そして Playwright MCP や CLI のエージェントは、あなたのマシンにある安定版の Chrome / Edge を実行する。だから通常の Chrome セキュリティ更新を受け取り、サンドボックスも有効で、設定の編集は要らない——というのが公式の説明だ。この構成で使っている限り、「古い Chromium が刺さったまま」という前提は当てはまらない。
つまり「Playwright=危険なブラウザを抱え込む」という単純化は正確ではない。ここは主張側も、落ち着いて見れば否定していない部分だ。
本当の懸念:ピン留めブラウザ+サンドボックスOFF
WHERE THE RISK IS本当に効くのはどこか
“開いたウェブを触るエージェント”で効く
-
1.パッケージ自体はブラウザ非同梱
ブラウザは別途ダウンロード。MCP/CLIで『あなたのChrome』を使う構成なら更新もサンドボックスも効き、設定変更も不要(公式)
-
2.①ピン留めブラウザが遅れる
test runnerやlibraryの chromium.launch() は、テスト済みビルドに固定=Chrome安定版のセキュリティ修正に次のPlaywrightリリースまで遅れうる
-
3.②既定でサンドボックスOFF
chromiumSandbox の既定は false。壁が無いと、悪用に成功した悪意ページが『あなた』として走り、.env・SSH鍵・ログイン済みトークンに届く
-
4.分かれ目は“何を訪れるか”
自分の信頼アプリ/localhostのe2eならリスクは低い。タスクや検索やプロンプト注入で任意のサイトを開くエージェントは別。ここが芯
一方で、主張の芯は本物だ。2つある。
①ピン留めされたブラウザ。 npx playwright install や既定の chromium.launch() は、そのリリースでテストされたビルドにブラウザを固定する。これはテストの再現性のための意図的な設計で、ブラウザの突然の更新でスイートが壊れない利点がある。半面、そのビルドは次の Playwright リリースまで、Chrome 安定版のセキュリティ修正を取り込まないことがある。主張側は、同梱 Chromium と Chrome 安定版の版を比べ、直近で修正されたいくつかの Chrome の脆弱性(FileSystem・FileAPI・Skia・Layout・MediaStream などの重大バグ)がまだ開いている可能性が高いとしている。ただし本人も「これは版番号の比較で、各 CVE を個別に検証したわけではない」と明記している——ここは“可能性の指摘”として読むのが正確だ。
②既定でサンドボックスOFF。 chromiumSandbox の既定は false だ(公式ドキュメント)。サンドボックスは、ブラウザのバグとあなたのマシンの間の壁である。これが無いと、悪用に成功した悪意あるページがあなた自身として実行され、ファイル・.env・SSH鍵・ログイン済みトークンにアクセスできてしまう。この2つが重なると、「古いかもしれないブラウザを、壁なしで動かす」ことになる。
なぜエージェントだと悪化するのか
ここが分かれ目だ。自分の信頼できるアプリを localhost でテストするだけなら、ブラウザが触るのは自分のサイトなので、上の2点のリスクは小さい。主張側ですら「信頼できるコンテンツで自分の localhost に対するテストはリスクがはるかに低い」と認めている。
問題は、タスク・検索結果・プロンプトインジェクションによって“任意のサイト”を開くエージェントだ。古いかもしれないブラウザで、壁なしで、しかも日常のマシン上で開いたウェブに触れる——これは露出の形がまるで違う。さらに Playwright は、自身の MCP サーバーについて「セキュリティ境界ではない」と述べており、--allowed-origins の既定はすべてを許可する。実際、Playwright MCP には DNS リバインドの脆弱性(CVE-2025-9611・GHSA-6fg3-hvw7-2fwq)があり、ウェブサイトがローカルの MCP ツールを呼び出せる問題として修正されている(0.0.40 以降)。「Docker だから大丈夫」も必ずしも正しくない。Playwright の Docker イメージは既定で root 実行で、それにより Chromium のサンドボックスが無効になる。
対策:本物のChrome+サンドボックス+隔離
面白いことに、対策については主張側と公式がほぼ一致している。要は「開いたウェブを触るなら、ちゃんと守れ」だ。
WHAT TO DO対策(両者ほぼ合意)
本物のChrome+サンドボックスと隔離
-
1.開いたウェブ/エージェントは本物Chrome+サンドボックス
chromium.launch({ channel: 'chrome', chromiumSandbox: true })。Chrome/Edgeを常に更新。Playwrightも最新へ
-
2.隔離して走らせる
ブラウジングするエージェントはVMか非rootコンテナで。本物の認証情報を使わず、homeをマウントせず、使い捨てプロファイルで
-
3.ツールを固定し、MCPを上げる
@latestで無検証に最新を掴まない。Playwright MCP 0.0.40以降でDNSリバインド(CVE-2025-9611)修正。--allowed-origins の既定は全許可に注意
-
4.削除はしない・自己確認する
信頼テスト用途には優れた道具。ls ~/.cache/ms-playwright と npx --no-install playwright --version で自分の版を確認
まず、開いたウェブやエージェント用途では、ピン留めビルドではなく本物の Chrome をサンドボックス付きで使う。これが一番効く。
// 開いたウェブ/エージェント向け:本物のChrome+サンドボックスON
chromium.launch({ channel: 'chrome', chromiumSandbox: true })
そのうえで、隔離する。ブラウジングするエージェントは VM か非rootのコンテナで動かし、本物の認証情報を使わず、ホームディレクトリをマウントせず、使い捨てのプロファイルを使う。ツールは固定し(@latest で無検証に最新を掴まない)、Playwright MCP は 0.0.40 以降にして CVE-2025-9611 を塞ぐ。Chrome / Edge は常に更新する(サンドボックスを抜けるバグもあるため、箱だけに頼らない)。自分の状態は、何もダウンロードせずに確認できる。
# 自分のPlaywrightとブラウザ・版を確認(ダウンロードしない)
ls ~/.cache/ms-playwright ~/Library/Caches/ms-playwright 2>/dev/null
npx --no-install playwright --version
ここで出る chromium-<番号> が、ピン留めされているビルドだ。番号が新しいほど新しく、古い番号なら古い(主張側は、ある時点で chromium-1248 が 1.64.1 のビルドだと例示している)。なお --no-install を付けるのは、パッケージが無いときに npx が勝手にダウンロードして実行してしまうのを避けるためだ。確認の時点で余計なものを取ってこない、という小さな用心でもある。注意したいのは、たとえ「最新」を入れていても、Playwright のブラウザは Playwright が新バージョンを出したときにしか更新されないため、Chrome 安定版との間に時間差が残りうる点だ。だからこそ、開いたウェブ用途では channel:'chrome' で“自分が更新している実物の Chrome”を指す意味がある。
用途ごとの既定を、表で整理しておく。
| 使い方 | 使うブラウザ | サンドボックス | 向く用途 |
|---|---|---|---|
| MCP / CLI(channel 指定) | あなたの安定版 Chrome/Edge | 有効 | 更新が効く。設定変更不要(公式推奨の形) |
test runner / chromium.launch() 既定 |
ピン留めビルド | 無効 | 自分の信頼アプリの e2e(再現性重視) |
| 開いたウェブ・エージェント | channel:'chrome'+chromiumSandbox:true |
有効 | 任意サイトを触る用途はこれ+隔離 |
この記事の結論
- ・「Playwrightを消せ」は言い過ぎ。パッケージはブラウザ非同梱で、MCP/CLIが『あなたのChrome』を使う構成なら更新もサンドボックスも効く(公式)。
- ・ただし芯は本物:既定の
chromium.launch()はピン留めブラウザ+サンドボックスOFF。Chromeの修正に遅れ、壁も無い。 - ・効くのは“開いたウェブを触るエージェント”。信頼アプリ/localhostのe2eならリスクは低い。分かれ目は「何を訪れるか」。
- ・対策(両者ほぼ合意):本物のChrome+
chromiumSandbox:true、VM/非rootコンテナ+使い捨てプロファイル、ツール固定、MCP 0.0.40以降、Chrome常時更新。削除はしない。
参照ソース
- Playwright 公式(@playwrightweb)の反論ポスト(削除するな・パッケージはブラウザ非同梱・MCP/CLIは安定版Chromeを使う。本記事はユーザー提供のスクリーンショットを一次とした)
- Playwright 公式ドキュメント(
chromiumSandboxの既定・channel指定) - GHSA-6fg3-hvw7-2fwq / CVE-2025-9611(Playwright MCP の DNS リバインド・High。0.0.40 以降で修正とされる)





