微软无声修补CVE-2025-9491 - 我们认为我们的补丁提供了更高的安全性
修补“所见”与修补“所执行”之辨
摘要:趋势科技发现攻击者长期使用一种技巧来隐藏Windows快捷方式的真实执行命令,导致用户无法看到恶意指令。微软起初认定此问题无需修补。随后,其他人发现此技巧仍在被利用,问题因此获得了CVE编号。微软坚持原有立场,但最终无声地修补了此问题,使得恶意命令无法再被隐藏。我们则创建了一个不同的补丁,旨在实际阻断已发现的攻击。
故事——至少是其公开部分——始于2025年3月18日。当天,趋势科技发布了安全公告ZDI-25-148以及一篇题为《Windows快捷方式漏洞在广泛的APT活动中被零日利用》的相关文章。这篇文章由Peter Girnus和Aliakbar Zahravi撰写,描述了他们如何观察到近千个恶意Windows快捷方式(.lnk)文件被用于可追溯到2017年的各种攻击活动中。这些快捷方式文件经过精心构造,以至于在Windows中查看其属性时,用户无法看到快捷方式将执行的完整命令。这个技巧是个老把戏:利用各种“空白”字符将命令的恶意部分移出用户的视线。
例如,文章展示了Windows 11如何显示一个快捷方式文件的属性,其目标类似这样:
conhost.exe<265个空格>calc.exe
(图片借自趋势科技的文章)
如您所见,“目标”字段仅显示空格字符(被选中,因此呈蓝色),即使左右滚动也无法显示末尾的“calc.exe”,或者可能存在的任何其他恶意命令。除了空格字符,也可以使用各种其他字符来达到类似效果。
正如Peter和Aliakbar所解释的那样,微软已收到关于此问题的通知,但认为它未达到需要服务修复的标准。换句话说,他们不认为这是一个值得修补的漏洞。
此时我们必须承认,我们(也?)在四月份误解了趋势科技所提出的问题。我们当时认为问题只是:用空格填充恶意命令会导致对话框不显示恶意命令,因为对话框总是显示命令的末尾——而用空格填充后,末尾就全是空格。我们认为这有点愚蠢,因为用户总是可以滚动回字段的开头查看所有内容——并且我们发现微软决定不修复此问题是合理的,尽管该技巧实际上已被用于恶意活动中。
毕竟,能做什么呢?不能禁止在命令字符串中使用空白字符,而且如果属性对话框显示目标的开头而不是末尾,恶意代码就可以被隐藏在后面。
除了这些技术细节,还有一个社会工程学的角度:什么样的用户会收到一个看起来像PDF的Windows快捷方式文件,检查其属性,看到类似“powershell.exe”的内容(不含隐藏的恶意参数),并据此仍然决定双击它?我们认为,大多数用户要么是非IT人员,根本不会查看属性;要么是稍有IT知识的人,可能会因为看到某些脚本而感到担忧,很可能还会在“目标”字段中左右滚动以查看全部内容。
基于此推理,我们也决定不修补此问题。
案子结了。
直到十月底,情况才发生变化。当时Arctic Wolf发表了一篇题为《UNC6384利用ZDI-CAN-25373漏洞向匈牙利和比利时外交实体部署PlugX》的文章。UNC6384是一个与中国有关联的威胁行为者的代号,而ZDI-CAN-25373是趋势科技对此问题使用的工作ID。
Arctic Wolf发现威胁行为者UNC6384在2025年9月和10月期间,针对匈牙利和比利时外交实体发起了一场专门的活动——利用了所述的Windows快捷方式漏洞。这一发现重新引起了人们对这个问题的关注,此时它已被分配了CVE-2025-9491编号。媒体对微软尚未修补这个在野被利用的漏洞施压,但微软在题为《微软关于CVE-2025-9491 Windows LNK文件UI行为的指导》的公告中重申了立场。
在该公告中,微软声称“在用户体验过程中,用户多次收到警告,提示继续操作可能有害。”
现在,对于实际攻击中可能只出现一次的警告来说,“多次”有点夸大其词。但事实是,如果用户从互联网下载一个.lnk文件(它必须打包在ZIP压缩包中,因为浏览器为了保护用户会故意篡改其文件名),它将带有“网络标记”(Mark of the Web),双击时会警告用户正在打开一个来自互联网的可能有害的文件。也就是说,除非攻击者知道某种能绕过“网络标记”的漏洞。
该公告总结道:“由于涉及用户交互,以及系统已经警告用户此格式不受信任,微软不认为这是一个漏洞。”
基于我们当时对此问题的理解阅读了此公告后,我们仍然同意微软的结论。
但我们又重新审视了。最终看到了问题的真正所在:这不仅仅是恶意内容滑出“目标”字段默认焦点区域的问题。实际上,.lnk文件结构允许“目标”参数是一个很长的字符串(数万个字符),但属性对话框只显示前260个字符,并默默地截断其余部分。
因此,可以构造一个运行一个非常长的PowerShell或BAT脚本的.lnk文件,但查看其属性的用户只能看到该脚本的前260个字符。而这些字符大部分可以是“空白”字符,从而将有趣的部分完全推出“目标”字段——即使用户滚动到最末端。
现在这变得更有趣了:这变成了对用户界面信任的问题。Windows显示给你的字符串——并非将要实际执行的完整字符串。即使你是IT人员,你也可能被这个问题欺骗,因为你理所当然地期望用户界面值得信赖,能向你展示完整的命令。
这看起来确实值得修补,因此我们决定更深入地分析此问题,以便提出一个好的补丁方案。
就在我们开发自己的补丁时,11月的“补丁星期二”带来了新的Windows更新。正如预期那样(“微软不认为这是一个漏洞”),在其修复的63个漏洞中,没有任何与此问题相关的提及。
然而…
微软的补丁
然而,我们注意到11月的Windows更新确实带来了一些变化:现在,.lnk文件的属性对话框会显示带有参数的完整“目标”命令,无论它有多长。理论上最长可达32K字符的字符串,现在显示在同一个单行字段中,即使一个中等大小的命令也无法在不选中部分文本并左右移动鼠标的情况下完全显示。但好吧,至少用户可以选择全部、复制并将字符串粘贴到文本编辑器中。
这个问题显然从漏洞降级为功能性错误,被无声地修复,没有发布公告,用户界面的信任得以恢复。
可以说,如果将问题定义为“属性对话框并不总是精确显示将要执行的内容”,那么它确实得到了解决。但这种方法很奇怪:因为一直以来,创建或修改Windows快捷方式的“常规”方式(通过资源管理器用户界面)只允许在“目标”字段中输入最多260个字符。使此字符串更长的唯一方法是通过编程方式创建快捷方式,例如使用Windows API。(并且某些应用程序可能会为其自身使用创建此类合法的快捷方式。)那么,在一个小字段中显示所有“目标”字符,对于实际攻击中的受害者而言,能多大程度地提高他们避免受害的几率?
我们的补丁
我们决定走一条不同的路:我们的前提是,普通Windows用户遇到的合法非恶意.lnk文件通常是手动创建的,因此其“目标”永远不会超过260个字符。然而,我们仍然承认“目标”超过260个字符的快捷方式文件可能是有效的,只是不意味着让用户手动打开。因此,我们的补丁具有以下逻辑:
如果打开.lnk文件的进程是Windows资源管理器,并且“目标”超过260个字符,那么我们会将“目标”在260个字符处截断,并警告用户一个可疑的.lnk文件已被缩短。
我们的补丁将能阻断趋势科技识别的1000多个恶意快捷方式,影响所有目标用户;而微软的补丁只允许这些用户中最谨慎的那些人(他们可能无论如何也不会启动此类快捷方式)看到完整的恶意命令字符串。尽管恶意快捷方式可以构造为少于260个字符,但我们相信,破坏在野外实际检测到的攻击,对于被攻击目标来说意义重大。
让我们看看我们的补丁如何运作。在下面的视频中,您可以看到一个看起来像PDF文档的快捷方式文件,其“目标”在属性对话框中无法完全显示,而十六进制编辑器则揭示了其全部内容。禁用0patch时启动它会生成计算器(该命令在属性对话框中被隐藏),但启用0patch后启动它,会触发安全通知,并且只执行快捷方式“目标”的前260个字符。
微补丁可用性
微补丁已为以下安全适配的Windows版本编写:
- Windows 11 v22H2 - 完全更新
- Windows 11 v21H2 - 完全更新
- Windows 10 v22H2 - 完全更新
- Windows 10 v21H2 - 完全更新
- Windows 10 v21H1 - 完全更新
- Windows 10 v20H2 - 完全更新
- Windows 10 v2004 - 完全更新
- Windows 10 v1909 - 完全更新
- Windows 10 v1809 - 完全更新
- Windows 10 v1803 - 完全更新
- Windows 7 - 完全更新(无ESU,或ESU 1、2、3)
- Windows Server 2008 R2 - 完全更新(无ESU,或ESU 1、2、3、4)
- Windows Server 2012 - 完全更新(无ESU,或ESU 1)
- Windows Server 2012 R2 - 完全更新(无ESU,或ESU 1)
此外,还为以下仍受支持的完全更新的Windows Server版本编写了补丁,这些版本出于某种原因未收到微软的补丁(请注意,Server 2025不知何故收到了补丁):
- Windows Server 2016
- Windows Server 2019
- Windows Server 2022
我们要感谢趋势科技的Peter Girnus和Aliakbar Zahravi分享细节,使我们能为用户创建补丁。
这些微补丁已经分发给所有受影响的在线计算机(使用PRO或企业账户的0patch Agent),并已应用(除非企业组设置阻止了此操作)。此类漏洞会定期被发现,攻击者对此心知肚明。如果您使用的Windows不再接收官方安全更新,0patch将确保这些漏洞不会被在您的计算机上利用——您甚至无需知道或操心这些事。如果您是0patch的新用户,请在0patch Central创建一个免费账户,开始免费试用,然后安装并注册0patch Agent。其他一切都会自动完成。无需重启计算机。
您是否知道0patch在去年10月Windows 10及Office 2016和2019停止支持后,对它们进行了安全适配,允许您继续使用它们至少3年(Windows 10为5年)?点击这里和这里了解更多。
欲了解更多关于0patch的信息,请访问我们的帮助中心。