概述
npm包expr-eval是一个用于评估数学表达式的JavaScript库,被广泛应用于各种应用程序中,包括自然语言处理和人工智能。该库披露的一个漏洞可能允许攻击者使用恶意构造的输入实现任意代码执行。
描述
npm项目expr-eval和expr-eval-fork是用于解析和评估数学表达式的JavaScript库,扩展了处理数学表达式及其数值数据的NLP应用程序。这种能力在需要解释用户提示中数学表达式的生成式AI系统中特别有用。
Parser类及其evaluate()方法旨在以比JavaScript原生eval()函数更安全的方式提供用户定义的表达式。这种设计选择对于基于npm的项目至关重要,特别是在服务器环境中运行的项目,因为访问系统的本地资源可能带来安全风险。
根据npmjs.com的数据,expr-eval拥有超过250个依赖包,包括oplangchain等集成,这是流行LangChain框架的JavaScript实现。相关项目expr-eval-fork的创建是为了解决原始expr-eval存储库中未解决的原型污染漏洞(问题#266),该存储库似乎已不被原作者维护。
新发现的漏洞允许攻击者在解析器使用的上下文对象中定义任意函数。这种能力可被利用来注入执行系统级命令的恶意代码,可能访问敏感的本地资源或窃取数据。该问题已通过拉取请求#288得到修补。该漏洞被跟踪为CVE-2025-12735以及GitHub咨询GHSA-jc85-fpwf-qm7x。这些标识符使npm audit等自动化工具能够检测受影响项目中的漏洞。
影响
能够影响由expr-eval处理的输入字段的攻击者可以制作恶意负载,触发主机系统上的任意命令执行。
根据SSVC框架,这构成了技术影响=完全,意味着:
该漏洞使对手能够完全控制软件的行为,或完全披露受影响系统上的所有信息。
解决方案
建议开发者和用户:
- 应用来自拉取请求#288的安全补丁,或
- 升级到可用的expr-eval或expr-eval-fork包的最新修补版本。npm包expr-eval-fork v3.0.0解决了此问题。
注意:该补丁引入了:
- 通过evaluate()访问的安全函数的定义允许列表
- 自定义函数的强制注册机制
- 更新的测试用例,确保这些约束的强制执行能够被理解和应用
致谢
感谢报告者Jangwoo Choe(UKO)负责任地披露此问题。我们还感谢GitHub Security和npm的主动安全咨询和自动化漏洞审计。本文档由Vijay Sarvepalli和Renae Metcalf编写。
供应商信息
expr-eval-fork
状态:未知 通知日期:2025-10-14 更新日期:2025-11-07 CVE-2025-12735 状态:未知
供应商声明:我们尚未收到供应商的声明。
silentmatt
状态:未知 通知日期:2025-09-11 更新日期:2025-11-07 CVE-2025-12735 状态:未知
供应商声明:我们尚未收到供应商的声明。
参考链接
- https://github.com/silentmatt/expr-eval
- https://github.com/jorenbroekema/expr-eval
- https://www.npmjs.com/package/expr-eval-fork
- https://www.npmjs.com/package/expr-eval
- https://github.com/silentmatt/expr-eval/pull/288
其他信息
CVE ID:CVE-2025-12735
公开日期:2025-11-07 首次发布日期:2025-11-07 最后更新日期:2025-11-10 21:52 UTC 文档修订版:3