2013/10/22 17:42:10 原载于 Node.js 官方博客 / XiNGRZ 编译
Node.js 中的这一拒绝服务攻击漏洞为:当客户端在一条连接内发送大量管线化 HTTP 请求、并且不从连接读取响应,将会导致服务中断。
我们建议所有 Node.js v0.8 或 v0.10 运行在生产环境的 HTTP 服务器尽快更新此版本。
- v0.10.21 http://blog.nodejs.org/2013/10/18/node-v0-10-21-stable/
- v0.8.26 http://blog.nodejs.org/2013/10/18/node-v0-8-26-maintenance/
对此 Node .js 的修复方案是,在套接字的下行可写端等待 drain 事件时暂停套接字和 HTTP 解析器。对攻击者来说,套接字最终会超时并被服务器销毁。如果「攻击者」并不存在恶意,只是发送了大量请求而无法尽快处理,那么该连接的吞吐量会减小至该客户端所能承受的范围。
程序语义未产生改变,并且除了所述极端情况,无需作任何变更。
如果没有条件升级,那么在 Node.js 服务器前布置一个 HTTP 代理亦可缓解此漏洞,前提是这个代理能自行解析 HTTP 并且不会被这个管线化拒绝服务攻击放倒。
举个栗子,Nginx 能够防范此攻击(因为缺省情况下它会关闭管线化请求达到 100 个的连接),但 raw TCP 模式的 HAProxy 则不能(因为它直接代理 TCP 连接而不理会 HTTP 语义)。
漏洞代号 CVE-2013-4450。