ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Node.js 11.3.0 安全发布(Current)解读:HTTP 头限制、Slowloris 防护与 OpenSSL 升级

Node.js 11.3.0 安全发布(Current)解读:HTTP 头限制、Slowloris 防护与 OpenSSL 升级 Node.js 11.3.0 安全发布Current解读HTTP 头限制、Slowloris 防护与 OpenSSL 升级【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org本篇技术指南围绕 Node.js 官方网站nodejs.org仓库中的历史安全发布公告 v11.3.0 发布说明 展开系统梳理 Node.js 11.3.0Current 版本作为一次安全发布所修复的 CVE 漏洞、代码级修复方案、OpenSSL 依赖升级内容以及配套发布的下载与校验信息。读者读完本文将能够理解 HTTP 头大小限制与 Slowloris 慢速攻击防护的实现原理、url.parse()主机名欺骗漏洞的成因并掌握如何核对官方发布物完整性、理解发布公告的生成机制。一、发布背景一次面向全部活跃版本线的安全更新Node.js 11.3.0 于 2018 年 11 月 28 日发布属于Current当前版本线的安全发布。该版本的作者发布人为 Rod Vagg发布说明明确提示这是一次安全发布所有 Node.js 用户都应查阅配套的安全发布总结——即仓库中的 November 2018 Security Releases 公告以了解被修复漏洞的详细影响评估。从配套公告可以看到这次安全更新并非只针对 11.x 单一版本线而是覆盖当时所有处于活跃维护期的发布线Node.js 11.3.0CurrentNode.js 10.14.0LTS DubniumNode.js 8.14.0LTS CarbonNode.js 6.15.0LTS Boron其中 Node.js 6 和 8 升级到 OpenSSL 1.0.2qNode.js 10 和 11 升级到 OpenSSL 1.1.0j。官方建议所有用户尽快升级到上述版本之一。值得注意的是随后的 12 月 3 日Node.js 6.15.1LTS Boron又被发布用于修复 6.15.0 中一个回移backport错误——这从侧面说明安全修复在跨版本线回移时同样需要严格的验证流程。二、本次发布修复的 CVE 清单v11.3.0 发布说明列出了本次包含的 CVE 修复共 5 项。结合配套安全公告 november-2018-security-releases.md 中的分类与影响评估整理如下CVE 编号漏洞主题严重级别所属模块CVE-2018-12121大 HTTP 头导致的拒绝服务CWE-400HIGHhttpCVE-2018-12122Slowloris HTTP 拒绝服务CWE-400LOWhttp / httpsCVE-2018-12123url.parse()对 javascript 协议的主机名欺骗CWE-115LOWurlCVE-2018-0734OpenSSL DSA 签名生成时序漏洞LOWdepsOpenSSLCVE-2019-0735OpenSSL ECDSA 签名生成时序漏洞LOWdepsOpenSSL说明CVE-2019-0735 虽以 2019 年份编号但其修复随 2018 年 11 月的 OpenSSL 1.1.0j 一起合入因此出现在本发布说明中。除上述外配套安全公告还记录了同批次修复但未影响 Node.js 11的另外两个漏洞CVE-2018-12120调试器端口 5858 默认监听所有接口仅影响 Node.js 6与 CVE-2018-12116HTTP 请求拆分仅影响 Node.js 6 和 8。这解释了为什么 v11.3.0 发布说明中只列出了 5 个 CVE——不同版本线受影响范围不同发布说明只列出与本版本相关的修复。三、HTTP 层安全修复详解3.1 大 HTTP 头拒绝服务CVE-2018-121218 KB 头大小上限漏洞原理Node.js 6 及以后的所有版本均受影响严重级别为 HIGH。攻击者通过组合大量携带接近最大尺寸头每个连接约 80 KB的请求并精心控制头的完成时机可以触发 HTTP 服务器因堆分配失败heap allocation failure而中止。若服务前端有负载均衡器或其他代理层攻击潜力会被削弱。修复方案Node.js 11.3.0 起HTTP 服务器接收到的请求头总大小不得超过 8192 字节8 KB。该限制同时施加在底层解析器层面llhttp解析器设置了最大头大小为 8 KB提交a2b8aba23c对应deps,http变更http_parser解析器同样设置了最大头大小为 8 KB提交74e01d0020同时修复了llhttp解析器复用时的headers_nread_计数器未重置问题提交4ecbd3bdaa并补充了头大小超限的错误处理与对应测试提交04e0620597。这一系列提交说明头大小限制不是仅在 JavaScript 层做简单判断而是深入到底层 C 解析器同时保证解析器在连接复用keep-alive场景下计数状态正确避免绕过。3.2 Slowloris 慢速头攻击防护CVE-2018-12122server.headersTimeout与 40 秒超时漏洞原理攻击者通过非常缓慢地发送 HTTP 头可以让 HTTP/HTTPS 连接及其关联资源长时间存活从而耗尽服务器资源造成拒绝服务。该漏洞影响 Node.js 6 及以后所有版本严重级别为 LOW同样可通过负载均衡层缓解。修复方案Node.js 11.3.0 起服务器接收 HTTP 头新增 40 秒超时并可通过server.headersTimeout属性调整如果在规定时间内未完整收到头socket 将在收到下一个数据块chunk时被销毁与server.setTimeout()配合使用可防止过多资源驻留降低拒绝服务风险。这是一个(SEMVER-MINOR)的 API 增强提交315ee2e626http,https模块共同受益因为它为http.Server引入了新的可配置属性。对于需要更宽松或更严格头接收窗口的服务可以通过设置server.headersTimeout来自定义超时值单位为毫秒。3.3 影响评估各版本线的暴露情况根据配套安全公告这两个 HTTP 漏洞对所有 6/8/10/11 版本线都有影响因此本批次四个发布版本11.3.0、10.14.0、8.14.0、6.15.0都包含对应的 http 修复。而 v11.3.0 发布说明中的Commits部分也证实了这一点修复以私有仓库nodejs-private的 pull request 形式先合入再随公开发布同步公开。四、URL 解析器主机名欺骗修复CVE-2018-12123漏洞原理当应用使用url.parse()解析 URL 并据此判断主机名hostname时攻击者可以通过混合大小写的javascript:协议例如javAscript:欺骗解析结果。如果应用基于解析出的主机名做安全决策如白名单校验就可能得出错误结论。其他协议不受影响严重级别为 LOW。修复方案修复提交为d7504324e1url模块避免 javascript 协议下的主机名欺骗。修复思路是让 URL 解析器在处理 javascript 协议时不再信任可被混淆的输入从而保证url.parse()返回的主机名真实可信。防御建议即便升级到修复版本也建议应用层不要仅依赖url.parse()返回的 hostname 做安全边界判断可配合协议白名单、规范化后再校验等多层手段。五、OpenSSL 依赖升级DSA 与 ECDSA 时序侧信道修复5.1 升级内容v11.3.0 将内置 OpenSSL 从 1.1.0 系列升级到OpenSSL 1.1.0j一次性修复两个签名算法时序侧信道漏洞CVE-2018-0734DSADSA 签名算法存在时序侧信道漏洞攻击者可通过观察签名过程中的时间变化恢复私钥CVE-2019-0735ECDSAECDSA 签名算法同样存在时序侧信道漏洞可被用于恢复私钥。两个漏洞严重级别均为 LOW。DSA 漏洞影响 6/8/10/11 所有版本线而 ECDSA 漏洞仅影响 10 和 11 版本线6 和 8 不受影响——因此 11.3.0 的依赖升级只针对 11.x 自身的 OpenSSL 绑定。5.2 升级相关的提交链发布说明中列出的 OpenSSL 升级提交完整呈现了升级依赖的标准操作流程8f191f3759更新 OpenSSL 1.1.0 升级文档f20ac47d7a更新 OpenSSL-1.1.0 的架构文件archs files8248d227b7为 OpenSSL-1.1.0 新增 s390 汇编规则65d03f0180将 OpenSSL 源码升级到 1.1.0j。值得注意的是 s390 汇编规则的加入Node.js 的 OpenSSL 绑定需要为不同 CPU 架构维护汇编优化规则s390x 是当时官方支持的架构之一这也可以从下方下载列表中的node-v11.3.0-linux-s390x.tar.xz得到印证。六、下载物清单与校验信息6.1 各平台二进制与源码包v11.3.0 发布说明列出了完整的下载物清单对应 downloadsTable.mjs 中定义的下载模板按版本渲染平台文件Windows 32 位安装器node-v11.3.0-x86.msiWindows 64 位安装器node-v11.3.0-x64.msiWindows 32 位二进制win-x86/node.exeWindows 64 位二进制win-x64/node.exemacOS 64 位安装器node-v11.3.0.pkgmacOS 64 位二进制node-v11.3.0-darwin-x64.tar.gzLinux 64 位二进制node-v11.3.0-linux-x64.tar.xzLinux PPC LE 64 位二进制node-v11.3.0-linux-ppc64le.tar.xzLinux s390x 64 位二进制node-v11.3.0-linux-s390x.tar.xzAIX 64 位二进制node-v11.3.0-aix-ppc64.tar.gzSmartOS 64 位二进制node-v11.3.0-sunos-x64.tar.xzARMv6 32 位二进制node-v11.3.0-linux-armv6l.tar.xzARMv7 32 位二进制node-v11.3.0-linux-armv7l.tar.xzARMv8 64 位二进制node-v11.3.0-linux-arm64.tar.xz源码包node-v11.3.0.tar.gz所有文件均托管于https://nodejs.org/dist/v11.3.0/目录下官方 API 文档位于https://nodejs.org/docs/v11.3.0/api/。从仓库的下载表生成逻辑看该清单会随版本号语义化地调整——例如小于 16.0.0 的版本不含 macOS Apple Silicon 二进制小于 19.9.0 的版本不含 Windows ARM 产物这解释了历史版本下载列表的差异来源。6.2 SHASUMS 与 PGP 签名校验发布说明末尾附带了完整的SHASUMS256.txt.asc内容包含三部分SHA-256 校验和覆盖上述每个下载文件的哈希值用于验证下载文件完整性PGP 签名整个校验文件使用 OpenPGP 签名-----BEGIN PGP SIGNED MESSAGE-----/-----END PGP SIGNATURE-----用于验证校验和文件本身确实来自 Node.js 官方发布渠道签名元信息包含哈希算法SHA256与签名指纹信息iQEzBAEBCAAdFiEE3Y8jOLrnUB491ax4wnN5L32DVF0FAlv95CwA。校验实践建议下载后应使用sha256sumLinux/macOS或Get-FileHashWindows PowerShell比对发布说明中的哈希值同时用 Node.js 官方公开密钥验证 PGP 签名防止下载物在传输途中被篡改——尤其是本次发布本身就是为了修复安全漏洞校验环节不可省略。七、发布公告的生产流程从 Changelog 到发布页面v11.3.0 发布说明这类文档并非完全手写仓库中的 release-post/index.mjs 脚本揭示了其自动化生成流程获取版本通过命令行参数node index.mjs [version]指定版本省略时从https://nodejs.org/dist/index.json自动取最新版本号拉取 Changelog从CHANGELOG_V{n}.md中用正则提取a id{version}/a锚点对应的版本段落作为正文主体fetchChangelog/fetchChangelogBody解析发布作者从 Changelog 段落头如## 2018-11-28, Version 11.3.0 (Current), rvagg解析出作者 GitHub 用户名再查询其资料得到显示名fetchAuthor解析版本策略从段落头括号中提取Current/LTS等策略标记fetchVersionPolicy拉取 SHASUMS从https://nodejs.org/dist/v{version}/SHASUMS256.txt.asc拉取校验和内容fetchShasums验证下载物对 downloadsTable.mjs 生成的全部下载 URL 逐个发起 HEAD 请求验证存在性不存在的标记为*Coming soon*verifyDownloads/urlOrComingSoon渲染与落盘通过 template.hbs 的 Handlebars 模板组装出完整 Markdown再经 Prettier 格式化后写入pages/en/blog/release/v{version}.md。模板结构date、category: release、title、layout: blog-post、author等 frontmatter 加正文与 v11.3.0 发布说明的最终形态完全吻合说明该文档正是此流程的产物。这一机制保证了每次发布公告的下载清单、SHASUMS、版本策略等信息的一致性与准确性是 Node.js 发布工程化的重要组成部分。八、升级建议与后续关注立即升级所有使用 Node.js 6/8/10/11 的用户都应尽快升级到对应版本线的最新安全版本11.3.0 或更高以规避 HTTP 头 DoS、Slowloris 与主机名欺骗风险配置检查若应用依赖超大自定义请求头超过 8 KB需评估是否受影响并调整架构如改为通过 body 传递数据或调整代理层配置若需要调整头接收超时可显式设置server.headersTimeout关注发布线状态Node.js 11 属于 Current非 LTS版本线其后续演进与维护窗口可参考仓库中的版本数据生成逻辑 releaseData.mjs——该模块根据各主版本线的 LTS 标记与 EOL 日期动态计算Current/LTS/EOL状态帮助用户判断当前所处发布线的支持周期安全公告订阅安全相关发布均归档在仓库apps/site/pages/en/blog/vulnerability/目录并配套各版本线的 release 公告可作为审计与溯源的一手资料。参考资料Node.js 11.3.0 发布说明本主题文档November 2018 Security Releases 安全公告发布公告生成脚本发布公告 Markdown 模板下载清单生成逻辑发布版本状态数据生成逻辑【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表