IPBUF安全漏洞报告
English
CVE-2026-4800 CVSS 8.1 高危

CVE-2026-4800 Lodash代码执行漏洞

披露日期: 2026-03-31
来源: ce714d77-add3-4f53-aff5-83d477b104bb

漏洞信息

漏洞编号
CVE-2026-4800
漏洞类型
远程代码执行
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Lodash

相关标签

RCELodash代码注入原型污染CVE-2026-4800

漏洞概述

Lodash是一个广泛使用的JavaScript实用工具库。CVE-2026-4800是该库中_.template函数的安全绕过漏洞。尽管之前修复了变量选项的验证,但options.imports键名未经验证直接传递给Function()构造函数。此外,assignInWith合并imports时会枚举继承属性,导致原型污染对象被传入Function。攻击者可利用此漏洞在模板编译阶段注入并执行任意代码。

技术细节

该漏洞的核心在于Lodash的_.template函数对options.imports键名的验证缺失。虽然针对CVE-2021-23337的修复增加了对variable选项的验证,但并未对options.imports的键名应用相同的逻辑,导致这些键名直接流向危险的Function()构造函数。攻击者若能控制imports的键名,即可注入带有默认参数的恶意表达式,在模板编译时被执行。此外,_.template内部使用assignInWith方法合并imports对象,该方法通过for..in循环枚举属性,这会将Object.prototype上的属性也一并拷贝。若攻击者能通过其他污染源攻击Object.prototype,这些被污染的键值将通过imports传递给Function(),进而导致代码执行。这种双重利用方式使得该漏洞在特定环境下极易被利用。

攻击链分析

STEP 1
1. 侦察
识别目标应用是否使用了存在漏洞的Lodash版本,并寻找调用_.template函数且使用options.imports参数的代码路径。
STEP 2
2. 武器化
构造包含恶意JavaScript代码的字符串,将其作为options.imports对象的键名,利用默认参数表达式实现代码注入。
STEP 3
3. 投递
攻击者通过HTTP请求等途径,将包含恶意键名的JSON数据发送给目标应用程序的接口。
STEP 4
4. 利用
应用程序解析输入并调用_.template,未经验证的键名被传递给Function()构造函数,导致恶意代码在模板编译时被执行。
STEP 5
5. 目标达成
攻击者在服务器端成功执行任意代码,可能获取服务器权限或进一步横向移动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const _ = require('lodash'); // PoC for CVE-2026-4800: Code Execution via options.imports // The key name in imports is not sanitized and flows into Function() var source = '<%= "test" %>'; var options = { imports: { // Injecting a default parameter expression to execute arbitrary code 'a;return global.process.mainModule.require("child_process").execSync("calc.exe");//': 'value' } }; try { var compiled = _.template(source, options); compiled(); } catch (e) { console.log(e); }

影响范围

Lodash < 4.18.0

防御指南

临时缓解措施
避免将未受信任的输入作为options.imports中的键名,仅使用开发者控制的静态键名。同时检查并修复应用中其他可能存在的原型污染漏洞,以防止通过assignInWith触发的间接攻击。

参考链接

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