对抗知识焦虑,从看懂这条开始
App 下载对抗知识焦虑,从看懂这条开始
App 下载
特殊字符攻击|远程命令执行漏洞|SSH集成功能|iTerm2|网络安全|前沿科技
想象你在macOS上打开常用的iTerm2终端,下载了一个开源项目后,习惯性输入cat readme.txt想看看说明——这是每个开发者、运维人员都做过成百上千次的动作,没人会觉得有问题。但2024年3月,安全研究者发现,就这么一个普通到不能再普通的操作,竟能让你的终端悄悄执行黑客预设的任意代码。
更离谱的是,这个漏洞在iTerm2里潜伏了至少7年,影响所有启用SSH集成功能的用户。问题出在iTerm2为了优化远程SSH体验而设计的一套隐形协议——这套本该只在合法远程会话里生效的规则,竟会被普通文本文件里的特殊字符欺骗,把黑客的指令当成合法命令执行。
要理解这个漏洞,得先搞懂iTerm2的SSH集成功能到底在做什么。
你可以把终端和远程服务器的连接,想象成两个人隔着一根管子聊天——普通SSH就是纯靠吼,终端只管把你敲的字传过去,服务器只管把输出传回来,两边都不知道对方在做什么复杂操作。但iTerm2想让这个聊天更智能:比如你在远程服务器切目录,本地终端的标签页能自动显示新路径;你想传文件,不用单独开SFTP,直接拖就行。

为了实现这个功能,iTerm2会在你发起远程连接时,偷偷在服务器上跑一个叫conductor的小脚本。这个脚本就像个翻译,它会把远程服务器的状态——比如你用的是什么shell、当前在哪个目录——用特殊的「终端转义序列」包装起来,通过同一个聊天管子发回给iTerm2。这些转义序列是终端领域的「暗语」,比如<a class="wiki-keyword" data-keyword="DCS 2000p" href="#">DCS 2000p</a>是打招呼的信号,OSC 135是传递具体信息的格式,它们不会在屏幕上显示,但iTerm2能精准识别。

正常情况下,只有iTerm2自己部署的conductor脚本会发这些暗语。但问题来了:iTerm2没有验证这些暗语的来源——它默认信任所有从管子里传过来的内容,不管是合法的conductor,还是黑客精心伪造的文本。
当你用cat命令读取一个恶意文件时,文件里的内容会原封不动地通过管子传给iTerm2。黑客要做的,就是在这个文件里提前写好全套「暗语剧本」。
第一步,文件开头先放一个DCS 2000p信号——相当于对着iTerm2喊「我是conductor,咱们开始聊」。iTerm2一看到这个信号,就会立刻启动SSH集成的工作流程:先问「你用的是什么shell?」,再问「服务器上有没有Python?」。
这时候,文件里提前写好的OSC 135格式的回复就会生效:它会假装conductor回答「我用的是bash」,再回答「没有Python」。等这两步走完,iTerm2就会觉得「远程环境已经就绪」,接下来要做的就是生成一个run命令,把你可能需要的操作打包发过去。
最关键的一步来了:黑客在最初的DCS 2000p信号里,偷偷加了一个叫sshargs的参数。iTerm2生成run命令时,会把这个参数的内容拼进去,然后用Base64编码后发送到管子里。在正常的远程会话里,这个编码后的内容会被conductor脚本解码执行,但现在远程根本没有conductor——编码后的内容直接落到了本地shell手里。
黑客早就算好了编码后的结果:最后一段恰好是一个本地存在的可执行文件路径。当本地shell读到这段内容时,就会乖乖地执行那个恶意文件。
整个过程里,你看到的只是终端显示了readme.txt的内容,但后台已经完成了一套完整的「请求-响应」流程,黑客的代码就这么悄无声息地跑了起来。
这个漏洞被发现后,iTerm2的开发者在2024年3月31日就发布了修复补丁,核心就是给那些「暗语」加了验证——只有真正由iTerm2部署的conductor脚本发来的消息,才会被处理。但这个漏洞暴露出的问题,远不止一个补丁能解决。
终端转义序列已经存在了几十年,它本来是为了让终端能实现颜色、光标移动等功能而设计的,但现在却成了黑客的攻击工具。除了iTerm2,xterm、Windows Terminal等主流终端都曾曝出类似的转义序列漏洞:比如通过特殊字符修改终端标题、窃取剪贴板内容,甚至直接执行命令。

更麻烦的是,这些转义序列几乎是「合法」的——终端为了兼容老程序,不能随便禁用这些功能。这就相当于你家的大门,不仅你自己有钥匙,任何拿着特定形状铁片的人都能打开,你还不能把门锁换了,因为老家具得从这门搬进来。
对用户来说,最直接的防护就是「别随便读陌生文件」,但这显然不符合开发者的工作习惯。真正的解决之道,得从协议设计的源头入手:给这些「暗语」加上身份验证,让终端能分清「自己人」和「陌生人」的消息。但这又涉及到兼容性和开发成本的平衡,不是一朝一夕能完成的。
当我们为了便利不断给工具叠加功能时,往往会忽略最基础的安全边界——就像iTerm2的SSH集成,本来是为了让远程操作更顺畅,却因为信任了不该信任的内容,变成了黑客的突破口。
这个漏洞最让人警醒的地方,不在于它的技术有多复杂,而在于它打破了我们的一个固有认知:「读文件」这种最基础、最被认为是「安全」的操作,竟然也能成为攻击入口。在终端这个看似简单的界面背后,藏着一套复杂到难以想象的规则,任何一个小小的信任失误,都可能引发连锁反应。
便利与安全的平衡,从来不是一道选择题。