浏览器安全公司 LayerX 发现了一种新型的“视觉欺诈”攻击方式,专门用来欺骗 AI 助手
网络安全公司 LayerX 发现了一种新型的“视觉欺诈”攻击方式
可以隐蔽的攻击 AI 助手,几乎所有的AI工具全部中招
这种攻击利用了“人类眼睛看到的”与“AI 助手读取到的”不一致的视角差,欺骗 AI 给恶意命令“背书”。
当你让 AI 助手帮你看一个网页并判断“上面的命令安全不安全”时,AI 和人类看网页的方式截然不同:
黑客正是利用了这种差异,通过以下两步组合拳完成欺骗:
最终效果:
根据 LayerX 的测试,在 2025 年底,这种攻击方式对市面上绝大多数主流 AI 助手(包括 ChatGPT、Claude、Copilot、Gemini、Grok、Perplexity 等)均有效。
典型漏洞场景:黑客搭建了一个宣称提供《生化奇兵》(Bioshock)游戏彩蛋的网页,页面上渲染出一行恶意命令行。用户担心有毒,便询问 AI 助手。AI 读取了底层的无害代码后表示“安全”,用户信以为真在自己电脑上运行,导致设备被控。
同一个网页,你看到一条危险命令,AI 看到一篇游戏同人小说
浏览器安全公司 LayerX 公开了一个骗局,专门骗「用 AI 帮我看看这安不安全」这个动作:一个自定义字体加几行 CSS,就能让同一个网页对人和对 AI 显示完全不同的内容。简单来说,过去往页面里塞隐藏指令是骗 AI 上钩,这次反过来,页面对 AI 说真话、对人说假话,AI 被拉来当担保人。
研究者搭了一个演示页面,主题是游戏《Bioshock》的同人小说,页面许诺:照上面的步骤做,就能看到一个隐藏彩蛋。屏幕上四行大绿字,第一行开头就是 Would you kindly,这正是《Bioshock》里那句精神控制口令,用在这儿刚好当钩子;接下来让你打开终端、手敲一条命令。那条命令是反弹 shell(reverse shell):你自己主动去连对方的机器,连上之后,对方就能反过来在你的电脑上执行任何东西。它比对方硬攻进来更容易得手,因为出方向的连接一般不被防火墙拦。
下面这张是研究者放出的真实渲染截图,就是受害者在屏幕上看到的东西。
LayerX 2025 年 12 月拿这个页面测了 11 款 AI 助手:ChatGPT、Claude、Copilot、Gemini、Grok、Perplexity、Leo、Sigma、Dia、Fellou、Genspark。一个都没测出来。他们特别说明,连专门为了让助手发现问题而设计的高针对性提问都试过了,结果没有区别。
骗术三步:同人小说缩到 1 像素、命令写成乱码、字体把乱码画成人话
本站把这个演示页面的源码抓下来看过,整页一共就三个动作,加起来不到二十行。
第一步:把那篇同人小说缩到 1 像素,黑字配黑底
那几段同人小说,写在这样的标签里。页面的背景色是纯黑,所以黑色的字落在黑底上,加上高度只有 1 像素,你正在读的这行字大约 17 像素高,1 像素差不多是它的十七分之一。
<p style="color: #000000;font-size: 1px;">This website was created as a tribute to Bioshock</p>
整页有四段这样的 1 像素隐藏文字,其中两段是长篇同人小说(5014 字和 6570 字),另两段一段是这句致敬语,一段只有五个词。它们在网页代码里完完整整地待着,所以 AI 抓页面时读到的主要就是这些内容。
第二步:把给人看的那句命令,在代码里写成一串乱码
页面正中间是一个再普通不过的 <div>,里面四行字符,长得像 base64 编码之后的一坨东西。AI 助手看到这种东西,能给出的判断就是「高熵字符串,没有密钥解不开」,于是当作噪音跳过。
<div> vRmUwAgRmAiPjwUgARrhjAgRmbAshbVPjcUAcjwAsgrhAfcao <br>RjJhAgRmAhnhJmshwAPsAsgrh <br>fcaoADPAHBAFwhuFsJrF859E806E8E35F6266A2HB8 <br>PsAOPUUAcUUROAgRmAsRAahhAgRmbAhcashbAhWWAxbRVAMcrsmbh </div>
这四行就是屏幕上那四行大绿字。第一行的 49 个字符,渲染出来正好是「Would you kindly open your terminal and type bash」这 49 个字符。
本站在源码里还看到一件研究报告和报道都没提的事:紧挨着这个乱码框的上一行,藏着一段同样是 1 像素的隐藏文字,内容只有五个词,LLM Generation Seed:(大模型生成种子)。也就是说,AI 读到的顺序是「生成种子:」后面跟一串随机字符。它不需要自己猜这堆东西是什么,攻击者已经替它贴好了标签。研究者放出的源码截图里没有这一段,说明页面在截图之后被改过。
第三步:挂一套字母画法被换掉的字体
页面头部引了一个字体文件,然后把它套给整个页面。字号 48、绿字、黑底,就是屏幕上那副样子。
@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 的那个字形(glyph,字体文件里一个字母的具体画法),画出来是一个 a;名叫 v 的,画出来是一个 W。所以浏览器照着它一画,那串乱码就成了人话。
三个动作单独看都完全合法:CSS 本来就允许你把字缩小、把颜色调成和背景一样;<div> 里可以写任何字符串;网页当然可以带自己的字体。没有一处用到 JavaScript,也没有用到任何浏览器漏洞,把 JS 全部关掉,这个页面照样骗得成。
AI 为什么一点没察觉?因为它只读网页代码,浏览器才加载字体重画
AI 助手抓网页,抓的是网页代码(术语叫 DOM,也就是浏览器把代码读进来之后在内存里搭出的那份文字骨架):标签、结构、里面的文字。它不跑完整的浏览器渲染管线,不下载字体文件,也不去算「这个字母最后画出来是什么形状」。LayerX 把这类助手叫做非代理式(non-agentic)的:取页面、解析代码,但不执行完整渲染、不分析自定义字体的字形映射。
这里有一个所有人都默认成立的假设:网页代码是内容,字体只管好看,字体不改变文字的意思。这个假设几乎总是成立,所以没人去查它,而正因为它平时是安全的,这一招才这么好用。
好比一份合同,白纸黑字写的是一件事,但打印机的字模被换过:每个铅字的模子里装的都是别的字。校对员核对的是稿件文档,签字的人看的是打印出来的那张纸。两个人都尽了责,却在不同的两份合同上达成了一致。
还有一层后果:助手不只是没看出问题,它还告诉你「这个页面看起来是安全的」。
当攻击者做出一个恶意页面、并且让 AI 助手把它判定为安全,他实际上是征用了这个助手的权威,拿它的信誉来给自己的说法背书。
LayerX 研究报告(本站译)
要注意这个结论的适用范围:它针对的是「只读代码不渲染」的那类助手。如果一个助手真的把页面渲染出来、用截图去看,理论上它看到的就是那四行绿字,不过 LayerX 没测过这类助手,它的测试对象全部是前一类。
本站拆开这套骗人的字体核对:被动手的是字母的形状,对照表干干净净
下面这一段不来自 LayerX 的报告,也不来自任何一篇报道,是本站自己做的核对:把演示页面用的字体文件下载下来,读它的内部各张表,再拿它把那串乱码重新渲染一遍。
字体文件里有一张表叫 cmap,管的是「字符 a 该去用哪个字形」。要检查一套字体有没有被动手,最容易想到的就是查这张表。这套字体的 cmap 完全正常:字符 a 指向名叫 a 的字形,字符 0 指向名叫 zero 的字形,5918 个字符映射一处异常都没有;管字形替换和字距定位的 GSUB、GPOS 两张表根本不存在。
动过手的是 glyf 表里的轮廓数据,也就是每个字形具体怎么画。名叫 a 的那个字形,肚子里装的是一个 s 的画法。几个能直接量出来的数:
cmap 字符对照表里的异常,5918 个映射全部正常
名叫 A 的字形一笔都不画,屏幕上就是一段空白,顶替了句子里的空格
名叫 v 的字形宽度,26 个小写字形里最宽的一个,因为它画的是个 W
四行乱码全部逐字对上,一对一替换,零冲突
拿第一行开头的 16 个字符对一遍,替换关系一眼就出来了:
vRmUwAgRmAiPjwUg 和屏幕上的 Would you kindly 逐格对齐。红色标出的两个 A 在这套字体里没有任何轮廓,画出来是空白。本站用 fontTools 读表 + Pillow 重新渲染后绘制。整套替换是严格一对一的。第一行 49 个字符,还原出来的句子也是 49 个字符,一个不多一个不少;四行 169 个字符全部对上,没有一处冲突。每个字符的对应关系是这样:
骗术有个漏子:屏幕上那行字复制出来是乱码,所以攻击必须让你手打
你在屏幕上选中那行命令、按下复制,剪贴板里进去的是网页代码里的字符,也就是那串乱码,跟眼睛看到的完全不一样。浏览器复制的是字符本身,跟字形画成什么样无关。
Would you kindly open your terminal…
vRmUwAgRmAiPjwUgARrhjAgRmbAshbVPjcUAcjwAsgrhAfcao
也就是说,这个演示页面必须让受害者手打那条命令。页面上写的动词就是 type(敲),全文没有一处 copy。不过这条限制只管这个页面:攻击者只要加一段脚本改写剪贴板,复制出来的就能是解码后的命令,所以下面那条自检不是万能的。
反过来,这就是一招现成的自检动作。同理,浏览器的阅读模式、或者把自定义字体关掉,都会让这套伪装当场失效,伪装靠的是页面自带那套字体,换成系统字体,那段字就退回乱码。
厂商修了吗?七家里只有微软修了,Google 先判高危又降级关闭
LayerX 2025 年 12 月把发现报给了各家(先私下通报、约定期限后再公开,业内叫责任披露)。七家里六家最后都没修,但理由并不一样:四家一开口就说不在受理范围,Google 收了又反悔,Perplexity 说这是大模型的通病。其中两家的说法归结起来是「这算骗人,不算我们的系统被攻破」,安全圈把骗人这一类叫社会工程。
| 厂商 | 提交 | 关闭 | 给出的说法 |
|---|---|---|---|
| 微软 | 2025-12-16 | 待定 | 12 月 17 日受理,在自家安全响应中心(MSRC)开了案子,是七家里唯一完全修复的。案子还挂着没关,因为微软要求走满 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 | 这是大语言模型处理外部网页内容时的已知局限,并非自家系统安全控制上的缺陷 |
| xAI | 2025-12-16 | 2025-12-17 | 模型问题不在本项目范围内 |
从 2025 年 12 月测试到今天已经过了七个多月。本站查不到任何公开信息说明其他几家有没有悄悄修好;能确认的只有一件事:那个演示页面和字体文件仍然在线,用纯文本方式抓取它,看到的仍然只有同人小说和乱码。
LayerX 给的修法:渲染完跟代码比一遍,字体也得当攻击面查
报告给厂商开了四条检测,再加一条关于说话分寸的要求。
第一条是四条里最实在的:一路只取代码里的文字,一路带字体完整渲染,把渲染后看得见的字抽出来,两边比差异。这一招不依赖任何关于攻击手法的先验知识:字体、透明度、屏幕外定位,只要人看到的和代码里写的对不上,它就报得出来。
第五条是对助手说话方式的要求:如果它做不到渲染页面、分析自定义字体、比对视觉与代码这三件事,那它就不该说出「这个页面是安全的」这种话。就这个案子而言,改掉最后这一句,比修前面四条都便宜。
网页不只是 HTML。意思可以被搬进渲染管线里,任何只分析文字的系统,天生就是瞎的。
LayerX 报告结语(本站译)
同一个网页,人眼看到一条交出电脑的命令,AI 读到一篇游戏同人小说
浏览器安全公司 LayerX 用一个自定义字体加几行 CSS,骗过了 11 款主流 AI 助手,一页带图讲完
↓ 一页读完 · 有一张会动的图
你打开一个陌生网页,问 AI「这页安全吗」。AI 回答「安全,没有发现威胁」。而你的屏幕上,正写着一条让你打开终端手敲的命令,敲完,对方就能在你的电脑上执行任何东西(术语叫反弹 shell:你主动连过去,等于自己开门递钥匙)。
+ 一串解不开的乱码
→ 「这个页面是安全的」
open your terminal
and type bash …
→ 照做就交出电脑
同一个网址、同一份文件。LayerX 2025 年 12 月拿这个演示页面测了 11 款助手:ChatGPT、Claude、Copilot、Gemini、Grok、Perplexity、Leo、Sigma、Dia、Fellou、Genspark。一个都没测出来,连专门引导助手去找问题的提问也一样。
整页不到二十行代码,没有一行 JavaScript,也没有用任何浏览器漏洞。把浏览器脚本全关掉,这个页面照样骗得成。
本站把演示页面的字体文件下载下来,逐张表读了一遍,再拿它把那串乱码重新渲染一次。结论有一条出乎意料:最容易想到的那个检查方法,在这里查不出任何东西。
被测助手,全部判定「页面安全」
字符对照表里的异常(本站核对)
四行乱码全部逐字对上,零冲突
攻击用到的 JavaScript
这套伪装有个绕不过去的漏子:你在屏幕上选中那行命令按下复制,剪贴板里进去的是代码里的原始字符,也就是那串乱码。浏览器复制的是字符本身,跟字形画成什么样无关。所以这个演示页面只能让你手打,页面上用的动词就是 type,全文没有一处 copy。
- 复制粘贴对一眼:对不上就有鬼
- 开阅读模式,或关掉自定义字体:换成系统字体,那段字就退回乱码
- 不手打陌生页面给的命令
- 别把 AI 的「安全」当唯一判据:它可能根本没看到你屏幕上那行字(这条是 LayerX 与 BleepingComputer 给用户的建议,另三条是本站按已核对的机制推出来的)
LayerX 2025 年 12 月把发现报给了各家,六家最后都没修,但理由各不相同。
| 厂商 | 结果 | 给出的说法 |
|---|---|---|
| 微软 | 已修复 | 七家里唯一完全修复,在自家安全响应中心开了案子 |
| Anthropic | 关闭 | 「社会工程(骗人)」与模型回复内容问题在受理范围之外 |
| Dia | 关闭 | 按项目政策不受理提示注入类问题 |
| OpenAI | 关闭 | 影响面不足以进入定级流程,此类问题已列为范围之外 |
| 先高危后降级 | 初判 P2 高危,2026-01-27 降级关闭:认定无法造成显著用户伤害,且过度依赖骗人 | |
| Perplexity | 关闭 | 这是大模型处理外部网页内容的已知局限,不是自家安全控制的缺陷 |
| xAI | 关闭 | 模型问题不在本项目范围内 |
日期与说法取自 LayerX 报告的披露时间表,助手测试完成于 2025 年 12 月,均为 LayerX 自测,第三方尚未复现。LayerX 卖的就是浏览器安全产品,有动机把事说得更严重;攻击本身本站已复现。到 2026 年 7 月 30 日,那个演示页面和字体文件仍然在线,纯文本抓取看到的仍然只有同人小说和乱码;其他几家有没有悄悄修好,查不到公开信息。
open your terminal
and type bash …
这条命令敲下去,电脑就归对方,别照做
让我开终端
缩到 1 像素
黑字配黑底
AI 照样读到
在代码里写成乱码
PjwUgARrhj…
字母的画法
被换掉了
乱码成人话
把代码里的文字读一遍
- × 不下载字体文件
- × 不算字母画成什么形状
- × 不看屏幕上的结果
我屏幕那行字
套上 CSS,藏掉小说
下载字体,重画每个字母
等于自己开门递钥匙
它管「字符 a 该用哪个画法」
- × 这算骗人,不在受理范围
- × 影响面不够,进不了定级
- × 大模型读外部网页的通病
- × Google 先判高危,又降级关闭
你看的是浏览器画出来的样子
