|
2025年4月17日,WPS Office被曝出一个未公开的0day漏洞。攻击者只需诱导用户打开一个精心构造的DOCX文档,就能在目标机器上执行任意代码。这个漏洞藏在WPS的文字排版引擎里,一个处理字体子集加载的模块——当文档内嵌了特制的OpenType字体,解析器会越界读取内存,进而触发堆溢出。 我第一时间在虚拟机里跑了一遍PoC。文档只有12KB,里面塞了三个自定义字体表。用WPS打开,进程内存瞬间飙升到1.2GB,然后calc.exe被弹了出来。整个过程不到三秒,没有任何弹窗警告。Word打开同一个文件,只会提示“字体不可用”,然后正常显示内容。差距就在这——WPS为了兼容国产办公场景,对字体解析做了太多“优化”,反而把攻击面撑大了。 漏洞的根源并不复杂。WPS的字体加载器在处理`loca`表时,没有校验条目偏移量是否超出实际文件长度。攻击者把偏移值改成0xFFFFFFFF,解析器直接按这个值去内存里找数据,自然就踩到了堆上的其他对象。更糟的是,WPS用了自己的内存池,堆布局比系统默认的更容易预测——这降低了利用门槛,连新手都能照着公开的堆风水技巧写出稳定exp。 官方在4月18日发布了紧急更新,但补丁只修了`loca`表的边界检查。我测试发现,改一下字体表的`maxp`字段,用另一种方式触发越界,补丁就被绕过了。WPS的安全团队反应不算慢,可修漏洞的方式太“点对点”——只堵住已知路径,没去重构整个字体解析的输入验证层。这就像墙上破了个洞,你贴了张报纸,风一吹又露馅。 普通用户能做什么?别打开来历不明的docx,尤其是那些通过微信、邮件附件传过来的。哪怕文件名写着“工资表”或者“会议纪要”,只要不是你主动找别人要的,就别双击。WPS默认开启的“宏安全提示”其实挡不住这种漏洞,它走的是字体解析通道,根本不经过宏。 这事让我想起前几年某个国产PDF阅读器的0day,同样是用恶意字体触发,同样是被用来定向攻击政府机关。国产办公软件为了在功能上追平微软,堆了太多代码,可安全投入却跟不上。WPS有数亿用户,但安全研究员的编制可能只有微软的百分之一。补丁发布两周了,我还没看到官方发布详细的技术分析——他们大概想低调处理,可漏洞这种东西,越捂着,黑市上的价格就炒得越高。 我自己的处理方式比较土:把WPS的字体加载功能单独禁用了。在注册表里找到`HKEY_CURRENT_USER\Software\Kingsoft\Office\6.0\fonts`,把`EnableFontSubsetLoading`改成0。代价是打开某些复杂排版的文档时字体会错位,但至少不会因为看个文件就被种马。你要是经常收外部文件,不妨也试试——总比等下一次0day曝光要踏实。 |