简介
- 漏洞编号:CVE-2023-38831
- 漏洞类型:逻辑漏洞
- 软件名称:RARLAB WinRAR
- 模块名称:WinRAR.exe
- 历史漏洞:根据 vuldb 显示,历史漏洞并不是很多,能稳定利用的更是少之又少
- CISA 已知漏洞利用目录中只有两个可利用
- 影响的版本:版本应低于 6.23,但是在复现中发现 5.x 版本无法利用成功
- 攻击利用:WinRAR 中的一个零日漏洞(称为 CVE-2023-38831)已被自 2023 年 4 月以来,该漏洞被网络犯罪分子积极利用,详情参见:https://www.bleepingcomputer.com/news/security/winrar-zero-day-exploited-since-april-to-hack-trading-accounts/
操作环境
- 系统:Win10 1607
- 软件版本:Office2016 16.0.4266.1003
- poc:CVE-2023-38831-poc.rar(https://github.com/b1tg/CVE-2023-38831-winrar-exploit)
- 工具:Process Monitor、windbg、IDA、二进制分析工具
分析
复现
- 下载 github 文件后,双击目录中的 CVE-2023-38831-poc.rar 文档,弹出 WinRAR 窗口后双击 CLASSIFIED_DOCUMENTS.pdf 文件,最后弹出计算器,复现成功
文件分析
- 一级目录包括一个 PDF 文件和一个目录,名称都为 "CLASSIFIED_DOCUMENTS.pdf "
- 目录中是命名为 “CLASSIFIED_DOCUMENTS.pdf .cmd” 的文件,功能就是充当弹出计算器的有效载荷
系统操作分析
文件创建分析
- 双击 PDF 后 WinRAR 进程会向如下 Temp 中的目录创建两个文件,分别是 "CLASSIFIED_DOCUMENTS.pdf " 和 “CLASSIFIED_DOCUMENTS.pdf .cmd” 文件,并且在创建文件之前会使用 QueryDirectory 函数进行查询
- 这两个文件的创建操作都是 WinRAR.exe 在同一地址进行的指令操作创建的
进程操作分析
- 执行 cmd.exe 的操作同样是 WinRAR.exe 进程创建的,后面经过分析后发现是通过 ShellExecuteW 创建的
逆向分析(基地址 0x130000)
- 经过逆向分析后,发现 WinRAR.exe 漏洞的执行主要分为四个阶段,分别是 RAR 文件解析、文件路径转换、文件创建、以及文件执行
- 首先是 RAR 文件解析,WinRAR.exe 会提取 RAR 文件中的名称列表并保存到全局变量 PathName 中
(1)0021a485:通过 HeapAlloc 申请堆变量保存在 dword_320274 的地址
(2)001BE2FC:通过 ReadFile 读取 CVE-2023-38831-poc.rar 结尾不到 0x2000 的数据(包含压缩文件内的目录和文件名称列表)储存到 dword_320274 中,句柄是通过 CreateFileW 函数返回的
(3)00218099:将 dword_320274 赋值到 dword_320278 中,经过了偏移操作,保证提取完整的目录或者是文件名称
(4)002141D6:将 dword_320278 赋值到 MultiByteStr 变量中,如下所示函数 sub_214660 完成此功能
(5)0021427C:将 MultiByteStr 通过宽字符转换后保存到 PathName 中,如下所示 sub_1EB9B0 函数完成此功能
- 文件路径转换操作主要是将 PathName 中保存的文件名转换为绝对路径,好使用绝对路径进行创建文件操作
(1)00211CE3:函数 sub_1EFB90 完成此操作
(2)调试中可以很清楚的看到文件名到绝对路径的转换,0x320384 就是变量 PathName 的地址
- 文件创建操作
(1)001BE20E:主要是通过 CreateFileW 函数完成的,创建的路径就是上面经过绝对路径转换后储存在 PathName 变量中数据
- 最后是执行操作
(1)这个主要是通过 SHELL32!ShellExecuteExW 完成的,但是传入的参数并不是 .cmd 结尾的载荷文件
(2)但是因为后面带了一个空格,所以最终 ShellExecuteExW 在调用 CreateProcessW 执行时参数是 .cmd 结尾的文件,这样载荷就会成功触发,最后弹出计算器
原因
- 首先 WinRAR 提取了二进制压缩文件后的目录和文件名称列表,包含一个目录、目录下的 .cmd 文件和 1 个 pdf 文件
- 之后将目录和 pdf 文件转换为绝对路径
- 然后在 Temp 目录下创建临时的 pdf 副本,目录则不会创建
- 一般情况下到此结束,但是 WinRAR 则会继续解析目录下的 .cmd 文件,并且在绝对路径转换的时候取消了原本拥有的目录
- 这就会导致 .cmd 文件和 pdf 文件在同一路径,并且最后在 ShellExecuteExW 执行时还带了空格,最后导致载荷触发
构建与利用
- 构建流程:对 poc 中的文件进行自定义修改后,通过作者给出的 py 脚本创建即可