大家好,感谢邀请,今天来为大家分享一下Game of Rars 探索WinRAR 中新的远程代码执行漏洞(CVE202340477)的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
二进制文件对比
我们知道6.23版本已经修复,我们找到修复之前的版本进行复现。通过下载WinRAR-v6.23 和WinRAR-v6.22 的便携版本,我们观察到:
WinRAR 目录结构和文件
可见winrar.exe可能只是一个图形界面。如果解压过程中存在漏洞,也可能存在于“unrar.exe”中。通过比较6.23和6.22之间的差异(忽略注释),我们得到以下结果:
第一个BinDiff 输出
查看流程图,在6.23 版本中发现了一些有趣的补充(在大函数图中,它看起来像是主要的提取):
提取中的BinDiff 额外内容
仔细一看,这些似乎是额外的检查!
blocksBinDiff x86 中有趣的附加块
这看起来很有希望!我们在这里看到一些var 255!有趣的是,这里似乎存在溢出检查。因此,是时候触发漏洞了(例如,将字节更改为其最大值)。
我对RAR 格式进行了研究,从描述中我们知道这与RAR4(vol3?)恢复卷有关,因此我生成了具有这些特征的RAR4 文件,它给了我以下文件列表:
RAR_FILE.rarRAR_FILE.r00RAR_FILE00.revRAR_FILE.r01RAR_FILE01.rev 我尝试暴力破解“.rev”和“rXX”卷中的“类字节”值,但没有成功。它什么也触发不了。然后尝试搜索一些“unrar”源代码并成功找到这个旧存储库:https://github.com/aawc/unrar
查看源代码,可以看到多个“255”常量检查,尤其是在“recvol3.cpp”中。它们也存在于原始的6.22 源代码中,是否由于溢出而添加了额外的检查?
经过进一步研究,我发现这些安全检查实际上与0xff/255有关。
recvol3.cpp 中的
漏洞
CVE-2023-40477
这里,P[i]是从‘.rev’文件中提取的。它们位于文件的末尾。这些P[i] 用于确定它们代表哪个恢复卷以及它们应用到哪个FileNumber。 FileNumber 也从中取出并存储在P[2] 中。
紧接着File\就被分配出来,放在我们控制的索引位置,这个数组的大小就是256! (第241 行),这解释了为什么有255 个检查。
因为索引实际上等于:P[2]+P[0]-1,所以我们几乎可以任意控制转速量的内容。因此,我们可以使用指针(指向File 结构)覆盖此缓冲区,这将覆盖当前对象中的下一个属性。
Poc撰写
为了触发此漏洞,我们发现需要在recvol3.cpp中调用“Restore()”函数。还需要重建步骤来覆盖指针。
为了实现此目的,需要缺少一些rar 卷(缺少.r00 文件)以及可用的.rev 文件。另外,还要保证crc32校验正确,只需要几行代码就可以触发。
为了方便起见,使用了通过GUI 生成的原始rar4 恢复卷,但这可以使用更小、更高效的触发器,并且可能最多只需要2-3 个文件。
# 1. 重新生成格式错误的恢复vols.data=open(‘%s01.rev’ % ARCHIVE_NAME, ‘rb’).read() # 只需使用第一个并将其格式错误up.names=[‘%s%s. rev’ % (ARCHIVE_NAME, str(i).zfill(2)) for i in range(256)]# ‘销毁’ P[i]’sdatas=[data[:-7] + bytes([0xf0,0x00 , i]) + calc_crc(data[:-7] + bytes([0xf0,0x00, i])) for i in range(256)]# 2. 覆盖格式错误的恢复vols.for i in range(256): fname=name[i] data=datas[i] open(fname, ‘wb’).write(data)PoC地址:https://github.com/wildptr-io/Winrar-CVE-2023-40477-POC/
发现该漏洞后不久,我们还在rar-labs网站上看到了https://www.rarlab.com/vuln_rev3_names.html,这基本上证实了我们的发现。
利用这一点,在多种情况下成功使winrar/unrar 崩溃:
内存集用零覆盖无效内存(可能在缓冲区之后) :
在Buf 的memset 上使用winrar 的unrar.exe 时崩溃
源码中Buf的memset
使用“提取到”功能时,winrar.exe 中可能出现堆溢出情况winrar.exe 堆溢出 可能的情况
利用性
要确定可利用性,请查看256 个数组后面覆盖的结构。这用于确定攻击者如何利用此原语来获得远程代码执行(RCE)以及存在哪些缓解措施。
//RecVolume3 结构- 发生溢出class RecVolumes3{ private: File *SrcFile[256]; //File* 指针在这里溢出。 Array Buf;#ifdef RAR_SMP ThreadPool *RSThreadPool;#endif public: RecVolumes3(CommandData *Cmd,bool TestOnly) ; RecVolumes3(); void Make(CommandData *Cmd,wchar *ArcName); bool Restore(CommandData *Cmd,const wchar *Name,bool Silent); void Test(CommandData *Cmd,const wchar *Name);};//数组模板class:template class Array{ private: T *Buffer; size_t 缓冲区大小; size_t 分配大小; size_t 最大尺寸; public: 数组();数组(size_t 大小);数组(常量数组源); //复制构造函数。 数组();总之,我们使用“File*”指针溢出“Buffer”对象,同时还需要绕过此处启用的许多防御措施。幸运的是,有很多保护措施:ASLR、CFG、Stack-Cookie 和DEP。
这甚至没有提到winrar 版本之间的二进制差异。虽然可能存在漏洞被利用的可能性,但对于普通黑客来说,实际被利用的可能性并不高。
影响
尽管CVE 评级较高,但成功利用该漏洞所需的复杂性表明,与广泛利用的Log4j RCE 漏洞不同,广泛滥用的可能性较低。
有趣的是,Chromium 似乎也使用unrar 库:https://chromium.googlesource.com/chromium/src/+/6ff23b0604e2edbe7ef282564ea340f5c72ab91a%5E%21/。
尽管没有代码参考表明其用法,但unrar 库有可能作为第三方依赖项集成到Chrome 操作系统中。
解决措施
可以考虑的对策:
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/98936.html
用户评论
冷落了♂自己·
这个漏洞真的很可怕!WinRAR一直是大家用的压缩软件,没想到会有这种远程代码执行的漏洞。以后得更谨慎打开了未知来源的 RAR 格式文件!
有15位网友表示赞同!
微信名字
一直在使用的 WinRAR,这篇文章让我有点担忧啊,不知道具体的影响范围有多大。希望 WinRAR 能尽快修复这个漏洞,否则太危险了!
有12位网友表示赞同!
oО清风挽发oО
之前也有类似的漏洞被发现过,这些黑客真是越来越厉害了。还是得提醒一下大家,不要随便打开未知来源的文件,尤其是 RAR 格式的文件。保护好自己信息真的很重要!
有10位网友表示赞同!
陌然淺笑
对于安全人员来说,CVE-2023-40477 的出现无疑是一个挑战,这需要我们更加重视软件的安全性漏洞检测和修复工作。Game of Rars 这个名字很棒,仿佛一场充满悬疑的游戏!期待看到他们发布更多关于漏洞分析的文章。
有11位网友表示赞同!
我怕疼别碰我伤口
这个漏洞的利用手法有点厉害啊~~ 看了一下博主的分析,确实很专业,对于安全爱好者来说很有参考价值。希望能够鼓励更多人关注软件安全问题!
有17位网友表示赞同!
繁华若梦
WinRAR一直是我们使用比较多的压缩软件之一,但是现在发现有远程代码执行的漏洞,感觉还是需要谨慎一点。这个漏洞会对使用者造成多大的影响呢?
有8位网友表示赞同!
陌颜
我对这篇文章的分析很有兴趣,特别是关于如何利用CVE-2023-40477执行远程代码的部分。虽然我是一个普通的电脑用户,但这篇文章让我更加了解软件安全的重要性!
有12位网友表示赞同!
◆残留德花瓣
Game of Rars 的文章质量很高啊,每次都能挖掘出一些比较热门的安全漏洞,并进行详细的分析。对于像我这类对安全感兴趣的人来说真是很有帮助!
有16位网友表示赞同!
涐们的幸福像流星丶
这个 WinRAR 漏洞真的太危险了,建议大家立刻更新软件版本! 黑客利用这种漏洞可以控制用户的电脑,后果不堪设想!
有12位网友表示赞同!
念旧情i
WinRAR 的漏洞还真是一个头疼的问题啊。希望开发人员能把这个问题解决的关键点摆出来,让用户更好地了解这个漏洞的危害以及如何防护。
有16位网友表示赞同!
抚笙
看完这篇文章之后,我更加意识到软件安全的重要性了。看来不能只关注功能,还要注意软件的安全性!
有17位网友表示赞同!
暖栀
虽然我对 WinRAR 的漏洞不太懂,但我觉得这篇博文写的很清楚,很容易理解。希望这个漏洞能够尽快修复!
有16位网友表示赞同!
话少情在
Game of Rars 经常发布关于安全研究的文章,而且分析很深入,值得大家关注。这种研究有助于提升我们的安全意识!
有9位网友表示赞同!
凉话刺骨
这篇博文中提到的CVE-2023-40477漏洞,我之前在网上看了一篇相关的介绍,貌似有很多用户受到了影响。希望WinRAR公司能尽快发布补丁解决这个问题!
有16位网友表示赞同!
回到你身边
虽然 WinRAR 很方便,但也需要时刻警惕安全风险。希望大家在使用的时候注意文件来源,避免安装不明来源的软件!
有8位网友表示赞同!
羁绊你
这个漏洞的发现挺重要的,可以让更多人意识到安全的重要性。希望Game of Rars能继续发布这些有益的文章,让更多的人了解安全知识!
有6位网友表示赞同!
小清晰的声音
我觉得WinRAR公司应该重视这个问题,尽快修复漏洞,给用户提供更加安全可靠的服务!
有12位网友表示赞同!
拽年很骚
我更喜欢其他压缩软件! 始终认为 WinRAR 功能过于繁琐,很多功能用不到,而且存在不少漏洞,让人担忧。还是说别的安全一些的工具吧!
有7位网友表示赞同!