紧急警报:Notepad++ DLL劫持漏洞可导致恶意代码执行(立即修补)
作者:CyberDudeBivash • 2025年9月29日 • 紧急安全指令
这是一条面向数百万依赖Notepad++的开发者、系统管理员和高级用户的紧急安全警报。这款流行的文本编辑器中发现了一个高危的DLL劫持漏洞,可导致攻击者实现任意代码执行。攻击方式看似简单却极为有效:攻击者诱骗用户从一个精心构造的文件夹中打开一个完全无害的文件(如 .txt 或 .log),即可让Notepad++加载恶意库,从而完全攻陷用户的工作站。Notepad++团队已发布紧急安全补丁,必须立即安装。
第1章:威胁分析——解构DLL劫持漏洞
该漏洞是应用程序如何滥用Windows搜索程序库的标准方式而被诱骗加载恶意代码的典型案例。
什么是DLL以及Windows如何找到它?
DLL(动态链接库)是一个包含代码和数据的文件,可被多个程序同时使用。当你启动Notepad++等应用程序时,它需要加载数十个DLL才能正常运行。
当应用程序尝试加载一个DLL但没有指定完整的绝对路径时(例如,只请求 uxtheme.dll 而不是 C:\Windows\System32\uxtheme.dll),Windows会开始一个搜索过程。关键的是,它首先查找的位置之一就是应用程序自己被加载的同一目录。
漏洞解释(CVE-2025-45222)
该漏洞之所以存在,是因为有漏洞版本的Notepad++尝试仅使用名称加载合法的系统DLL(例如主题或辅助功能库),而未指定其完整路径。
这造成了一个攻击者可以利用的竞争条件。如果攻击者能够将自己构造的、与合法DLL同名的恶意DLL放置在Windows会优先搜索的位置,应用程序就会加载并执行攻击者的代码而不是真正的库。这就是DLL劫持。
第2章:攻击链——从ZIP文件到完全失陷
利用此漏洞最常见的方式是通过电子邮件或网络下载传递恶意压缩包。
- 阶段1:诱饵。 攻击者向目标(可能是开发者或系统管理员)发送鱼叉式钓鱼邮件,邮件中包含一个ZIP文件(例如
server_logs.zip)和类似“请查看这些紧急日志”的消息。 - 阶段2:偷梁换柱。 用户下载并解压文件。在文件夹内,用户看到了预期的文件:
webserver.log。然而,隐藏在同一个文件夹中的是攻击者的恶意DLL,伪装成合法的Windows库,例如uxtheme.dll。 - 阶段3:劫持。 用户双击
webserver.log文件。由于.log文件通常与Notepad++关联,存在漏洞的应用程序启动并打开该文件。 - 阶段4:执行。 当Notepad++启动时,它需要为UI加载真正的
uxtheme.dll。由于未指定完整路径,Windows开始搜索DLL。它首先检查当前目录,找到位于日志文件旁边的攻击者恶意uxtheme.dll,并将其加载到Notepad++进程中。 - 阶段5:失陷。 攻击者的代码现在以用户的完整权限在用户机器上运行。该代码可以安装后门、窃取浏览器密码和会话令牌,或者作为针对企业网络的勒索软件攻击的初始立足点。
用户只看到他们的日志文件正常打开,完全不知道自己的机器刚刚被一个受信任的应用程序攻陷。
第3章:立即修复与威胁搜寻计划
这是面向所有用户和IT管理员的战术清单。
步骤1(立即):修补Notepad++
唯一的永久修复方法是更新你的应用程序。Notepad++开发者已发布修补版本,该版本使用绝对路径正确加载所有DLL,完全关闭了此攻击向量。
操作: 前往Notepad++官方网站 (notepad-plus-plus.org) 下载最新版本。对于企业管理员,请立即使用软件部署工具将此更新推送到所有工作站。
步骤2(紧急):搜寻失陷迹象
你必须在你的环境中搜寻此技术被使用的迹象。这是对异常行为的搜寻。
-
确凿证据:异常的的子进程。
notepad++.exe进程是一个文本编辑器。它绝不应成为命令shell、脚本引擎或网络工具的父进程。概念性EDR查询:
// 搜寻Notepad++生成可疑子进程 DeviceProcessEvents | where InitiatingProcessFileName =~ "notepad++.exe" and FileName in ("powershell.exe", "cmd.exe", "wscript.exe", "cscript.exe", "rundll32.exe", "curl.exe", "wget.exe")找到此进程链是失陷的明确迹象。
-
搜寻网络连接:
notepad++.exe进程绝不应发起出站网络连接。监控你的代理和防火墙日志,查找源自此进程的任何流量。这是另一个高置信度的失陷指标。
第4章:战略性加固——开发者和系统管理员指南
此事件为编写代码的开发人员和管理系统的管理员提供了基础安全方面的深刻教训。
对于开发者:如何在自己的应用中防止DLL劫持
- 始终使用绝对路径: 加载库时,指定完整的绝对路径。这告诉Windows确切地在哪里找到正确的文件,并防止在不安全的位置进行搜索。
- 实现
SetDefaultDllDirectories: 在你的代码中,可以调用SetDefaultDllDirectories函数从DLL搜索路径中移除应用程序自己的目录,提供一个强大的缓解措施。 - 对应用程序进行数字签名: 对你的可执行文件和DLL进行签名。然后可以实现检查,确保应用程序加载的任何DLL都具有与公司证书匹配的有效签名。
对于系统管理员:加固环境
- 应用程序控制: 使用Windows Defender应用程序控制或AppLocker等工具创建策略,防止应用程序从用户可写的位置(如
Downloads文件夹)加载DLL。 - 攻击面减少(ASR): 启用阻止从USB驱动器运行的不可信和未签名进程的ASR规则。
第5章:关于DLL劫持的扩展FAQ
问:这会影响Notepad++的便携版吗?
答:会。实际上,便携式应用程序通常更容易受到此类攻击,因为其整个目录(包括可执行文件及其库)都位于用户可写的位置,例如 Downloads 文件夹或USB驱动器中。
问:这是Windows的漏洞还是Notepad++的漏洞? 答:这是Notepad++应用程序的漏洞。虽然Windows DLL搜索顺序是众所周知的行为,但安全编码最佳实践要求开发者通过为库加载指定完整路径来考虑这一点。修补后的Notepad++版本纠正了这一点。
问:我在Linux上通过Wine/Proton使用Notepad++。我有风险吗? 答:风险可能较低,因为底层的DLL加载机制不同。然而,Wine环境确实试图复制Windows DLL搜索顺序,因此类似的攻击可能发生。无论操作系统如何,最安全的做法是更新你的Notepad++安装。 CSD0tFqvECLokhw9aBeRqsAhlXRiKzqRIV45mkEUWJb1xMXn8j4RvSgsO7IESJLA/ddZdiQmz85GhY6w5NELKI4i2s7m+ExUJgveTSL2AAYW+PTD4VQ6WQpDSz82rOTpgZis27F29qTX7IgcRVnb8IiF+SEBqD0ZKHHZfbOjp219vnfVSw71VSr8BAVbJbtM