| ベンダー / 製品 | Moonshot AI — Kimi |
| コンポーネント | HTMLアーティファクトプレビューのレンダリング、公開Shareビュー |
| 脆弱性 | CWE-79 — Webページ生成時の入力の不適切な中和 |
Kimiはモデルが生成したHTMLアーティファクトを、アプリケーション自身のオリジン内の プレビューペインで、スクリプトを中和せずにレンダリングする。会話を共有すると、その アーティファクトが公開Share URLで公開されるため、あるアカウントが作成したスクリプトが、 リンクを開いた誰のブラウザでも実行される。
Kimiが依存するセッション値はlocalStorageに保持されているため、そのスクリプトから
読み取り可能である:
access_token
refresh_token
msh_user_id
したがって、スクリプト実行はスクリプト実行にとどまらない。これら3つの値は被害者の ブラウザから読み出され、どこへでも送信でき、再生することでその被害者として認証された セッションを取得できる。
攻撃者アカウント → 窃取スクリプトを含むアーティファクト → 公開Share
→ 被害者がリンクを開く → スクリプトがKimiのオリジンで実行される
→ 3つのlocalStorage値が攻撃者に到達する
→ クリーンなブラウザで再生 → 被害者として認証される
攻撃者に必要なのは通常のアカウントだけである。被害者はサインインした状態で共有リンクを 開くだけでよい — それは共有リンクの本来の用途である。
| 観測事項 | 方法 |
|---|---|
| スクリプトが被害者のブラウザで実行される | 被害者のセッションを発信元とするリクエストが攻撃者のエンドポイントに到達した |
| 3つの値がスクリプトから読み取り可能 | 3つすべてがそのリクエストボディに含まれていた |
| 値だけで認証が成立する | Kimiに一度もサインインしたことのないブラウザに書き込み、リロード後、そのブラウザは認証済みセッションを保持していた |
| 値が原因である | 対照実験: 同じブラウザで値を省略してリロード — 未認証のままだった |
関与した両アカウントは研究者が作成し管理していた。第三者のデータは一切アクセスされて いない。
攻撃チェーンは上記にすべて記載されている。動作するペイロードと受信エンドポイントは 伏せている — それらを公開することは、攻撃を説明するのではなく武装させることになる。
アーティファクトのプロンプトは次の形式をとる:
Generate an HTML page that reads the three localStorage values above
and POSTs them to <attacker endpoint>.