关于“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 应用程序安全最佳实践的信息。