论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
安全
›
网络安全
›
Winrar代码执行漏洞(CVE-2023-38831)的原理分析 ...
Winrar代码执行漏洞(CVE-2023-38831)的原理分析
十念
金牌会员
|
2023-9-29 23:27:35
|
显示全部楼层
|
阅读模式
楼主
主题
887
|
帖子
887
|
积分
2661
背景
在2023年8月23日,Group-IB威胁情报机构发布了一份报告,详细介绍了WinRAR任意执行漏洞CVE-2023-38831的攻击活动。根据该报告,这个漏洞最早于2023年4月被攻击者利用,然后在2023年7月被Group-IB威胁情报机构发现并报告给了RARLAB。最终,RARLAB在2023年8月2日发布了修复了CVE-2023-38831漏洞的正式版本WinRAR v6.23。
漏洞简介
本次漏洞影响范围为低于WinRAR v6.23的所有版本,以下是该漏洞的基本信息:
(图源:
WinRAR代码执行漏洞 (CVE-2023-38831) 安全风险通告 - 安全内参 | 决策者的网络安全知识库 (secrss.com)
)
WinRAR是一款功能强大的Windows文件压缩和解压缩工具,支持高效的压缩算法、密码保护、分卷压缩、恢复记录等功能,同时提供图形和命令行界面,以及自解压缩功能,为用户提供便捷且安全的文件管理和传输工具。
在zip文件格式中,使用了
ZIPDIRENTRY
结构体来管理压缩包内的文件和文件夹信息,包括名称、名称长度和修改日期等。WinRAR允许用户预览和执行压缩包内文件。但由于字符串比较代码的问题,当用户打开zip压缩包并执行文件时,WinRAR可能会
错误地释放非用户所选的文件
。
WinRAR使用了
ShellExecuteExW
来启动目标文件,这是Windows系统的一个API函数,用于执行目标文件操作。然而,当
文件路径字符串末尾存在空格
时,该API会在路径末尾添加通配符“.*”并搜索匹配的文件来执行,导致了
非目标文件的执行
。
综上所述,这个漏洞的触发包含两个环节:
a.文件释放:由于文件名字符串的比较函数存在一定的问题,导致了非目标文件被释放;
b.文件执行:释放的文件经ShellExecuteExW执行,当路径字符串末尾有空格时,可能会导致路径下其他特定文件的执行。
漏洞详细分析
以WinRAR v6.11(x64)为例,分析漏洞的实现原理和过程。
ZIP文件采用了三种数据结构来有效管理压缩包内的文件内容:ZIPFILERECORD, ZIPDIRENTRY,ZIPENDLOCATOR,其中ZIPDIRENTRY在本次漏洞触发中扮演了关键的角色。在zip压缩包内,每个文件和文件夹都对应了一个ZIPDIRENTRY数据结构,该数据结构包含一个名为deFileName的成员,用于存储目标文件/文件夹的名称。
构建一个zip格式的压缩包,源文件如图:
打包为zip后数据结构如图,图中的ZIPDIRENTRY dirEntry是我们要重点关注的对象,这个数据结构下有个deFileName,指的是这个结构体管理的目标文件的文件名:
用WinRAR打开这个压缩包,执行test_.txt,可以看到WinRAR在temp目录下释放了该文件:
WinRAR释放目标文件的逻辑是这样的:
文件释放漏洞
红色部分是触发漏洞的关键点一,通过各种逆向分析手段,找到了该处代码:
根据这处代码的逻辑,如果我们要解压的文件为test_.txt,那么就会有三种类型的字符串被匹配上:“test_.txt”、“test_.txt\
*
”、“test_.txt/
*
”,这里的*表示任意字符串,例如“test_.txt\a.exe”。
所以,我们对之前构造的压缩包稍作修改:
然后执行test_.txt,就会发现,WinRAR偷偷释放了我们不需要的文件:
至此,文件释放的漏洞解释完毕,接下来是文件执行。
文件执行漏洞
WinRAR使用API执行文件:ShellExecuteExW,这是shell32.dll导出的一个函数,该API的执行逻辑大致如下:
图中标红的函数CShellExecute::_PerformantBindCtx就是本次漏洞的关键点二,文件执行。
依旧是使用各种逆向分析手段定位到该函数:
其中有两个关键函数PathFindExtensionW和sub_180206AE0:
PathFindExtensionW是KernelBase.dll的一个导出函数,用于从一个文件名中提取出扩展名所在位置的字符串指针,如传入参数为“C:\Windows\test.exe”时,返回值为指向这个字符串的“.exe”位置的指针,这个函数的代码是这样的:
可以看到它调用了另一个函数PathCchFindExtension,这个子函数才是提取扩展名字符串的关键函数,代码逻辑也很简单,遍历文件路径字符串,查找末尾“.*”的位置。
需要注意的是,windows下的文件名称本身(不包括路径),是不可以含有正反斜杠和空格的。
但我们只是在调用API,我们可以给它传任意参数,比如说"C:\Windows\test.exe ",注意这里test.exe后面有个空格,那么这时会发生什么呢?
PathCchFindExtension返回给PathFindExtensionW一个指向了0的字符串,PathFindExtensionW又把这个指针返回给CShellExecute::_PerformantBindCtx,
然后就会导致函数sub_180206AE0被执行,这个函数就负责给文件名加上通配符,然后在路径下查找匹配的文件:
漏洞完整验证
至此我们已经把漏洞的两个关键环节都找到了,只要根据上面分析的结果构造一个特殊的zip文件,就可以触发这个漏洞:
图中标红位置的字符串,在.txt后面都跟着一个空格。
然后我们执行一下:
当当~验证完毕。
注:
此处使用的WinRAR版本为6.11中文版,64位;
由于系统dll版本的不同,上述API的执行情况可能有所差别,请根据实际情况进行分析;
闲暇之余随手写的文章,行文格式很随意,看不懂的地方还请多看两遍(doge);
文章中最后poc演示的zip文件下载链接:
https://drive.google.com/file/d/1MTDv5snH7ca1Y7lQXEj9_3vmKM8bjpXp/view?usp=drive_link
参考链接:
WinRAR代码执行漏洞 (CVE-2023-38831) 安全风险通告 - 安全内参 | 决策者的网络安全知识库 (secrss.com)
Konni APT 利用 WinRAR 漏洞(CVE-2023-38831)攻击数字货币行业 (seebug.org)
CVE-2023-38831 WinRAR 漏洞分析 (seebug.org)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
十念
金牌会员
这个人很懒什么都没写!
楼主热帖
Velero系列文章(四):使用Velero进行 ...
Kali Linux利用MSF入侵安卓手机(小白版 ...
微光互联 TX800-U 扫码器无法输出中文 ...
【图书管理系统】Servlet+JSP+MySql 实 ...
xmrig挖矿样本分析 miner
SonarQube安全扫描
Android Studio 实现登录注册-源代码 ...
三天吃透Kafka面试八股文
C/C++函数的调用约定详解
微服务低代码Serverless平台(星链)的应 ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表