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