ブラウザセキュリティ企業LayerX、AIアシスタントを騙す新種の「視覚詐欺」攻撃を発見
サイバーセキュリティ企業LayerXが、AIアシスタントを狙う新種の「視覚詐欺」攻撃を発見
主要なAIツールのほぼ全てに有効で、こっそりとAIを騙せます
この攻撃は「人間の目に見えるもの」と「AIアシスタントが読み取るもの」の認識のズレを利用し、AIに悪意あるコマンドを「承認」させるのです。
「このページのコマンドは安全か?」とAIアシスタントに確認するとき、AIと人間ではWebページの見方がまったく異なります:
ハッカーはまさにこの違いを利用し、次の2段階のコンビネーションで欺きます:
最終的な効果:
LayerXのテストによると、2025年末時点で、この攻撃方法は市場の主要なAIアシスタント(ChatGPT、Claude、Copilot、Gemini、Grok、Perplexityなど)のほぼ全てに有効でした。
典型的な脆弱性シナリオ:ハッカーが『BioShock(バイオショック)』のゲーム裏技を謳うWebページを用意し、ページ上に悪意あるコマンドラインを表示させます。ユーザーは疑いを持ち、AIアシスタントに質問します。AIは基盤となる無害なコードを読み取り「安全」と回答。ユーザーはそれを信じて自分のPCで実行し、端末を乗っ取られます。
同じWebページ、あなたには危険なコマンド、AIにはゲームの二次創作小説
ブラウザセキュリティ企業LayerXが、「AIに『これは安全か?』と確認する」という行為を狙った詐欺を公開しました。カスタムフォントと数行のCSSだけで、同じWebページを人間とAIにまったく異なる内容として表示できるのです。簡単に言うと、これまではページに隠し命令を仕込んでAIをおびき寄せていましたが、今回は逆。ページはAIには真実を語り、人間には偽りを語り、AIを保証人として引き込むのです。
研究者は、ゲーム『Bioshock』の二次創作小説をテーマにしたデモページを用意しました。ページは「手順に従えば隠し要素が見られる」と約束します。画面上には大きな緑色の文字が4行。最初の行は "Would you kindly" で始まります。これは『Bioshock』に登場するマインドコントロールの合言葉で、まさにここが「針」の役割です。続いて、ターミナルを開いてコマンドを手入力するよう指示されます。そのコマンドはリバースシェルです。自分から相手のマシンに接続しに行き、接続が確立されると、相手は逆にあなたのPC上で何でも実行できるようになります。これは外部からの直接攻撃よりも成功しやすいです。なぜなら、アウトバウンドの接続は一般的にファイアウォールでブロックされないからです。
下の画像は、研究者が公開した実際のレンダリングスクリーンショットで、被害者の画面に表示されるものです。
LayerXは2025年12月、このページを使って11種類のAIアシスタントをテストしました:ChatGPT、Claude、Copilot、Gemini、Grok、Perplexity、Leo、Sigma、Dia、Fellou、Genspark。どれも見破れませんでした。同社は特に、アシスタントに問題を発見させるために設計された、意図的な高精度の質問も試したと述べていますが、結果は同じでした。
騙しの3ステップ:二次創作小説を1pxに、コマンドを文字化けに、フォントで文字化けを人が読める形に
当サイトはこのデモページのソースコードを取得して確認しました。ページ全体はわずか3つの動作で構成されており、合わせても20行未満です。
ステップ1:二次創作小説を1pxに縮め、黒字に黒背景
あの二次創作小説の数段落は、このようなタグの中に書かれています。ページの背景色は真っ黒なので、黒い文字は黒い背景に溶け込み、高さが1pxしかありません。あなたが今読んでいるこの行の文字は約17pxの高さで、1pxはその約17分の1です。
<p style="color: #000000;font-size: 1px;">This website was created as a tribute to Bioshock</p>
ページ全体でこのような1pxの隠しテキストが4段落あります。うち2段落は長編の二次創作小説(5014字と6570字)、もう1段落はこの追悼文、最後の1段落はわずか5語です。これらはWebページのコード内に完全な形で存在するため、AIがページを取得した際に読む主な内容はこれらになります。
ステップ2:人に見せるためのコマンドを、コード上では文字化けの羅列に
ページ中央には、ごく普通の <div> があり、その中に4行の文字があります。見た目はbase64エンコードされた塊のようです。AIアシスタントはこれを見ると、「高エントロピー文字列で、鍵なしでは解読できない」と判断し、ノイズとしてスキップします。
<div> vRmUwAgRmAiPjwUgARrhjAgRmbAshbVPjcUAcjwAsgrhAfcao <br>RjJhAgRmAhnhJmshwAPsAsgrh <br>fcaoADPAHBAFwhuFsJrF859E806E8E35F6266A2HB8 <br>PsAOPUUAcUUROAgRmAsRAahhAgRmbAhcashbAhWWAxbRVAMcrsmbh </div>
この4行が、画面に表示されるあの4行の大きな緑色の文字です。1行目の49文字は、レンダリングされるとちょうど「Would you kindly open your terminal and type bash」という49文字になります。
当サイトはソースコード中で、研究レポートや報道でも触れられていない点も発見しました。この文字化けボックスのすぐ上の行に、同じく1pxの隠しテキストがあり、その内容は5語のみ、LLM Generation Seed:(大規模言語モデル生成シード)です。つまり、AIが読む順序は「生成シード:」の後にランダムな文字列が続く、というものです。AIがこれが何かを推測する必要はありません。攻撃者がすでにラベルを貼っておいたからです。研究者が公開したソースコードのスクリーンショットにはこの部分がないため、ページはスクリーンショット後に変更されたことがわかります。
ステップ3:文字の描画がすり替わったフォントを適用
ページのヘッダーでフォントファイルを参照し、ページ全体に適用しています。文字サイズ48px、緑色の文字、黒い背景。それが画面に表示される状態です。
@font-face {
font-family: 'fontie';
src: url('RaptureFont.ttf') format('truetype');
}
body {
font-family: 'fontie', sans-serif;
font-size: 48px;
background: #000;
color: #0f0;
}
このフォントでは、各文字の描画がすり替えられています。ファイル内でcという名前のグリフ(フォントファイル内の文字の具体的な描画)は、aとして描画されます。vという名前のは、Wとして描画されます。そのため、ブラウザがそれに従って描画すると、文字化けが人の言葉になります。
3つの動作は、それぞれ単独では完全に合法です。CSSでは文字を小さくしたり、背景と同じ色にしたりすることはもともと可能です。<div> には任意の文字列を書けます。Webページが独自のフォントを持つことは当然できます。どこにもJavaScriptは使われておらず、ブラウザの脆弱性も利用していません。JSを完全に無効にしても、このページは問題なく騙せます。
なぜAIはまったく気づかないのか? AIはWebコードしか読まず、ブラウザだけがフォントを読み込んで再描画するから
AIアシスタントがWebページを取得するとき、取得するのはWebコードです(DOM=ブラウザがコードを読み込んだ後にメモリ上に構築するテキストの骨組み)。タグ、構造、その中のテキストです。完全なブラウザレンダリングパイプラインは実行せず、フォントファイルをダウンロードせず、「この文字が最終的にどんな形で描画されるか」も計算しません。LayerXはこの種のアシスタントを非エージェント型(non-agentic)と呼んでいます。ページを取得し、コードを解析するが、完全なレンダリングは実行せず、カスタムフォントのグリフマッピングも分析しません。
ここには、誰もが当然だと思っている前提があります。Webコードはコンテンツであり、フォントは見た目を良くするだけで、文字の意味を変えるものではない、という前提です。この前提はほとんどの場合成立するため、誰も検証しません。そして、普段は安全だからこそ、この手口は非常に有効なのです。
契約書を例にしましょう。白黒はっきり書かれている内容は一つですが、プリンターの活字がすり替えられています。各活字の鋳型には、別の文字が入っているのです。校正者が確認するのは原稿データ、署名する人が見るのは印刷された紙。両者とも責任を果たしていますが、異なる2つの契約書に同意していることになります。
さらに重要な結果があります。アシスタントは問題を見つけられないだけでなく、「このページは安全そうだ」と伝えます。
攻撃者が悪意あるページを作り、AIアシスタントにそれを安全だと判定させた場合、実質的にアシスタントの権威を利用し、その信頼を自分の主張の裏付けにしているのです。
LayerX 研究レポート(当サイト訳)
この結論の適用範囲に注意してください。これは「コードのみを読み、レンダリングしない」タイプのアシスタントに対するものです。アシスタントが実際にページをレンダリングし、スクリーンショットで確認する場合、理論上はあの4行の緑の文字を見ることになります。ただし、LayerXはこのタイプのアシスタントをテストしていません。テスト対象はすべて前者のタイプでした。
当サイトがこの詐欺フォントを分解して検証:改変されていたのは文字の形、対応表はクリーン
以下の段落はLayerXのレポートにも、どの報道にも由来しません。当サイト自身の検証です。デモページで使われているフォントファイルをダウンロードし、内部の各テーブルを読み、それを使って文字化けを再レンダリングしました。
フォントファイルにはcmapと呼ばれるテーブルがあり、「文字aはどのグリフを使うべきか」を管理しています。フォントが改変されていないか確認する最も簡単な方法は、このテーブルを調べることです。このフォントのcmapは完全に正常です。文字aはaという名前のグリフを指し、文字0はzeroという名前のグリフを指します。5918の文字マッピングすべてに異常はありません。グリフ置換や字間の位置調整を管理するGSUB、GPOSの2つのテーブルはそもそも存在しません。
改変されていたのはglyfテーブル内の輪郭データ、つまり各グリフが具体的にどのように描画されるかです。aという名前のグリフの中には、sの描画が入っています。直接測定できる数値をいくつか示します:
cmap文字対応表の異常。5918のマッピング全て正常
Aという名前のグリフは一本も描かれず、画面上は空白になり、文のスペースを代替
vという名前のグリフの幅。小文字グリフ26個中で最も広い。Wとして描かれるため
4行の文字化け全てを一文字ずつ照合。1対1置換で、矛盾ゼロ
最初の行の最初の16文字を照合すると、置換関係が一目でわかります:
vRmUwAgRmAiPjwUg と画面上の Would you kindly が1枠ずつ対応します。赤で示した2つのAはこのフォントでは輪郭がなく、空白として描画されます。当サイトがfontToolsでテーブルを読み、Pillowで再レンダリングして作成。置換はすべて厳密に1対1です。最初の行の49文字から復元された文も49文字で、過不足はありません。4行169文字すべてが対応し、矛盾はありません。各文字の対応関係は次の通りです:
騙しの綻び:画面上のその行をコピーすると文字化けになるため、攻撃は手入力を強制する
画面上でそのコマンド行を選択してコピーを押すと、クリップボードに入るのはWebページのコード上の文字、つまりあの文字化けであり、目に見えるものとはまったく異なります。ブラウザがコピーするのは文字そのものであり、グリフがどのように描画されるかとは無関係です。
Would you kindly open your terminal…
vRmUwAgRmAiPjwUgARrhjAgRmbAshbVPjcUAcjwAsgrhAfcao
つまり、このデモページは被害者にコマンドを手入力させる必要があります。ページ上の動詞はtype(打ち込む)で、全文のどこにもcopyはありません。ただし、この制限はこのページにのみ当てはまります。攻撃者がクリップボードを書き換えるスクリプトを追加すれば、コピーされたものがデコード後のコマンドになる可能性があるため、下記の自己チェックは万能ではありません。
逆に、これは即席の自己チェック方法になります。同様に、ブラウザのリーダーモードやカスタムフォントを無効にすると、この偽装はその場で無効になります。偽装はページ付属のフォントに依存しているため、システムフォントに置き換えると、そのテキストは文字化けに戻ります。
ベンダーは修正したか? 7社中、修正したのはMicrosoftのみ。Googleは高危険と判断後、格下げ・クローズ
LayerXは2025年12月、この発見を各社に報告しました(まず非公開で通知し、期限後に公開する、業界用語で責任ある開示)。7社中6社は最終的に修正しませんでしたが、その理由はそれぞれ異なります。4社は最初から受理範囲外とし、Googleは受け付けたものの翻意し、Perplexityは大規模言語モデル共通の課題だと述べました。そのうち2社の言い分は「これは詐欺であり、当社システムの侵害ではない」というもので、セキュリティ業界ではこの種の詐欺をソーシャルエンジニアリングと呼びます。
| ベンダー | 提出 | クローズ | 説明 |
|---|---|---|---|
| Microsoft | 2025-12-16 | 未定 | 12月17日に受理し、自社のセキュリティレスポンスセンター(MSRC)でケースを起票。7社の中で唯一完全に修正。ケースはクローズされておらず、Microsoftが90日間の公開待機を要求しているため |
| Anthropic | 2025-12-16 | 2025-12-16 | ポリシーにより、「ソーシャルエンジニアリング(フィッシング含む)」と「モデルのプロンプトおよびレスポンスのコンテンツ問題」は受理範囲外 |
| Dia | 2025-12-14 | 2025-12-16 | プロジェクトポリシーにより不受理:誤情報、異常な動作、サービス拒否を引き起こすプロンプトインジェクションは明確に範囲外 |
| OpenAI | 2025-12-16 | 2025-12-17 | 現行形式の提出物は、影響範囲がトリアージプロセスに入るほどではない。この種の問題は明確に範囲外とされている |
| 2025-12-16 | 2026-01-27 | 当初はP2(高危険)と判断。後に格下げしてクローズ:ユーザーへの顕著な害は引き起こせないと判断し、ソーシャルエンジニアリングへの依存度が高いと判断 | |
| Perplexity | 2025-12-14 | 2025-12-17 | これは大規模言語モデルが外部Webコンテンツを処理する際の既知の限界であり、自社システムのセキュリティ制御の欠陥ではない |
| xAI | 2025-12-16 | 2025-12-17 | モデルの問題は本プロジェクトの範囲外 |
2025年12月のテストからすでに7ヶ月以上が経過しました。当サイトは、他の企業がこっそり修正したかどうかについて、公開情報を確認できません。確認できるのはただ一つ、デモページとフォントファイルは今もオンラインであり、プレーンテキストで取得しても、やはり二次創作小説と文字化けしか見えないということです。
LayerXが示す対策:レンダリング後にコードと比較、フォントも攻撃面として検査
レポートはベンダー向けに4つの検出方法を提案し、さらに発言のトーンに関する1つの要件を加えています。
1番目が4つの中で最も具体的です。一方の経路はコード内のテキストのみを取得し、もう一方はフォントを適用して完全にレンダリングし、レンダリング後に見える文字を抽出して、両者の差分を比較します。この方法は攻撃手法に関する事前知識に依存しません。フォント、透明度、画面外配置など、人間が見えるものとコードに書かれているものが一致しなければ、それを報告できます。
5番目はアシスタントの話し方に関する要件です。ページのレンダリング、カスタムフォントの分析、視覚情報とコードの比較の3つができないなら、「このページは安全です」といった発言をすべきではない、というものです。このケースに関して言えば、最後のこの1文を変えることは、前述の4つの対策を実施するよりはるかに安上がりです。
WebページはHTMLだけではありません。意味はレンダリングパイプラインに移すことができます。テキストだけを分析するシステムは、生まれつき盲目なのです。
LayerX レポート結語(当サイト訳)
同じWebページ、人間の目にはPCを明け渡すコマンド、AIにはゲームの二次創作小説
ブラウザセキュリティ企業LayerXがカスタムフォントと数行のCSSで主要AIアシスタント11製品を騙した手口を、図解で1ページにまとめました
↓ 1ページで完結 · 動く図あり
あなたが見知らぬWebページを開き、AIに「このページは安全?」と尋ねます。AIは「安全です。脅威は見つかりません」と回答。しかし、あなたの画面には、ターミナルを開いて手入力するよう促すコマンドが表示されています。実行すれば、相手はあなたのPC上で何でも実行できるようになります(専門用語でリバースシェル:あなたから接続しに行く=自分でドアを開けて鍵を渡すようなもの)。
+ 解読不能な文字化け
→ 「このページは安全です」
open your terminal
and type bash …
→ 実行したらPCを明け渡す
同じURL、同じファイル。LayerXは2025年12月、このデモページで11種類のアシスタントをテストしました:ChatGPT、Claude、Copilot、Gemini、Grok、Perplexity、Leo、Sigma、Dia、Fellou、Genspark。どれも見破れず、問題発見に特化した質問でも結果は同じでした。
ページ全体で20行未満。JavaScriptは1行もなく、ブラウザの脆弱性も利用していません。ブラウザのスクリプトを完全に無効にしても、このページは問題なく騙せます。
当サイトはデモページのフォントファイルをダウンロードし、テーブルを1つずつ読み、それを使って文字化けを再レンダリングしました。結論は一つ、予想外のことでした。最も簡単に思える検査方法では、ここでは何も検出できないのです。
テスト対象アシスタント、全て「ページは安全」と判定
文字対応表の異常(当サイト検証)
4行の文字化け全てを1文字ずつ照合、矛盾ゼロ
攻撃に使用されたJavaScript
この偽装には迂回できない綻びがあります。画面上でそのコマンド行を選択してコピーを押すと、クリップボードに入るのはコード上の元の文字、つまりあの文字化けです。ブラウザがコピーするのは文字そのものであり、グリフがどのように描画されるかとは無関係です。そのため、このデモページはあなたに手入力を強制します。ページ上の動詞はtypeで、全文のどこにもcopyはありません。
- コピペして見比べる:不一致なら疑う
- リーダーモード、またはカスタムフォント無効化:システムフォントに置き換われば、そのテキストは文字化けに戻る
- 見知らぬページが指示するコマンドは手入力しない
- AIの「安全」という判断を唯一の基準にしない:そもそも画面上のその行を見ていない可能性がある(これはLayerXとBleepingComputerがユーザーに推奨していること。他の3つは当サイトが検証済みのメカニズムに基づいて導き出したもの)
LayerXは2025年12月にこの発見を各社へ報告しました。6社は最終的に修正せず、理由はそれぞれ異なります。
| ベンダー | 結果 | 説明 |
|---|---|---|
| Microsoft | 修正済み | 7社中唯一完全に修正。自社のセキュリティレスポンスセンターでケースを起票 |
| Anthropic | クローズ | 「ソーシャルエンジニアリング(詐欺)」とモデル応答コンテンツの問題は受理範囲外 |
| Dia | クローズ | プロジェクトポリシーによりプロンプトインジェクション問題は不受理 |
| OpenAI | クローズ | 影響範囲がトリアージプロセスに入るほどではない。この種の問題は範囲外と明記 |
| 高危険→格下げ | 初めはP2高危険と判断。2026-01-27に格下げ・クローズ:ユーザーへの顕著な害は引き起こせず、詐欺への依存度が高いと判断 | |
| Perplexity | クローズ | 大規模言語モデルが外部Webコンテンツを処理する際の既知の限界であり、自社のセキュリティ制御の欠陥ではない |
| xAI | クローズ | モデルの問題は本プロジェクトの範囲外 |
日付と説明はLayerXレポートの開示スケジュールからの引用です。アシスタントのテストは2025年12月に完了し、すべてLayerXの自己テストであり、第三者による再現はまだありません。LayerXはブラウザセキュリティ製品を販売しているため、事態をより深刻に語る動機がありますが、攻撃自体は当サイトが再現しました。2026年7月30日時点で、デモページとフォントファイルは依然としてオンラインであり、プレーンテキストで取得しても、やはり二次創作小説と文字化けしか見えません。他の企業がこっそり修正したかどうかは、公開情報では確認できません。
open your terminal
and type bash …
このコマンドを実行したらPCを明け渡すことになる。実行しないこと
ターミナル開けって
1pxに縮小
黒字に黒背景
AIは読める
コード上では文字化け
PjwUgARrhj…
文字の描画が
すり替わっている
文字化けが人の言葉に
コード内のテキストを読む
- × フォントファイルを読まない
- × 文字がどんな形状か計算しない
- × 画面の結果を見ない
見えてないんだ
CSSを適用、小説を隠す
フォントをDL、文字を再描画
=自分でドアを開けて鍵を渡す
「文字aの描画はどれか」を管理
- × これは詐欺、受理範囲外
- × 影響範囲が不十分、トリアージ不可
- × 大規模言語モデルが外部Webを読む際の既知の限界
- × Googleは高危険と判断後、格下げ・クローズ
あなたが見るのはブラウザの描画結果
