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

2015 年 12 月 15 日

之前 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))。

2015 年 12 月 15 日 18:001331
用户头像

发布了 32 篇内容, 共 15.1 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

Flink高可用性设置-4

小知识点

scala 大数据 flink 流计算

JVM-技术专题-管程技术分析

李浩宇/Alex

JVM 管程

Jenkins 详解

雪雷

jenkins

Docker+Jenkins+Gitlab+Django应用部署实践

雪雷

DevOps jenkins CI/CD

Linux自定义快捷工具

雪雷

Linux Shell tools scripts

JVM-技术专题-GCViewer调优GC

李浩宇/Alex

JVM

性能优化-技术专题-并发编程

李浩宇/Alex

Java 多线程

Jenkins部署Python项目实战

雪雷

Python jenkins CI/CD

Golang领域模型-开篇

奔奔奔跑

golang 微服务 领域驱动设计 架构设计 后端开发

微服务注册发现配置中心-consul

雪雷

Consul 服务注册与发现 配置中心

RabbitMQ实践

雪雷

RabbitMQ 消息队列

Ceph集群部署

雪雷

分布式存储 Ceph rdb pvc

微服务API网关-Kong详解

雪雷

kong api 网关

API统一管理平台-YApi

雪雷

YAPI API接口管理

业务容器化改造

雪雷

Docker 容器 微服务 服务化改造

lower_case_table_names参数详解

Simon

MySQL

Docker Web管理工具

雪雷

Docker shipyard dockerui

Python利用sphinx构建个人博客

雪雷

sphinx Blog

Guacamole实战

雪雷

guacamole 远程登录 堡垒机

Linux系统检查脚本

雪雷

Shell 系统检测

记一次混合监控的反思

雪雷

监控 zabbix redis监控 监控宝

探测mysqldump详细过程

Simon

MySQL

MySQL线程状态详解

Simon

MySQL 线程状态

API 中签名的使用

flyer0126

接口安全

Serverless初探

雪雷

Serverless Lambda 无服务器云函数

SonarQube集成gitlab/jenkins

雪雷

jenkins sonar gitlab ci 代码扫描

Gitlab Pipeline+Supervisor 实战Python项目CI/CD

雪雷

gitlab jenkins CI/CD Supervisor

记一次混合云API发布的反思

雪雷

iptables API api发布

Apache常用配置指北

亻尔可真木奉

Apache 代理 跨域

Elasticsearch安装

北漂码农有话说

同态加密

soolaugust

学习 加密 同态加密

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