资讯动态

WinRAR漏洞CVE-2023-38831:同名陷阱压缩包攻击原理与防御

发布时间:2026/10/17 9:12:54 来源:尧图企业网站定制
打开压缩包看见一个“重要文件.pdf”顺手双击想预览一下内容结果还没等PDF阅读器启动后台先拉起了一个命令脚本——这事发生在2023年被大量利用的WinRAR漏洞上编号CVE-2023-38831。当时我第一反应是这又是那种需要复杂构造、特定环境才能触发的“理论漏洞”后来看完实际攻击样本才发现它离普通用户近得可怕攻击者只要把一个同名文件和文件夹的“障眼法”打包进ZIP就能骗过大部分人。这篇文章我会把漏洞的核心机制、根因、攻击链路、检测取证和修复建议完整串一遍。适合三类人看一是安全从业者想搞清楚漏洞原理和排查思路二是运维管理员需要评估影响、做加固三是普通用户想知道自己该怎么避免踩坑。我会尽量用讲人话的方式拆解不堆术语但该有的技术细节一点不会少。1. 漏洞全貌一个压缩包能掀起的风浪1.1 事件背景与影响范围CVE-2023-38831这个漏洞在2023年年中被披露影响范围覆盖当时WinRAR 6.22及之前的所有版本。官方在6.23版本中完成了修复时间点上正好卡在攻击活动已经大规模发生的阶段。为什么这个漏洞值得重视WinRAR在Windows终端的普及率太高了尤其是办公场景、运维管理、文件交换环节基本是装机必备。攻击者不需要什么高级供应链能力只要构造一个恶意ZIP通过邮件附件、聊天工具、网盘链接发出去就有概率命中受害者。更麻烦的是它利用的是用户“双击查看文件”这个再正常不过的习惯几乎没有心理防备的余地。我在分析样本时关注到一个细节该漏洞最早被发现的攻击样本主要投递目标是金融和交易相关领域的工作人员压缩包里的诱饵文件名带有明显的业务属性比如“交易确认单”、“账户报告”之类。这说明攻击者做了充分的社工设计不只是技术利用还叠加了精准的钓鱼话术。1.2 为什么造成的影响这么大漏洞的触发条件并不苛刻受害者需要收到一个压缩包并解压或浏览然后点击其中的某个“文件”。问题在于即使WinRAR只用于查看压缩包内容没有真正解压全部文件恶意代码同样可能被执行。这就把传统“解压才中毒”的风险范围大幅扩展了。更让防守方头疼的是压缩包文件本身很容易绕过邮件网关和Web安全产品的静态扫描。ZIP格式的分层结构、压缩算法、条目元数据各有一套解析逻辑安全设备即使扫了病毒特征也很难对这种“行为型漏洞”提前拦截。攻击者只需要把恶意文件藏在压缩包里绕过率极高。从攻防层面看这个漏洞属于典型的“文件格式逻辑漏洞”不是缓冲区溢出那种内存破坏类问题。它不依赖特定的操作系统版本、不依赖特定的Office版本只要WinRAR版本匹配就能稳定触发这让利用成本低了很多。2. 根因分析压缩包里的“同名陷阱”2.1 文件名与文件夹名的匹配逻辑缺陷要想理解这个漏洞得先明白WinRAR处理压缩包条目的方式。ZIP和RAR格式里每个文件或文件夹都是独立的“目录项”Windows资源管理器将所有条目平铺展示给用户。用户双击一个文件时WinRAR需要做两件事第一把对应的数据流解压到临时目录第二调用系统关联的程序去打开这个文件。问题就出在“第一步”的定位逻辑上。WinRAR在匹配用户点击的条目时内部会做一次名称比较同时会考虑“这个条目是文件还是文件夹”。正常情况下文件名和文件夹名的判断是靠目录项属性位比如ZIP的external attributes确定的这是标准做法。但CVE-2023-38831的命门在于WinRAR在处理“用户打开某个条目”的瞬间并不是只盯着用户点击的那一个条目而是把这个条目和压缩包内其他拥有相同基础名称的条目做了关联匹配。如果压缩包中存在一个名叫“xxx.pdf”的文件夹同时又有一个名叫“xxx.pdf ”的文件——注意末尾多了一个空格——WinRAR就会把这两个条目视为“配套关系”。用生活类比来说你桌上有一份合同文件“合同.pdf”和一个同名文件夹“合同.pdf”如果你想打开文件夹里的副本正常程序应该直接指向文件夹。但WinRAR的实际行为是它先把“合同.pdf”和“合同.pdf ”放在一起比较由于字符串匹配时没有严格排除尾部空格差异系统认错了对象把本该关联到文件夹的操作错误地指向了那个带空格的同名文件条目。2.2 为什么这个缺陷可以被武器化单独的“认错条目”并不直接导致代码执行真正的杀伤力来自WinRAR随后发起的“打开动作”。当WinRAR认为用户点击的条目已经定位成功后会把这个条目的完整文件路径交给系统启动对应的应用程序。攻击者利用了这一步手段很巧妙他在ZIP里放置一个文件夹文件夹内部存放一个可执行程序或脚本文件夹名称被伪装成“正常文档.pdf”这种常见后缀。同时在压缩包的另一个位置放置一个仅比文件夹名称多个空格的文件条目这个文件条目实际内容可以是任意数据甚至空文件。当用户看到“正常文档.pdf”并双击时WinRAR因为匹配逻辑缺陷错误地把用户意图解析为“打开那个带空格的文件条目”。这个文件如果被设置成指向文件夹内部的程序路径操作系统就会傻乎乎地把恶意程序跑起来。整个过程用户看到的只是“我双击了一个PDF”实际上执行的是一个脚本或程序敏感操作就在后台发生了。这个设计的精巧之处在于普通用户根本无法从压缩包界面看出异常因为文件夹名称和文件名称在视觉上几乎一致。攻击者不需要手动命令行操作不需要诱导用户输入密码万事俱备只欠一个点击。3. 攻击链还原一次点击的杀伤链条3.1 攻击者的构造思路我不准备在这里放出任何可直接复现的恶意样本代码但从分析视角把攻击者的构造思路拆解清楚对防守方更有价值。攻击者准备压缩包时会做这么几件事第一准备一个恶意载荷通常是可执行文件EXE、脚本如JS、VBS、CMD或带宏的文档。这是真正要投递的“子弹”。第二在ZIP里创建一个目录比如命名为“2023年度报表.pdf”。注意这个目录不是文件它是一个文件夹但名称伪装成了PDF。第三在ZIP里再添加一个文件条目名称是“2023年度报表.pdf ”——在原有名称后面追加一个空格或者追加一个点/不可见字符。这个文件条目内容可以是垃圾数据甚至可以是一个批处理脚本作用是充当“触发器”。第四把真正的恶意载荷放进“2023年度报表.pdf”这个文件夹里或者将可执行文件直接命名为隐蔽文件名例如“report.jpg.exe”或一个无后缀文件。当受害者用Windows资源管理器或WinRAR打开压缩包时看见的是“2023年度报表.pdf”这样一个看似普通的PDF文件条目实际上它是一个文件夹。双击后WinRAR的匹配逻辑被触发真正执行的是那个“2023年度报表.pdf ”文件条目或文件夹内藏着的恶意载荷。从原理上看攻击者实际上不需要让用户解压整个压缩包甚至不需要用户将这个ZIP保存到本地只要用户双击压缩包内的“PDF文件”就有很大概率中招。3.2 从诱饵到主机失陷的完整链路攻击链路大致分几个阶段第一阶段是投递攻击者通过钓鱼邮件、即时通讯、论坛附件等渠道分发恶意ZIP。邮件正文往往制造紧迫感或利益诱导比如“您的账户存在异常请查看附件详情”。第二阶段是触发用户下载ZIP后双击打开WinRAR展示压缩包内容。用户看到嫌疑不大的PDF、JPG或WAV名称习惯性地双击预览。第三阶段是执行WinRAR触发同名匹配漏洞恶意载荷运行。这个载荷可能是下载器从远程服务器拉取下一阶段的木马也可能是勒索软件、远控木马、信息窃取器。第四阶段是蔓延恶意程序在用户权限内执行开始收集敏感信息、横移内网、建立持久化。如果用户是管理员权限攻击者甚至可以直接接管主机。值得注意的是该漏洞在实际攻击中经常和“无文件”手法配合恶意脚本运行后立即释放到临时目录并删除自身让事后取证难度加大。我在几个样本分析里还看到载荷落地后大量使用PowerShell与C2服务器通信走的全是常见协议传统防火墙规则很难拦住。这里我想特别提醒一句很多防御者以为“只要不让用户解压未知文件”就能防住实际上WinRAR的预览功能同样存在风险。不要双击任何来源不明的压缩包内容是最基本的底线。4. 检测与加固识别入侵脚印4.1 终端侧的排查方法如果怀疑环境中已经有人中招可以从几个维度排查。进程层面注意WinRAR进程WinRAR.exe有没有异常的子进程。正常情况下WinRAR双击打开文档时会调用系统的Shell执行“打开”拉起的是对应的程序如果发现WinRAR.exe下生成了cmd.exe、powershell.exe、wscript.exe、cscript.exe等进程就要高度警惕。这是我说的第一个排查方向用Process Monitor或系统自带的事件日志筛选WinRAR进程的进程创建记录。文件层面排查临时目录。WinRAR在预览或打开条目时会在临时目录释放文件默认路径通常是AppData\Local\Temp。如果发现里面出现了名字形如“xxx.pdf ”带空格或奇异后缀的可执行文件且该文件不是用户手动保存的大概率是漏洞利用痕迹。网络层面注意异常连接。恶意载荷执行后通常会向远程C2服务器发起通信。排查最近一段时间内新出现的网络连接进程特别是PowerShell、rundll32、mshta等进程发起的外联请求。这类连接往往具有低频率、特定时间窗口、特定端口等行为特征。日志层面可以关注Windows事件日志中的4688进程创建和4648显式凭据登录尝试如果4688记录里出现了WinRAR.exe调用脚本解释器的记录基本可以确认攻击事件发生了。4.2 纵深防御的落地建议面对这类漏洞单一措施很难完全防护需要叠加多道防线。第一道是版本防线。趁早升级到WinRAR 6.23及以上版本。这一步最直接官方已经在6.23中修复了漏洞根因升级后该利用链的入口就被封死了。如果企业环境中有大量终端建议通过集中管理平台批量推送升级包不要等着员工自觉更新。第二道是入口防线。邮件安全网关收件时对没有业务上下文的外来压缩包做“异步解析”和“内存沙箱检测”。有些网关支持拆包检测ZIP内条目是否有同名文件/文件夹冲突这一类特征可以提前标记为恶意。如果不能做到至少把来自陌生发件人的压缩包单独隔离展示。第三道是行为防线。端点检测响应工具应配置针对压缩软件生成可疑子进程的告警规则。例如“WinRAR.exe - wscript.exe”这种进程树直接触发中高风险告警不依赖漏洞特征库只看行为异常。这一点对未知变种尤其有效因为该漏洞的原理不变攻击者换种外壳只要行为还是“压缩软件调用脚本解释器”就能被识别。第四道是意识防线。定期给员工做钓鱼演练、安全宣导强调“陌生压缩包不要双击预览”的基本习惯。技术手段再强也抵不过用户一次不经意的点击。在上线前就制定“压缩包文件安全查看规范”比如统一要求先用安全工具扫描、再右键解压而不是直接双击预览。5. 补丁修复与复盘经验5.1 官方修复原理WinRAR 6.23的修复方案核心在于改变了条目匹配的判断逻辑不再允许文件名与文件夹名在“模糊比较”下被关联。具体来说是在名称比较环节严格区分了“文件条目”和“目录条目”并且对条目名称做完全一致的字符串匹配即使末尾空格、大小写差异这种细微变化也不再被容忍。从逆向分析的角度看修复前WinRAR在定位用户点击的条目时会先扫描同名的兄弟条目并将它们视为同一组修复后的版本则改为直接使用用户点击条目的完整路径和属性不再做跨条目模糊推导。这一改正好把攻击者构造的“文件夹名文件名混淆”路径堵死了。我在跟进其他压缩软件处理类似逻辑时发现很多同类产品也存在“名称规整化”环节过度宽松的问题比如误把点号、空格、缩进字符视为透明字符。这类问题往往不是缓冲区溢出式的“硬伤”而是业务逻辑处理不到位带来的“软伤”但危害一点不比内存破坏低。另外还要提醒一点WinRAR的修复补丁只是针对CVE-2023-38831这一个入口不代表升级后压缩文件就绝对安全。压缩包处理过程中还有可能存在其他逻辑问题攻击者的手法也可能演化出同族变种。把压缩软件当成安全边界的一部分而非纯粹的工具才是正确的防守心态。5.2 个人落地复盘与建议我做安全应急这几年复盘过不少类似的样本最大的感受是很多攻击成功不是因为用了多高深的利用技术而是钻了“用户习惯”和“软件细节”的空子。CVE-2023-38831如果单看原理充其量就是一个名称比较函数写得不够严谨但放到攻击链里它就变成了从“一封邮件”到“主机失陷”的钥匙。在实际处置中建议企业安全团队把这类“压缩包逻辑漏洞”纳入常态化的检测规则库不要等CVE编号公布了才想起来排查。我在日常巡检时会定期做两件事一是检查各类常用软件版本是否滞后二是通过模拟攻击样本验证端点防御的检测能力是否覆盖了“压缩软件执行子进程”这条路径。这两件事看着不起眼但往往能在真实攻击到来之前就提前暴露盲区。普通用户这边的建议更简单收到任何压缩包先用软件升级后的版本打开不要双击压缩包内的“文档”先解压到独立文件夹再用阅读器打开后缀名显示功能务必开启见过很多次“xxx.pdf.exe”这种改名伪装但用户因为隐藏了扩展名而看不出来最后中招。这些小习惯不需要专业背景但确实能挡住相当大一部分钓鱼攻击。5.3 经验总结这个漏洞教会了我们什么把CVE-2023-38831放在更长的时间维度看它再次印证了几个朴素的道理。第一任何输入都可能是“武器化”的。一个压缩包、一个文档、一张图片只要代码里有解析环节就存在被构造出恶意的可能。安全从业者不能只盯着内核漏洞、Web漏洞文件格式解析的每个细节都值得反复推敲。第二软件供应链的更新节奏本身就是安全能力的一部分。很多组织没有高效的软件版本管理机制一个漏洞公布后几周甚至几个月还没完成全量升级这个窗口期就是攻击者的红利期。与其事后救火不如建立起能快速追踪安全版本、批量推送终端的机制。第三事件响应里进程树是最直接有效的证据来源。无论是内存破坏漏洞还是逻辑漏洞最终落地执行的时候一定会出现异常的进程创建行为。把端点侧的进程监控做好比依赖单一的杀毒引擎或漏洞特征库更可靠。最后再分享一个小技巧排查这一类问题时别光看文件hash和病毒库结果多去看看压缩包条目的“属性位”。恶意样本在文件条目上会做各种刻意伪装比如用空格、点号、不可见字符来制造同一性假象这些在资源管理器和常规杀毒软件的界面上看不出差别但在文件系统层面用十六进制编辑器或者解析脚本里查看条目名称的原始字节时会原形毕露。掌握一点文件格式底层的知识遇到这类问题就能比大多数人更快定位出关键点。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑