 安全更新发布详解:CVE 修复、下载资源与 SHASUMS 校验指南)
Node.js 14.16.0 (LTS) 安全更新发布详解CVE 修复、下载资源与 SHASUMS 校验指南【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.orgNode.js v14.16.0 是发布于 2021 年 2 月 23 日的 LTS长期支持版本其核心目的是修复 3 个安全漏洞含 2 个 Node.js 自身漏洞与 1 个 OpenSSL 上游漏洞属于必须尽快升级的安全更新版本。本文以 nodejs.org 网站仓库中的官方发布公告 v14.16.0.md 为主体逐项解读漏洞原理、修复提交、各平台安装包下载清单以及 PGP 签名校验和的验证方法帮助你安全地完成升级与部署。版本概览与发布背景根据发布公告的 frontmatter 元数据见 v14.16.0.md本次发布的关键信息如下项目值版本号14.16.0发布状态LTS长期支持发布日期2021-02-23发布类别release发布作者Bethany Nicolle Griggs在 Node.js 的版本节奏中偶数主版本10、12、14……会进入 LTS 阶段奇数主版本保持 Current 状态。v14 系列于 2020 年 10 月进入 LTS本次 14.16.0 是一个典型的安全维护版本不引入新特性唯一的功能性改动是一个SEMVER-MINOR级别的超时机制重点是修复 3 个影响面不同的安全漏洞。说明本文仓库nodejs.org 网站中保留了从 v0.10 到 v26 的全部历史发布公告本篇文章对应文件为 apps/site/pages/en/blog/release/v14.16.0.md。三大安全漏洞修复详解本版本的Notable changes部分声明了 3 个被修复的漏洞其中 2 个CVE-2021-22883、CVE-2021-22884是 Node.js 自身的安全问题1 个CVE-2021-23840来自 OpenSSL 上游依赖。CVE-2021-22883HTTP/2 unknownProtocol 资源耗尽型拒绝服务影响范围所有受影响的 Node.js 版本漏洞机制当攻击者以unknownProtocol建立大量连接尝试时服务器会泄漏文件描述符file descriptor。后果如果系统配置了文件描述符上限服务器将无法接受新连接进程也会因资源耗尽而无法打开文件等资源如果系统未配置文件描述符上限则会导致内存占用失控最终使系统内存耗尽。这是一个典型的**资源耗尽DoS**类漏洞攻击者不需要执行任意代码只需要不断发起特定协议类型的连接即可拖垮服务。修复方式是引入unknownProtocol超时机制见下文提交记录中的SEMVER-MINOR改动让非法协议的连接在一定超时后被主动断开避免资源被无限占用。CVE-2021-22884--inspect 场景下的 DNS rebinding 绕过影响范围当--inspect的白名单包含localhost6时受影响漏洞机制当/etc/hosts中不存在localhost6条目时localhost6只是一个通过 DNS 解析的普通域名即经由网络解析。如果攻击者控制了受害者的 DNS 服务器或能伪造 DNS 响应就可以利用localhost6这个域名绕过 DNS rebinding 防护从而继续实施 CVE-2018-7160 中描述的攻击。修复方式从 inspector 的允许主机列表中移除localhost6。这里需要理解 inspector调试器的安全模型node --inspect默认只允许来自本机localhost的调试连接防止远程攻击者连入调试端口执行任意 JS。DNS rebinding 攻击利用浏览器在访问恶意站点时把域名解析到127.0.0.1的特性让恶意网页与本地调试端口通信。localhost6若是普通 DNS 域名而非真正的本机回环地址攻击者就能用自己控制的 DNS 响应把该域名解析到任意地址从而绕过白名单限制。CVE-2021-23840OpenSSL CipherUpdate 整数溢出影响范围通过 Node.js 可触发的 OpenSSL 上游漏洞漏洞机制OpenSSL 的CipherUpdate函数存在整数溢出问题这是一个位于加密库底层的缺陷Node.js 通过依赖 OpenSSL 而受影响。修复方式将 OpenSSL 源码升级到 1.1.1j。这条修复说明了一个重要实践Node.js 的加密能力依赖 OpenSSL 库上游库的漏洞会随 Node.js 一并暴露给应用。因此 Node.js 团队在收到 OpenSSL 安全公告后会同步升级依赖并发布安全版本。安全数据在本网站中的呈现从仓库源码看本网站nodejs.org会从 Node.js 安全工作组仓库拉取漏洞数据并按大版本分组展示。核心逻辑位于 vulnerabilities.mjs它使用正则RANGE_REGEX /([]?)\s*(\d)(?:\.(\d))?/解析漏洞影响的版本范围如14.0.0、14.16.0并通过vulnerable.split( || )支持多个版本区间对于这类上限表达式会把所有低于该版本的大版本都归入受影响组。也就是说像 CVE-2021-22883 这类影响所有旧版本的漏洞会在网站的 EOL生命周期结束与安全漏洞页面中准确关联到 v14 等历史大版本上。该生成器对应类型定义见 vulnerabilities.ts。修复提交记录本次发布包含 4 个关键提交来自官方发布公告提交哈希为原文记录提交哈希类型模块说明关联 PR313d26800cdepsOpenSSL更新 OpenSSL-1.1.1j 的架构文件#374126098012b48depsOpenSSL将 OpenSSL 源码升级到 1.1.1j#37412afea10b097SEMVER-MINORhttp2为 unknownProtocol 添加超时机制nodejs-private/node-private#2461ca3f5abcbsrcinspector移除 localhost6 作为 inspector 允许主机nodejs-private/node-private#244可以看出修复策略分两条线依赖升级前两个提交313d26800c、6098012b48解决 OpenSSL 整数溢出CVE-2021-23840由 Daniel Bevenius 负责通过 PR #37412 合入。Node.js 自身加固后两个提交解决 HTTP/2 与 inspector 问题分别由 Daniel Bevenius 和 Matteo Collina 完成且都通过私有的nodejs-private/node-private仓库协作安全漏洞在修复公开前通常先在私有仓库中处理避免提前暴露攻击面。注意afea10b097标记为SEMVER-MINOR意味着在语义化版本中它属于向后兼容的新功能级别——为unknownProtocol连接引入超时机制既有修复性质也引入了可配置行为因此在语义化版本上被标记为 minor 而非 patch。官方下载资源清单v14.16.0 提供了覆盖 Windows、macOS、Linux、AIX 及多种 CPU 架构的安装包与二进制。以下是发布公告列出的完整清单Windows 32-bit Installer:https://nodejs.org/dist/v14.16.0/node-v14.16.0-x86.msiWindows 64-bit Installer:https://nodejs.org/dist/v14.16.0/node-v14.16.0-x64.msiWindows 32-bit Binary:https://nodejs.org/dist/v14.16.0/win-x86/node.exeWindows 64-bit Binary:https://nodejs.org/dist/v14.16.0/win-x64/node.exemacOS 64-bit Installer:https://nodejs.org/dist/v14.16.0/node-v14.16.0.pkgmacOS 64-bit Binary:https://nodejs.org/dist/v14.16.0/node-v14.16.0-darwin-x64.tar.gzLinux 64-bit Binary:https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xzLinux PPC LE 64-bit Binary:https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-ppc64le.tar.xzLinux s390x 64-bit Binary:https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-s390x.tar.xzAIX 64-bit Binary:https://nodejs.org/dist/v14.16.0/node-v14.16.0-aix-ppc64.tar.gzARMv7 32-bit Binary:https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-armv7l.tar.xzARMv8 64-bit Binary:https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-arm64.tar.xzSource Code:https://nodejs.org/dist/v14.16.0/node-v14.16.0.tar.gzOther release files:https://nodejs.org/dist/v14.16.0/Documentation:https://nodejs.org/docs/v14.16.0/api/关于平台产物的选择可以从仓库的发布脚本 downloadsTable.mjs 中看到更完整的视角该脚本维护了一份 16 种产物的模板列表并根据语义化版本过滤历史版本不存在的产物——例如semVer.satisfies(version, 16.0.0)时去掉 macOS Apple Silicon 二进制v14.16.0 时期确实没有 arm64 macOS 产物与上面清单吻合 19.9.0时去掉 Windows ARM 产物 23.0.0时去掉 Windows 32 位产物。因此发布公告中的清单是与该版本时代产物一一对应的。本网站的实际下载页面download/current.mdx会通过Release.VersionDropdown /、Release.OperatingSystemDropdown /、Release.PrebuiltDownloadButtons /等组件让访问者按版本、操作系统、安装方式nvm、包管理器等和 CPU 架构筛选预编译二进制并支持跳转到对应版本的 changelog 与发布博客。SHASUMS 校验确保下载文件完整性与真实性安全版本尤其需要警惕下载被篡改。官方发布公告在 SHASUMS 一节中提供了完整的PGP 签名校验和文件SHASUMS256.txt.asc用于验证每个产物的 SHA-256 哈希与签名真实性。以下是 v14.16.0 公告中的完整校验清单-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 086c8b4aa726c3b197765c9f66e05b25f8e811853d0686dfbf380299b4bf5869 node-v14.16.0-aix-ppc64.tar.gz 14ec767e376d1e2e668f997065926c5c0086ec46516d1d45918af8ae05bd4583 node-v14.16.0-darwin-x64.tar.gz e20317c315198b3a6eaefbcf60b76082558d63be264736d56ecc7f5b0dabe60b node-v14.16.0-darwin-x64.tar.xz 4b44b92903a61c29af20550f9d25bfc3029657df6b5f0a12072a70360f7eedee node-v14.16.0-headers.tar.gz e0704d9f5accdb876dd45be1b2ade2176219893b8a5df863130f3d9a11e69702 node-v14.16.0-headers.tar.xz 2b78771550f8a3e6e990d8e60e9ade82c7a9e2738b6222e92198bcd5ea857ea6 node-v14.16.0-linux-arm64.tar.gz 440489a08bfd020e814c9e65017f58d692299ac3f150c8e78d01abb1104c878a node-v14.16.0-linux-arm64.tar.xz a64860a02e4b692d262d453952cae99a3c9842d3fc90336b54ca03e990c780b8 node-v14.16.0-linux-armv7l.tar.gz 5d28ac28088c9a8c679285ed09df979125982941eec2c7cb465eee9a3b0be3c0 node-v14.16.0-linux-armv7l.tar.xz 2339b4b1a8db39348cb1877b0cfdee3b2ef2b730f461ef7263610cbaaea5232a node-v14.16.0-linux-ppc64le.tar.gz 47a3768924a1f09ab8f9f50d0c73503e7bf9bb5a2bee58acf91e1e02d412ec78 node-v14.16.0-linux-ppc64le.tar.xz 485d6f38270de0763d9132b78fc88cefc8312a71f53587c874a2c09e58396057 node-v14.16.0-linux-s390x.tar.gz 335348e46f45284b6356416ef58f85602d2dee99094588b65900f6c8839df77e node-v14.16.0-linux-s390x.tar.xz 7212031d7468718d7c8f5e1766380daaabe09d54611675338e7a88a97c3e31b6 node-v14.16.0-linux-x64.tar.gz 2e079cf638766fedd720d30ec8ffef5d6ceada4e8b441fc2a093cb9a865f4087 node-v14.16.0-linux-x64.tar.xz 8f8f6f7b6db7c518be52878a3a58d48bcd575446a9c6ce75a60cdb6cfe1a3dd0 node-v14.16.0.pkg f6b904b06951de4c52089dd4456155d853e835b0dc4640f75458c6eb49f9e8ce node-v14.16.0.tar.gz 4e7648a617f79b459d583f7dbdd31fbbac5b846d41598f3b54331a5b6115dfa6 node-v14.16.0.tar.xz 67f352be37b1b0c00ff7531e6b2a93b0021e5f06743f16394b9dbd6fc47a7fe9 node-v14.16.0-win-x64.7z 716045c2f16ea10ca97bd04cf2e5ef865f9c4d6d677a9bc25e2ea522b594af4f node-v14.16.0-win-x64.zip 0f862027290301918db84dd705024a9b623a08f2ad86dfb3829c32c9c050e25c node-v14.16.0-win-x86.7z 9699067581e0d333b13158d4ebb27b6357444564548aaa220d821cdc6d840bd2 node-v14.16.0-win-x86.zip d9243c9d02f5e4801b8b3ab848f45ce0da2882b5fff448191548ca49af434066 node-v14.16.0-x64.msi 61d549ed39fc264df9978f824042f3f4cac90a866e933c5088384d5dedf283fe node-v14.16.0-x86.msi 5c10d99cc7229fd8092585f7a5e15771d62dc84b9edeb0c2140a2d187b305506 win-x64/node.exe 3f67805bbcfea13e9acc892f4590cacc5eb2514ac817d003f5327c07a2385a0d win-x64/node.lib fe3cab4ca83172f495b83710731224e01cd936c2d823a53480bed1113fa704f8 win-x64/node_pdb.7z 099ed74db3ceb4e47816bd1a9d792a4ab465ba60ec945b65e95e24b7049f76e0 win-x64/node_pdb.zip c7b723504b5ee487785a12989026db061f5ee1fb120826fcc1afcbec5fc5d1d5 win-x86/node.exe dfe06cfa2c95a49a92bfebc8f68ec1216b951c9363cfc8b36fbc80fc1588fb15 win-x86/node.lib 235bc5ec83e9dfd328dbca9c71f2f036f9bb13d2378c3869ced7a1edc5ff63a1 win-x86/node_pdb.7z 58a50e0a495189c054c96e76d2f9a6c8f45d6880852db3404eaca99a133c91a4 win-x86/node_pdb.zip -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEETtd49TnjY0x3nIfG1wYoSKGrAFwFAmA0/HgACgkQ1wYoSKGr AFxqNQgArjEJi6JfqFHsMDkKp75ZHZY7X1VjbwaPZd7r1dY4gbe/ZqHdXEzVHEB Y1Pbqrkng8zOzHDWqxGhjuOYCwjcKynLAKcfKqCpZ/reqQzf2lmdB2zM8clqGr rWT9auJz4JtxC5cSQ48rEjju2aQpwSARlrZepr99k8QoRWL8lZhp8t/ccYwWMunN oE8v/4wR1WX23GnQmAze9I7ABYmxClFmDSUG85ml4VAI7G0bLiH72gCe6sJR2Ms e5gS5XqbRvth4oUH4f/IRRoS0BOl5oXY74Qg2d23qMG6WKBu6Gu/phcFWpSuiMnV BHFfl4y/8zRNLHPD00KwOp4qucMLvA XRSJ -----END PGP SIGNATURE-----如何验证校验和以 Linux 64 位二进制为例推荐采用如下验证流程在 Node.js 官方下载页面的说明中亦强调要验证签名的 SHASUMS# 1. 下载目标产物与签名校验文件 wget https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz wget https://nodejs.org/dist/v14.16.0/SHASUMS256.txt.asc # 2. 核对 SHA-256 哈希应与公告中 2e079cf6... 一致 grep node-v14.16.0-linux-x64.tar.xz SHASUMS256.txt.asc | sha256sum -c -这里的关键点校验和文件是PGP 签名消息BEGIN PGP SIGNED MESSAGE/BEGIN PGP SIGNATURE因此仅比较哈希还不够还应验证签名归属 Node.js 官方发布密钥防止攻击者同时替换二进制与校验文件公告同时提供.tar.gz与.tar.xz两种压缩格式headers包用于编译原生模块node-gyp 依赖win-x86/win-x64目录下的node.exe、node.lib、node_pdb调试符号面向 Windows 嵌入式与二次开发场景在部署到生产环境、Docker 镜像或 CI 流水线时建议把sha256sum -c写入构建脚本作为强制校验步骤。发布公告的生成自动化从仓库的发布工具可以看出这类公告是半自动生成的脚本 release-post/index.mjs 支持node index.mjs [version]调用不带参数时自动从nodejs.org/dist/index.json抓取最新版本它会依次抓取 changelog 正文、发布作者、版本策略Stable/LTS、签名 SHASUMS 以及各平台下载链接并通过 template.hbs 模板渲染出与本文同构的 Markdown 文件最终写入 pages/en/blog/release/ 目录。其中 SHASUMS 的来源固定为https://nodejs.org/dist/v${version}/SHASUMS256.txt.asc下载链接则来自 downloadsTable.mjs 的模板化 URL以%version%占位并逐个替换。这解释了为什么每篇发布公告的格式高度一致、校验清单完整无缺——它们都由同一套流水线产出。发布后网站的博客数据生成器 blog-data/generate.mjs 会扫描pages/en/blog下所有 Markdown 文件的 frontmatter标题、作者、日期、分类自动把本文归类为release分类并加入year-2021年份分类前端 BlogPostCard 组件则负责在博客列表中渲染标题、作者头像与发布时间。也就是说你在 nodejs.org 博客页看到的本篇公告正是由仓库中这套发布脚本 模板 博客数据生成链路驱动的。升级建议与影响评估立即升级如果你仍在使用 v14 及更早的 LTS 或 Current 版本建议尽快升级到 14.16.0或更高版本。CVE-2021-22883 无需特殊前置条件即可被远程利用导致拒绝服务风险较高CVE-2021-22884 针对--inspect场景使用远程调试或自定义 hosts 配置的环境需要格外关注。关注依赖修复OpenSSL 整数溢出CVE-2021-23840说明运行时依赖的安全状况同样关键升级后建议顺带确认 OpenSSL 版本已升至 1.1.1j。验证产物完整性无论从哪个渠道获取安装包都务必用官方 SHASUMS256.txt.asc 进行哈希与签名双重校验避免供应链污染。发布公告的参考价值本文对应的官方公告原文 v14.16.0.md 保留了完整的提交记录与校验清单如需查看相邻版本的安全修复可对比 v14.15.5.md 与 v14.16.1.md 的公告内容了解该 LTS 线的修复节奏与持续维护情况。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考