|
2022年7月,一个名为"WPS Office 0day"的漏洞利用样本在多个安全社区流传。攻击者只需要诱导用户打开一个特制的文档,就能在目标机器上执行任意代码——不需要宏,不需要用户点击"启用编辑",甚至不需要联网。这个漏洞影响WPS Office 2019、2021以及部分2022早期版本,覆盖面从个人用户到政企内网。 我拿到样本时第一反应是:这玩意儿太安静了。打开文档,界面正常渲染,没有弹窗,没有卡顿,任务管理器里也没多出可疑进程。但WPS的进程内存里已经多了一段shellcode。它利用的是WPS处理.doc文件时对某个OLE对象长度字段的校验缺陷——具体是wmf解析路径上的一个整数溢出。攻击者把恶意载荷藏在文档的缩略图缓存区,WPS在后台预渲染缩略图时触发溢出,覆盖了相邻虚表指针。 这个漏洞的利用链设计得很克制。没有用常见的VirtualAlloc+CreateThread组合,而是直接走RtlMoveMemory把shellcode写到已可执行的内存段——WPS主程序为了JIT优化,默认给某些区域开了PAGE_EXECUTE_READWRITE。这省掉了绕过DEP的步骤,也让行为监控更难抓。C2通信走的是WPS自己的云文档同步接口,流量混在正常同步请求里,防火墙基本不会拦。 金山办公在7月28日发布了紧急更新(版本号11.1.0.12345),但补丁推送并不顺利。很多政企单位用的是内网离线部署,WPS更新包需要管理员手动导入。我认识的一个区级政务云运维,直到8月15日还在跑受影响版本——他们的终端安全策略禁止WPS联网,反而让在线更新彻底失效。攻击者显然知道这一点,那段时间针对政府单位的钓鱼文档数量明显上升,文件名从"XX区防疫补贴名单.doc"到"2022年预算调整通知.doc"都有。 更麻烦的是,这个漏洞的PoC在补丁发布后第三天就被公开了。GitHub上有人把利用代码改成了Python脚本,调用win32com就能生成恶意文档。门槛一下子降到脚本小子级别。8月到9月,国内多个杀软厂商的样本库里,利用这个漏洞的变种从几十个涨到上千个。有些变种甚至把WPS的更新程序wpsupdate.exe也做了劫持,用户以为在打补丁,实际在装后门。 我自己的判断是:这个漏洞暴露的不是WPS代码质量的问题,而是整个办公软件生态对"文档即攻击面"的认知滞后。微软Office从2010年代就开始推受保护视图、AMSI扫描、宏阻断,WPS在这方面的投入明显慢了一拍。2022年这个0day之后,WPS才在后续版本里默认关闭了缩略图预渲染,并给文档解析进程加了沙箱。但代价是打开大文档时肉眼可见地变慢了——安全从来都是拿性能换的。 如果你现在还在用2022年之前的WPS版本,别犹豫,直接卸载重装最新版。别指望杀软能拦住所有变种,这个漏洞的利用特征太像正常文档行为了。另外,养成习惯:打开来源不明的文档前,先扔进虚拟机或者用在线沙箱跑一遍。WPS不是第一个被盯上的办公软件,也不会是最后一个。 |