2024年4月10日安全更新

2024年4月10日安全更新

💡 原文英文,约400词,阅读约需2分钟。
📝

内容提要

Node.js 18.x、20.x、21.x 版本发布了更新,修复了因不当处理批处理文件导致的安全漏洞。Windows 用户在使用 child_process.spawn 和 child_process.spawnSync 时需注意,未设置 shell 选项将导致 EINVAL 错误,建议传递 { shell: true } 选项以避免此错误。新版本将于2024年4月9日发布。

🔎

延伸解读

漏洞影响范围与风险

该漏洞影响 Node.js 18.x、20.x 和 21.x 版本,由于 child_process.spawn 和 child_process.spawnSync 对批处理文件处理不当,攻击者可通过恶意命令行参数注入任意命令并实现代码执行,即使未启用 shell 选项。这意味着在 Windows 环境下,如果应用将未经验证的用户输入传递给这些函数,可能面临远程代码执行风险。

Windows 用户的破坏性变更

修复后,Windows 用户使用 child_process.spawn 或 child_process.spawnSync 时,如果传入 .bat 或 .cmd 文件且未设置 shell 选项,将触发 EINVAL 错误。这是一项破坏性变更,可能导致现有代码在升级后无法正常运行。开发者需要检查代码中是否涉及此类调用,并做好兼容性调整。

应对措施与建议

对于受影响的调用,如果输入已经过清理,可以传递 { shell: true } 选项来避免 EINVAL 错误。虽然也可以通过 --security-revert=CVE-2024-27980 回退安全补丁,但官方强烈建议不要这样做,因为这会重新引入漏洞。最佳实践是升级到修复版本并适配新的行为。

❓

Q&A

Node.js 18.x、20.x、21.x 版本更新了什么内容?

这些版本修复了因不当处理批处理文件导致的安全漏洞。

Windows 用户在使用 child_process.spawn 时需要注意什么?

未设置 shell 选项将导致 EINVAL 错误,建议传递 { shell: true } 选项以避免此错误。

新版本的 Node.js 何时发布?

新版本将于2024年4月9日发布。

如何避免在使用 child_process.spawn 时出现 EINVAL 错误?

可以通过传递 { shell: true } 选项来避免 EINVAL 错误。

Node.js 的安全政策在哪里可以找到?

Node.js 的当前安全政策可以在 https://nodejs.org/en/security/ 找到。

是否可以撤销安全补丁?

可以通过传递 --security-revert=CVE-2024-27980 来撤销安全补丁,但强烈不建议这样做。

🏷️

标签

➡️

继续阅读