notepad++堆缓冲区溢出漏洞CVE-2023-40031分析与复现
发布网友
发布时间:2024-10-24 17:21
我来回答
共1个回答
热心网友
时间:2024-11-04 02:00
Notepad++,这款备受推崇的开源代码编辑器,近期曝出了一处高危漏洞CVE-2023-40031,得分为7.8分(CVSS3)。漏洞焦点在于Utf8_16_Read::convert函数,其在执行UTF-16到UTF-8转换时,错误估计了转换后缓冲区的大小,导致缓冲区外内存被非法覆盖,可能导致代码执行权限的滥用。此漏洞影响了Notepad++版本<=8.5.6,复现环境为Win7 SP1,使用IDA、WinDbg和OLLYDBG等工具可验证。
安全研究人员通过Python生成PoC(Proof-of-Concept)文件,尝试在8.5.2版本的Notepad++中打开,虽然程序未崩溃,但溢出数据可能未触发明显异常。借助Windbg调试工具,可以看到在堆检查中,当打开PoC文件时,堆溢出在地址0x17F4AFF8,溢出点在HeapFree函数中,内存已受损。
源码的可读性使得安全专家能够利用AddressSanitizer技术定位问题,最终发现溢出发生在Utf8_16_Read::convert的特定代码行。函数首先申请大小为len的缓冲区,然后尝试复制UTF-16数据,关键在于每次读取文件内容时,大小计算错误导致溢出。例如,第一次读取0x20004字节,第二次读取时,由于未清除上一次读取的内容,导致新缓冲区大小计算错误,从而引发溢出。
总的来说,当文件内容编码为奇数时,且在UTF-16到UTF-8转换过程中,计算错误可能导致一个字节的溢出。虽然off-by-one漏洞通常难以直接利用,但需要额外技巧结合其他漏洞利用技术,如内存泄漏或数据覆盖,以实现代码执行控制(RCE)。更多详细信息可参考github.com/webraybtl/CV...链接。