CVE-2026-33993Locutus是一个将其他编程语言标准库引入JavaScript的项目。在3.0.25版本之前,其`unserialize()`函数存在严重安全缺陷。该函数在处理反序列化数据时,未对`__proto__`键进行过滤,直接将其分配给普通对象。攻击者可利用特制的PHP序列化payload触发JavaScript的原型污染,导致属性注入、属性传播或通过覆盖内置方法引发拒绝服务。此漏洞不同于此前`parse_str`中的问题,需立即升级修复。
该漏洞源于`locutus/php/var/unserialize`模块中不安全的反序列化实现。当函数处理包含`__proto__`作为数组或对象键的PHP序列化字符串时,使用了括号表示法将键值对分配给对象。在JavaScript中,`__proto__`是对象原型的特殊setter,直接赋值会改变对象的原型链。攻击者构造恶意payload(如包含`__proto__`键的对象),当`unserialize()`解析时,会将攻击者控制的属性注入到`Object.prototype`中。由于JavaScript的原型继承机制,这将导致所有对象都继承这些被污染的属性。攻击者可利用这一点篡改应用逻辑(如权限绕过)或覆盖`toString`等内置方法导致应用崩溃。该漏洞利用无需认证且无需用户交互,通过网络即可触发,危害性极高。