notepad++堆缓冲区溢出漏洞CVE-2023-40031分析与复现

news2024/11/26 19:40:39

漏洞概述

Notepad++ 是一款知名的开源代码编辑器,运行系统为Windows,支持多种编程语言。近日,安全研究人员针对 Notepad++进行检查,发现了不少安全漏洞。其中评分为 7.8 分(CVSS3,总分10分)的堆缓冲区溢出漏洞CVE-2023-40031,属于高危漏洞。该漏洞位于Utf8_16_Read::convert函数中,进行UTF-16 到 UTF-8 转换时,错误计算转换后的UTF-8堆缓冲区的大小,导致该缓冲区之外的内存空间被覆盖,可能导致任意代码执行。

影响范围

<=8.5.6

复现环境

操作系统:Win7 sp1

分析工具:IDA、WinDbg、OLLYDBG

漏洞复现

根据安全研究人员公开的报告(https://securitylab.github.com/advisories/GHSL-2023-092_Notepad__/),使用python生成poc文件,poc代码,如下图所示:

图片

安装8.5.2版本的notepad++程序(https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.5.2/npp.8.5.2.Installer.exe),安装完成后将生成的poc文件在notepad++程序中打开,但并未发生崩溃,可能是由于溢出后的数据并未影响程序的正常运行,如下图所示:

图片

使用Windbg调试工具中的组件gflags.exe,打开堆检查相关选项,如下图所示:

图片

然后重新打开notepad++程序,再使用Windbg调试工具附加后运行,最后在notepad++程序中打开生成poc文件。Windbg中立即捕获异常,在地址为0x17F4AFF8,大小为2个字节的堆中出现异常,异常的地址为0x17F4AFFA,已经超出了当前堆的地址范围,出现溢出,如下图所示:

图片

查看函数调用堆栈,发现该异常是发生在HeapFree函数中,也就是说在释放堆时该内存已被破坏。函数调用堆栈,如下图所示:

图片

漏洞分析

根据以上复现的情况,已经知道发生了堆溢出,但是还没有找到溢出的原因。一般可以根据函数调用堆栈,往上依次查找。不过这是开源软件,源码可下载自行编译,所以结合AddressSanitizer (ASan)技术,可以更为准确的定位溢出原因。在公开的poc报告中,已经使用该技术定位到溢出原因。溢出发生在Utf8_16_Read::convert函数中,如下图所示:

图片

初步分析,在该函数中第162行使用new申请堆缓冲区,大小是经过155行的len计算得来,175行向申请的缓冲区复制数据,溢出点可能是这里,如下图所示:

图片

使用IDA反编译notepad++.exe,再使用OLLYDBG动态调试,打开poc文件进行跟踪,详细分析该函数功能。经过一段时间的调试分析,可知notepad++每次从文件中读取指定大小的内容,这个大小是128 * 1024 + 4=0x20004,如下图所示:

图片

然后再判断文件内容编码,poc文件的前两个字节为0xFE和0xFF,说明其内容编码为UTF-16大端字节序,如下图所示:

图片

最后将进入Utf8_16_Read::convert函数,将UTF-16编码的内容转换为UTF-8编码。在转换时,重新计算转换后的内容的大小,计算公式为newSize = len + len / 2 + 1,len为转换前内容的大小,也就是新大小比原大小的3/2倍还多1个字节。在读取poc文件时,第一次读取的大小为0x20004,如下图所示:

图片

计算转换后新缓冲区的大小为0x30007,如下图所示:

图片

再进行编码转换,将转换后的内容存入新的缓冲区,未发生溢出,如下图所示:

图片

第二次读取poc剩余内容时,只剩下1个字节,但是上一次读取到缓冲区的内容未清除(关键点1),如下图所示:

图片

接着计算新缓冲区的大小为2(关键点2),如下图所示:

图片

再进行编码转换,此时由于只有一个字节,而UTF-16至少是2个字节,所有将在缓冲区中向后再读一个字节(关键点3),这个字节内容是上一次读取的内容。此时的UTF-16内容是0xFF,0xFF,转换后为0xEF,0xBF,0xBF,一共3个字节,超出2个字节大小的新缓冲区,发生溢出,如下图所示:

图片

综上,当poc文件大小为奇数,在进行UTF-16到UTF-8转化时,计算转化后缓冲区大小将发生错误,同时对文件内容的结束位置也判断错误,导致转化后堆缓冲区溢出一个字节,覆盖其他内存,可能导致任意代码执行。

poc详情:

https://github.com/webraybtl/CVE-2023-40031

漏洞利用

溢出一个字节被称为off-by-one。一般来说,off-by-one被认为是难以利用的。常见的思路是利用该漏洞修改相邻堆大小造成块结构之间出现重叠,从而泄露其他块数据,或是覆盖其他块数据,这在CTF比赛中比较常见。想要直接进行rce的话还需要深入研究一些其他的组合利用方式。

参考链接

  • https://securitylab.github.com/advisories/GHSL-2023-092_Notepad__/

  • https://threatprotect.qualys.com/2023/08/30/multiple-vulnerabilities-in-notepad-allow-attackers-to-perform-arbitrary-code-execution/

  • https://community.notepad-plus-plus.org/topic/24889/notepad-v8-5-7-release-candidate

  • https://www.landiannews.com/archives/100096.html

  • https://nvd.nist.gov/vuln/detail/CVE-2023-40031

盛邦安全WebRAY

专注于网络空间安全领域,以“让网络空间更有序”为使命,为客户提供网络安全基础类、业务场景安全类、网络空间地图类安全产品及服务。

51篇原创内容

公众号

盛邦安全应急响应中心

让网络空间更有序

公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1049177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全球与中国静音发电机市场:增长趋势、竞争格局与前景展望

静音发电机是一种设计用于减少噪音水平的发电机&#xff0c;通常被称为低噪音发电机或静音发电机组。这些发电机被特别设计&#xff0c;以降低发电运行时产生的声音&#xff0c;以满足对噪音控制和环境友好性的需求。 噪音控制技术&#xff1a;静音发电机通常采用各种噪音控制技…

51单片机控制电动机正反转,PWM调速,记录转动圈数。

今天的实验需要用到的材料有&#xff1a;51单片机最小系统&#xff0c;4X4的矩阵键盘&#xff0c;DC直流6V-12V带编码器电机&#xff0c;L298N模块&#xff0c;一个led小灯。下面把产品截图展示一下&#xff1a; 单片机就不展示了&#xff0c;都一样&#xff0c;下面是接线图&a…

【Linux学习】04Linux实用操作

Linux&#xff08;B站黑马&#xff09;学习笔记 01Linux初识与安装 02Linux基础命令 03Linux用户和权限 04Linux实用操作 文章目录 Linux&#xff08;B站黑马&#xff09;学习笔记前言04Linux实用操作各类小技巧&#xff08;快捷键&#xff09;ctrl c 强制停止ctrl d 退出或…

手把手教你制作精美的新店开业微传单

如果你准备开设一家新店&#xff0c;那么制作一份具有吸引力的微传单是宣传店铺的重要手段之一。下面&#xff0c;我们将通过乔拓云平台&#xff0c;手把手教你制作一份有吸引力的新店开业微传单。 1. 注册并登录乔拓云账号 首先&#xff0c;你需要在乔拓云官方网站注册一个账号…

麒麟信安服务器操作系统V3.5.2重磅发布!

9月25日&#xff0c;麒麟信安基于openEuler 22.03 LTS SP1版本的商业发行版——麒麟信安服务器操作系统V3.5.2正式发布。 麒麟信安服务器操作系统V3定位于电力、金融、政务、能源、国防、工业等领域信息系统建设&#xff0c;以安全、稳定、高效为突破点&#xff0c;满足重要行…

​分拆菜鸟将使阿里巴巴股票迎来新一轮上涨?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;阿里巴巴(BABA)最近公布的季度财报显示&#xff0c;该公司有能力实现快速盈利。 &#xff08;2&#xff09;据报道&#xff0c;阿里巴巴正计划分拆菜鸟集团&#xff0c;并将在香…

JavaScript高阶班之ES6 → ES11(八)

JavaScript高阶班之ES6 → ES11 1、ES6新特性1.1、let 关键字1.2、const关键字1.3、变量的解构赋值1.3.1、数组的解构赋值1.3.2、对象的解构赋值 1.4、模板字符串1.5、简化对象写法1.6、箭头函数1.7、函数参数默认值1.8、rest参数1.9、spread扩展运算符1.9.1、数组合并1.9.2、数…

瀑布流布局

效果&#xff1a; 代码&#xff1a; APP.vue <template><waterFallVue :list"list"></waterFallVue> </template> <script setup> import waterFallVue from "./components/waterFallVue .vue"const list [{height: 300,…

欧洲FBA专线海运与陆运的差别

随着全球电商市场的快速发展&#xff0c;越来越多的卖家选择将产品销售到欧洲市场。然而&#xff0c;面对欧洲境内的物流问题&#xff0c;卖家们往往会面临一个重要的选择&#xff1a;选择欧洲FBA专线时是选择海运还是陆运?这两种运输方式在时效、成本和服务质量上都有所不同&…

练习敲代码速度/提高打字速度

今天看到一个敲代码的视频&#xff0c;说的是不要用你的爱好来挑战程序员的职业。 惭愧&#xff0c;我也是程序员&#xff0c;但打字还真的没那么快&#xff0c;尤其是数字键盘&#xff0c;以前敲不准&#xff0c;十几年了也没在意&#xff0c;毕竟很少用。直接用右边小键盘更…

基于web的学校二手书城系统/二手书交易系统

摘 要 本文论述了学校二手书城系统的设计和实现&#xff0c;该网站从实际运用的角度出发&#xff0c;运用了计算机网站设计、数据库等相关知识&#xff0c;网络和Mysql数据库设计来实现的&#xff0c;网站主要包括用户注册、用户登录、浏览图书、搜索图书、查看图书并进行购买…

简单易上手的在windows部署cmake版paddledetection/yolo(c++)

一.下载源代码 官方地址&#xff1a; https://gitee.com/paddlepaddle/PaddleDetection 网盘&#xff1a; paddledetection 链接&#xff1a;https://pan.baidu.com/s/1g0z5SYQNDR1pwe9iAtvR3A?pwdktl6 提取码&#xff1a;ktl6 paddleocr 链接&#xff1a;https://pan.baid…

数码配件商城搭建教程:一步一步实现自己的小程序商城

在如今数字化的时代&#xff0c;电子商务成为了一种非常重要的商业模式。而随着移动互联网的发展&#xff0c;小程序商城成为了许多企业和个人创业者的选择。本文将介绍如何使用乔拓云平台搭建一个数码配件商城的小程序&#xff0c;并实现自己的商业梦想。 第一步&#xff1a;登…

raw图片处理推荐 DxO PhotoLab 6 for Mac中文最新

DxO PhotoLab 6是一款专业的RAW图片处理软件&#xff0c;适用于Mac操作系统。它具有先进的图像处理技术和直观易用的界面&#xff0c;可帮助用户轻松地将RAW格式的照片转换为高质量的JPEG或TIFF图像。以下是对DxO PhotoLab 6软件的详细介绍&#xff1a; RAW图像处理&#xff1…

python监控ES索引数量变化

文章目录 1, datafram根据相同的key聚合2, 数据合并&#xff1a;获取采集10,20,30分钟es索引数据脚本测试验证 1, datafram根据相同的key聚合 # 创建df1 > json {key:A, value:1 } {key:B, value:2 } data1 {key: [A, B], value: [1, 2]} df1 pd.DataFrame(data1)# 创建d…

【广州华锐互动】奶牛养殖难产助产3D沉浸式教学平台

在传统的奶牛难产助产教学中&#xff0c;主要依赖理论知识和2D图像来进行教学。然而&#xff0c;这种教学方式往往无法全面、真实地展示奶牛难产的各种情况&#xff0c;教学效果也不尽如人意。随着科技的发展&#xff0c;3D互动教学的出现&#xff0c;为奶牛难产助产教学带来了…

TextMeshPro创建中文资源出现内容不全的问题记录

原因可能是出现乱码了&#xff0c;如下图3500的汉字没有乱码可以创建成功&#xff0c;但7000的汉字创建时没有乱码的能创建出来&#xff0c;乱码的内容在创建出来的资源里不存在。

rk3568 weston 桌面相关

rk3568 weston 桌面相关 1、Weston 桌面参考链接 https://www.mankier.com/5/weston.ini#Output_Section 2、查看显示设备 输入 ls /sys/class/drm 命令&#xff0c;以MIPI 屏为例。 3、调整屏幕方向 修改 /etc/xdg/weston/weston.ini 文件 [output] nameDSI-1 //与上面列…

亿发连锁商超新零售解决方案提供商,提供定制新零售管理系统

时代的发展带动了经济环境的变化&#xff0c;为迎合市场经济的发展需求&#xff0c;数字化收银逐渐融入到大中生活中&#xff0c;中小型商铺都倾向于使用智慧收银系统取代传统收银模式。新零售系统成为了商家在竞争激烈的市场中立足的关键。但随之也带来了数不尽的竞争压力&…

openlayers-18-聚合显示补充(切换聚合与非聚合状态)

最近有一些网友问我&#xff0c;聚合显示怎么实现聚合与不聚合之间的切换&#xff0c;有很多方法能够实现&#xff0c;下面是一个示例作为参考。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-…