关于“runAsNode” CVE 的声明
今天早些时候,Electron 团队收到关于最近针对多个著名 Electron 应用程序提交的几个公开 CVE 的提醒。这些 CVE 与 Electron 的两个 熔断器 - runAsNode
和 enableNodeCliInspectArguments
有关,并错误地声称如果未主动禁用这些组件,远程攻击者能够通过这些组件执行任意代码。
我们认为这些 CVE 的提交并非出于善意。首先,该说法不正确 - 该配置 不会 启用远程代码执行。其次,尽管这些 CVE 中提到的公司拥有漏洞赏金计划,但并未收到通知。最后,虽然我们确实认为禁用这些组件可以提高应用程序的安全性,但我们认为这些 CVE 的严重程度并不准确。“严重”专用于最危险的问题,而这里的情况肯定不是这样。
任何人都可以请求 CVE。虽然这对软件行业的整体健康发展有益,但“利用 CVE 来提升单个安全研究人员的声誉”的做法毫无帮助。
话虽如此,我们理解 CVE 的存在本身,以及“严重”的可怕严重程度,可能会导致最终用户感到困惑,因此,作为项目,我们希望提供有关如何处理此问题的指导和帮助。
这可能如何影响我?
在审查了 CVE 后,Electron 团队认为这些 CVE 并不严重。
攻击者需要能够在机器上执行任意命令,要么通过物理访问硬件,要么通过实现完全的远程代码执行。需要重复说明:所描述的漏洞 需要攻击者已经能够访问被攻击系统 。
例如,Chrome 不将物理本地攻击纳入其威胁模型 。
我们认为这些攻击超出了 Chrome 的威胁模型,因为 Chrome(或任何应用程序)无法防御成功以您的身份登录您的设备或能够以您的操作系统用户帐户权限运行软件的恶意用户。这样的攻击者可以修改可执行文件和 DLL、更改
PATH
等环境变量、更改配置文件、读取您的用户帐户拥有的任何数据、将其通过电子邮件发送给自己,等等。这样的攻击者对您的设备具有完全控制权,Chrome 无法做任何事情来提供有效的防御保障。这个问题并非 Chrome 独有 - 所有应用程序都必须信任物理本地用户。
CVE 中描述的漏洞允许攻击者将受影响的应用程序用作继承 TCC 权限的通用 Node.js 进程。因此,如果应用程序(例如)已获得对地址簿的访问权限,攻击者可以以 Node.js 的身份运行应用程序并执行任意代码,这将继承该地址簿访问权限。这通常被称为“利用现有工具攻击”。攻击者通常使用 PowerShell、Bash 或类似工具来运行任意代码。
我是否受到影响?
默认情况下,所有已发布的 Electron 版本都启用了 runAsNode
和 enableNodeCliInspectArguments
功能。如果您未按 Electron 熔断器文档 中所述将其关闭,您的应用程序同样容易受到“利用现有工具攻击”的攻击。需要再次强调的是,攻击者需要 已经 能够在受害者的机器上执行代码和程序。
缓解措施
缓解此问题的最简单方法是在您的 Electron 应用程序中禁用 runAsNode
熔断器。 runAsNode
熔断器切换 ELECTRON_RUN_AS_NODE
环境变量是否被尊重。有关如何切换这些熔断器的信息,请参阅 Electron 熔断器文档 。
请注意,如果禁用此熔断器,则主进程中的 process.fork
将无法按预期工作,因为它依赖于此环境变量才能工作。相反,我们建议您使用 实用程序进程,这适用于您需要独立 Node.js 进程(例如 Sqlite 服务器进程或类似场景)的许多用例。
您可以在我们的 安全清单 中找到有关我们推荐的 Electron 应用程序安全最佳实践的更多信息。