CVE-2023-38831 是一个零日漏洞,影响所有低于 6.23 版本的 WinRAR。
问题出在 ZIP 格式的处理上,攻击者可以利用受影响的压缩包来分发恶意软件。恶意行为者可以在 ZIP 压缩包内将恶意文件伪装成与合法文件相似的名字,诱骗用户打开似乎安全的文件,从而执行有害内容。此漏洞自 2023 年 4 月以来已被积极利用,尤其针对金融行业,给打开不受信任压缩文件的用户带来重大风险。升级到 WinRAR 6.23 或更高版本可通过改进提取过程中的文件名清理来缓解此漏洞。
在以下示例中,我将所有提供的文件下载到单个文件夹中,通过 CMD 运行脚本,指定了适当的文件名(包括利用文件),
最后在 .rar 压缩包中添加了一些随机文件,使其看起来更加真实,并更好地隐藏了新的 .txt 利用文件。
当用户点击所谓的 ".txt" 文件时,将执行隐藏在同文件夹中、名称匹配的 .cmd 文件:
https://github.com/user-attachments/assets/91eed756-bb38-42dd-a127-cabaccb4c386
利用这一思路,我们可以尽可能地伪装文件,使该利用文件对用户显得紧急或重要。在以下示例中,
我添加了几个随机文件,使 .rar 压缩包看起来更合法。我使用了一个基本的 .txt 文件作为诱饵,并将其命名为 "INSTRUCTIONS - Open Before Extraction"(说明 - 提取前打开),以诱导用户点击:

利用提供的 Python 脚本,你可以创建自己的 RAR 文件,我们将以此了解此漏洞背后的逻辑。
步骤 1 - 下载 exploit.py 和 DoS.cmd 文件。
步骤 2 - 将它们全部放在一个文件夹中,并选择一个随机诱饵文件,在本概念验证中我将使用一个简单的 .jpg 文件。
步骤 3 - 运行脚本并输入所需的名称
脚本的工作方式如下:
获取提供的文件名和扩展名。
创建一个临时文件夹,脚本放在子文件夹内,诱饵文件放在子文件夹外——两者命名相似,
文件夹名称末尾附加 "X",诱饵文件名末尾附加 "Y":

然后从临时文件夹创建一个 ZIP 文件,以二进制模式打开它,并修改 "X" 和 "Y" 字符,
将它们替换为空格,使它们看起来像是同一个文件。
将修改后的数据写入一个 .rar 文件。

使用 ProcessMonitor 等程序,我们可以观察 WinRAR 在执行文件时的具体步骤:

问题源于压缩包中包含两个名称几乎相同的文件:"image.jpg "(诱饵)和
"image.jpg .cmd"(恶意脚本)。额外的空格创建了相似的基础名称,这混淆了 WinRAR 和 Windows 解析文件路径的方式。当点击 "image.jpg " 时,WinRAR 会读取并在临时文件夹中创建所有相关文件(因为基础名称相似):

为了解决歧义,WinRAR 执行通配符搜索(QueryDirectory),查找 image.jpg .*,目的是定位可执行文件类型,同时确保没有其他相关文件存在。
WinRAR(以及 Windows)在解析有歧义的路径时总是优先考虑可执行文件类型(如 .cmd、.exe、.bat)。结果,它通过 cmd.exe 执行了 "image.jpg .cmd"(创建进程),从而使恶意脚本得以运行,而不是在默认图片查看器中打开诱饵文件。
WinRAR 在版本 6.23 中修复了此问题,强烈建议用户更新到最新版本。
https://www.win-rar.com/singlenewsview.html?&L=0&tx_ttnews%5Btt_news%5D=232