Node.js HTTP 模块拒绝服务漏洞(已于 v0.8.26 及 v0.10.21 中被修复)

2013/10/22 17:42:10 原载于 Node.js 官方博客 / XiNGRZ 编译

Node.js 中的这一拒绝服务攻击漏洞为:当客户端在一条连接内发送大量管线化 HTTP 请求、并且不从连接读取响应,将会导致服务中断。

我们建议所有 Node.js v0.8 或 v0.10 运行在生产环境的 HTTP 服务器尽快更新此版本。

对此 Node .js 的修复方案是,在套接字的下行可写端等待 drain 事件时暂停套接字和 HTTP 解析器。对攻击者来说,套接字最终会超时并被服务器销毁。如果「攻击者」并不存在恶意,只是发送了大量请求而无法尽快处理,那么该连接的吞吐量会减小至该客户端所能承受的范围。

程序语义未产生改变,并且除了所述极端情况,无需作任何变更。

如果没有条件升级,那么在 Node.js 服务器前布置一个 HTTP 代理亦可缓解此漏洞,前提是这个代理能自行解析 HTTP 并且不会被这个管线化拒绝服务攻击放倒。

举个栗子,Nginx 能够防范此攻击(因为缺省情况下它会关闭管线化请求达到 100 个的连接),但 raw TCP 模式的 HAProxy 则不能(因为它直接代理 TCP 连接而不理会 HTTP 语义)。

漏洞代号 CVE-2013-4450。

    原文作者:XiNGRZ
    原文地址: https://segmentfault.com/a/1190000000325531
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞