CVE-2025-12735CVE-2025-12735是expr-eval JavaScript库中的一个严重安全漏洞,CVSS评分高达9.8分(满分10分)。expr-eval是一个用于安全评估数学表达式的JavaScript表达式解析和求值库,设计初衷是为用户提供灵活定义变量的能力来执行数学运算。然而,由于该库对输入验证不足,攻击者可以通过向evaluate()函数传递精心构造的上下文对象(context object),或利用MEMBER访问上下文对象的特性,触发任意代码执行。攻击者无需任何认证,也不需要用户交互,即可通过网络远程利用此漏洞。这意味着任何使用expr-eval库且允许用户控制输入表达式或上下文对象的Web应用都可能受到此漏洞的影响,可能导致服务器完全沦陷、敏感数据泄露或进一步的内网渗透。鉴于该漏洞的严重性和利用的简便性,建议受影响用户立即采取修复措施。
expr-eval库的漏洞根源在于其对表达式解析和上下文对象访问的权限控制不足。在正常的表达式求值场景中,用户可能需要访问上下文对象中的变量,例如表达式'a+b'中,a和b是从context对象中获取的值。问题出在库允许通过特殊的语法或属性访问方式,绕过预定义的安全边界,访问到JavaScript对象的原型方法或构造函数。攻击者可以通过构造恶意的上下文对象,利用__proto__、constructor或eval等属性,在表达式求值过程中执行任意JavaScript代码。例如,攻击者可以将context对象设置为包含恶意payload的对象,当库解析类似'a.constructor'的表达式时,会返回JavaScript的构造函数对象,进一步链式调用可执行系统命令。此外,通过MEMBER访问模式,攻击者可以遍历对象属性链,最终触发代码执行。由于expr-eval通常运行在Node.js服务端环境中,任意代码执行可直接导致服务器被完全控制。