Node.js 因为 OpenSSL 安全问题推迟更新

  • 百占辉

2015 年 12 月 15 日

话题:安全Node.js语言 & 开发架构

之前Node.js 基金会曾承诺将修复两个危险漏洞,并更新所有长期维护和稳定的 Node.js 分支。上周补丁已经发布并预计在本周发布更新,但为了包含最新的 OpenSSL 版本,基金会决定推迟更新,这是因为 OpenSSL 中的漏洞也影响了 Node.js。

上述提到的漏洞分别为拒绝服务漏洞 (CVE-2015-8027) 和内存越界访问漏洞 (CVE-2015-6764)。

拒绝服务漏洞影响了从 v0.12.x 至 v5.x 的所有 Node.js 版本。将其标记为危险漏洞是因为外部恶意攻击者可以通过此漏洞关闭运行在指定系统的 Node.js 服务。在一定的条件下,HTTP SOCKET 可能无法获取到与之相关的解析器,但一个流水线请求可能会在没有解析器的情况下触发暂停或者恢复操作,这将会抛出 uncaughtException。对外提供 HTTP 服务的被影响用户应该尽快升级到已修复版本,具体为:Node.js 0.12.x 应升级至 Node.js 0.12.9 (LTS);Node.js 4.x 包括 LTS Argon 应升级至 Node.js 4.2.3 Argon (LTS);Node.js 5.x 应升级至 Node.js 5.1.1 (Stable)。

访问越界漏洞被发现于 V8 引擎的JSON.stringify()实现中,json-stringifier.h的函数BasicJsonStringifier::SerializeJSArray未正确加载数组元素,远程攻击者通过构造的 JS 代码,利用此漏洞可造成拒绝服务(越界内存访问)。。这个问题被 Google Chrome 归类为非常严重的漏洞并在本周 Chrome 稳定版的升级中被修复。该漏洞对于 Node.js 用户来说风险较低,因为只有第三方的特定 JavaScript 代码在应用中被执行才会触发。只有对外提供服务且可能执行不信任的 JavaScript 代码的用户会有风险,但所有用户都应进行升级,具体为:Node.js 4.x 包括 LTS Argon 应升级至 Node.js 4.2.3 Argon (LTS);Node.js 5.x 应升级至 Node.js 5.1.1 (Stable)。

OpenSSL 中的漏洞也会影响 Node.js。尽管 Node.js 0.10.x 没有被上述问题影响,但由于它依赖于 OpenSSL v1.0.1,而 OpenSSL v1.0.1 和 1.0.2(CVE-2015-3194) 可能在证书检查过程中被提供了使用 RSA PSS 算法生成的存在缺陷的 ASN.1 签名而导致崩溃,攻击者可以利用该缺陷使用客户端授权进行拒绝服务攻击 Node.js 服务器,所以还是需要升级。Node.js 4.x LTS 5.x 同样受到了 OpenSSL 1.0.2 中 Montgomery 平方过程中的错误的影响,针对 RSA 和 DSA 进行攻击是有可能的,尽管非常困难。

Node.js 基金会拥有最流行的 JavaScript 服务器平台的管辖权。而 OpenSSL 则完全是一个独立的项目,由自己的团队维护。Heatbleed 事件已经表明,OpenSSL 被广泛用于各种应用,所以更新 OpenSSL 通常会引起各种连锁反映,这就是为什么 OpenSSL 步伐缓慢,Node.js 基金会不得不等待,推迟更新。如果基金会不等待按照计划发布了更新,几天后再同修复的 OpenSSL 发布新的版本,这将造成更多混乱,例如一些开发者可能错过第二次更新的提示,或者将意识不到过期的 OpenSSL 的影响。

许多开发人员甚至都不知道他们应用中的所有组件,他们不知道调用了哪些 libraries,更别说这些被调用的 libraries 可能依赖了其他 libraries,这导致了当项目中出现了有漏洞的代码的时候很难通知他们。开源代码是普遍紧密联系着的,任何依赖关系树中的代码出现问题都可能有着深远而广泛的影响。


感谢魏星对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

安全Node.js语言 & 开发架构