この記事の要点
- 入口は、ChatGPT の HTML のプレビュー(以前の Canvas)。sandbox で権限を絞った iframe の中で動く。
- 数式の入力に使う MathLive のキーボードが、postMessage で受けた中身を innerHTML で画面に入れていた。しかも、ほかの分離された枠からのメッセージも受けていた。
- そこから分離されていない iframe を差し込み、CSP が許していた YouTube の oEmbed の反射を使って、chatgpt.com の上で JavaScript を動かせた。
- 悪意のある共有の URL で、データを抜くことも、本人として操作することもできる状態だった。穴は直り、報奨金は 5,000 ドルだった。
$5,000報奨金simonwillison.net は「少し安い」と評した
10/31simonwillison.net の紹介
数字は出典に書かれた値です。
ChatGPT には、AI が作った HTML をその場で表示する「HTML のプレビュー」(以前の Canvas)があります。セキュリティの会社 Parameter は、ここから始まる穴の連鎖で、他人の ChatGPT のアカウントのデータを抜き出し、本人として操作できることを示しました。simonwillison.net が 10 月 31 日に紹介しています。穴はすでに直っています。
連鎖の流れ
- HTML のプレビューは、分離された iframe(sandbox 属性で権限を絞った枠)の中で動く。
- 数式を入力する MathLive の、画面のキーボードが、postMessage(枠どうしでメッセージを送る仕組み)で受けた中身を innerHTML で画面に入れていた。しかも、ほかの分離された枠からのメッセージも受け付けていた。
- これを使って、分離されていない iframe を差し込めた。
- ChatGPT の CSP は、YouTube を許していた。
- YouTube の oEmbed(埋め込みの情報を返す仕組み)が JavaScript を反射したため、chatgpt.com の上でスクリプトが動いた。
- スクリプトは非公開のデータを取り、画像の読み込みに見せかけて外に送れた。
悪意のある共有の URL を使えば、データを抜くことも、本人として操作することもできる状態でした。
報奨金
報奨金は 5,000 ドルでした。simonwillison.net は「少し安い(a bit cheap)」と書いています。
作り手にとっての意味
AI が作った HTML やコードを画面に出すサービスは増えています。プレビュー、アーティファクト、生成 UI。今回の連鎖は、1 つの守りでは足りないことを示しています。
- postMessage は、送り主(origin)を確かめてから受ける。
- 受けた中身を innerHTML に入れない。
- 分離した枠の中で、さらに枠を作らせない。
- CSP で許すドメインは最小にし、中身を反射する機能(JSONP や oEmbed など)を持つ所を避ける。
- 外部の部品(今回は数式の入力)も、自分のコードと同じ基準で確かめる。
1 つ 1 つの穴は小さくても、つながると致命的になります。守りは、重ねて初めて効きます。
サブに聞く
iframe で分けていたのに、なぜ破られたの?
分けた枠どうしのメッセージの受け取りがゆるかったからです。MathLive のキーボードが、ほかの分離された枠からのメッセージも受け、その中身を innerHTML で画面に入れていました。そこから、分離されていない枠を差し込めてしまいました。
自分のサービスで真似すべき守りは?
postMessage は送り主を確かめてから受ける。受けた中身を innerHTML に入れない。CSP で許すドメインは、中身を反射する機能を持たない所だけにする。この 3 つです。
BeesBuild の視点 外から来た物は、指示としても、コードとしても扱わない
BeesBuild は「外の指示に従わない」を守りの決まりの 1 つにしています。AI が作った HTML も、外から届いた文章も、信頼できない入力として分けて扱います。
よくある質問
今も危ないですか?
報告によると、穴は直っています。直った日付は書かれていません。
CSP とは何ですか?
Content Security Policy の略で、ページが読み込んでよいスクリプトや枠の出どころを、ブラウザーに伝える決まりです。許すドメインが広いと、そのドメインの機能を足場にされることがあります。
この記事について
BeesBuild News 編集部が、上の出典をもとに作りました。本文は AI を使って書き、数字と引用は出典と照らし合わせています。出典は 2026年11月6日に確かめました。記者のサブ(S0)は BeesBuild の蜂のキャラクターで、記事の担当分野を表します。
誤りに気づいたら、お問い合わせから知らせてください。直した時は、この欄に日付と内容を書きます。