跳转到主内容

10 篇博文 含有标签「安全」

Blog posts related to security

查看所有标签

关于 "runAsNode" CVEs 的声明

· 阅读时间:约 6 分钟

今天早些时候,Electron 团队被告知,最近有几个公开的 CVEs 针对几个著名的 Electron 应用程序进行了提交。 这些 CVE 与 Electron 的两个 fuses(保险丝) - runAsNodeenableNodeCliInspectArguments - 相关,并错误地声称,如果这些组件没有被积极禁用,远程攻击者能够通过这些组件执行任意代码。

我们认为这些 CVE 并非出于善意提交。 首先,这个声明是不正确的 - 配置并不允许远程代码执行。 其次,尽管拥有漏洞赏金计划,但在这些 CVE 中被点名的公司并没有收到通知。 最后,虽然我们确实相信禁用相关组件可以增强应用程序的安全性,但我们认为这些 CVE 的提交并没有准确反映其严重性。 “Critical”级别是为最高危险的问题保留的,显然这里的情况并非如此。

任何人都可以申请 CVE。 虽然这对软件行业的整体健康有益,但“挖掘 CVEs”来增强单个安全研究员的声誉并没有帮助。

话虽如此,我们理解仅仅是一个带有可怕的 critical 严重性的 CVE 的存在可能会导致用户感到困惑,因此作为一个项目,我们希望提供指导和协助来处理这个问题。

这会给我带来什么影响?

在审查了 CVEs 之后,Electron 团队认为这些 CVEs 并不是 critical 的。

攻击者需要已经能够在机器上执行任意命令,无论是通过对硬件的物理访问还是通过实现完全的远程代码执行。 这值得重申:所描述的漏洞_要求攻击者已经能够访问被攻击的系统_。

例如,Chrome 在其威胁模型中不考虑本地物理攻击

我们认为这些攻击超出了 Chrome 的威胁模型范围,因为对于已经能够以你的身份登录你的设备或者能够以你的操作系统用户账户的权限运行软件的恶意用户,Chrome(或任何应用程序)无法进行防御。 这样的攻击者可以修改可执行文件和DLL文件,更改像 PATH 这样的环境变量,更改配置文件,读取你的用户账户所拥有的任何数据,将其通过电子邮件发送给自己等等。 这样的攻击者对你的设备拥有完全的控制权,Chrome 所能做的任何事情都无法提供严格的防御保证。 这个问题不仅仅存在于Chrome - 所有应用程序都必须信任本地物理用户。

利用 CVE 中描述的漏洞,攻击者可以将受影响的应用程序用作具有继承 TCC 权限的通用 Node.js 进程。 因此,如果应用程序例如已被授权访问地址簿,攻击者可以将应用程序作为 Node.js 运行,并执行将继承该地址簿访问权限的任意代码。 这通常被称为“寄生式攻击”。 攻击者通常使用 PowerShell、Bash 或类似工具来运行任意代码。

我是否受到了影响?

默认情况下,所有发布版本的 Electron 都启用了 runAsNode enableNodeCliInspectArguments 功能。 如果您没有按照 Electron Fuses 文档中描述的方法关闭它们,那么您的应用程序同样容易受到“寄生式攻击”的影响。 再次强调,攻击者需要已经能够在受害者的机器上执行代码和程序。

缓解措施

减轻这个问题的最简单方法是在您的 Electron 应用程序中禁用 runAsNode fuse。 runAsNode fuse 用于切换是否考虑 ELECTRON_RUN_AS_NODE ` 环境变量。 请参阅 Electron Fuses 文档以获取有关如何切换这些 fuses 的信息。

请注意,如果禁用了这个 fuse,那么主进程中的 process.fork 将无法按预期运行,因为它依赖于这个环境变量来运行。 相反,我们建议您使用实用进程,它适用于许多需要独立的 Node.js 进程的用例(例如 Sqlite 服务器进程或类似情况)。

您可以在我们的安全清单中找到更多关于我们推荐的 Electron 应用程序的安全最佳实践的信息。

Breach to Barrier: Strengthening Apps with the Sandbox

· 阅读时间:约 7 分钟

距离 CVE-2023-4863: 在WebP图片中的堆栈溢出 被公开已经过去了一个星期多。这导致众多渲染 webp 图片的软件都得到了更新:macOS, iOS, Chrome, Firefox 和众多 Linux 发行版都发布了更新。 这是在Citizen Lab进行调查之后进行的。他们发现 “设在华盛顿特区的民间组织” 使用的iPhone通过零点击漏洞在iMessage中被攻击。

Electron也在同一天发布新版本:如果您的应用会显示任何用户提供的内容 您应该更新您的 Electron 版本 - v27 0.0-beta.2, v26.2.1, v25.8.1, v24.8.3, v22.3.24 均包括已经过修复的 libwebp,一个负责渲染 webp 图像的库。

既然我们大家都新近意识到, 像“渲染一幅图片” 这样看似无害的交互是一种潜在的危险活动, 我们要借此机会提醒大家,Electron包括的进程沙盒将限制下一次大型攻击的猛烈程度,无论它将会是什么。

沙盒从 Electron v1 开始可用,并在 v20 默认情况下启用。 但我们知道许多应用 (尤其是那些已经存在有一段时间的应用) 可能会在其代码中的某个地方有一个 sandbox: falsenodeIntegration: true,这则配置在当没有明确的 sandbox 设置时同样禁用沙盒。 这是可以理解的:如果你已经使用Electron很长时间,你可能已经感受到了 require("child_process")require("fs") 直接扔进运行你的 HTML/CSS 的代码带来的力量。

在我们讨论你能够_如何_迁移到沙盒内之前,我们不如首先讨论你_为什么_会想要迁移。

沙盒围绕所有渲染进程设置了一个保护机制。这确保不论内部发生什么,代码都在受限制的环境中执行。 作为一个概念,它比Chromium老得多,并且所有主流的操作系统都提供了这个功能。 Electron和Chromium的沙盒搭建在这些系统功能之上。 即使您从未显示用户生成的内容,你应该考虑到你的渲染器可能受到损害的可能性:场景像供应链攻击一样复杂,并且很简单,因为小的bug可能会导致你的渲染器做意想不到的事。

沙盒使情景变得更安全:一个在沙盒内的进程可以免费使用 CPU 资源和内存 — 就没别的了。 进程不能写入磁盘或显示自己的窗口。 就我们的 libwep bug而言,沙盒确保攻击者无法安装或运行恶意程序。 事实上,在最初 Pegasus 袭击雇员 iPhone 的案件中,袭击具体针对的是一个非沙盒图像进程以获得对手机的访问权限,打破了正常情况下 iMessage 沙盒的界限。 当一个CVE像这个示例中的那样被宣布时,您仍然须将您的 Electron 应用程序升级到安全版本 — 不过与此同时,攻击者能够造成的损害受到极大的限制。

将原版Electron应用程序从 sandbox: false 迁移到 sandbox: true 是一项较大的任务。 我理解,因为即使我亲自撰写了 Electron 安全准则,我还没有设法迁移我自己的一个应用来使用该项准则。 在这个周末,我把它改掉了,我建议你也这么做。

别被修改行数的体量吓到,这些大多都在 package-lock.json 里。

你需要处理两件事:

  1. 如果您在 preload 脚本或实际的 WebContents 中使用Node.js 代码,您需要将所有以上这些与 Node.js 的交互迁移到主进程 (或者,如果你愿意的话,一个多用途进程) 。 考虑到最近渲染器正在变得越来越强大,很有可能你的代码很大一部分其实并不需要重构。

    查阅我们对于 进程间通信 的文档。 就我而言,我移动了许多代码,并用 ipcRenderer.invoke()ipcMain.handle()包装了它,但是这个过程是直截了当的,而且很快就完成了。 请稍微注意你的 API - 如果你构建一个名为 executeCodeAsRoot(code)的API,沙盒将不会过多地保护你的用户。

  2. 因为启用沙盒会在您的预加载脚本中禁用对 Node.js 的集成,你不再能使用require("../my-script")。 换言之,您的预加载脚本需要是一个单一的文件。

    这样做有多种方式:Webpack、esbuild、parcel 和 rollup 都能办到。 我使用 Electron Forge的出色Webpack插件,而同样受欢迎的 electron-builder 用户可以使用 electron-webpack

总的来讲,整个过程花了我四天时间 — 而这包括很多,由于我决定利用这次机会通过其他方式去重构我的代码而产生的,对于如何最大化 Webpack 众多效用的思考。

Chromium WebAudio 漏洞修复 (CVE-2019-13720)

· 阅读时间:约 2 分钟

A High severity vulnerability has been discovered in Chrome which affects all software based on Chromium, including Electron.

此漏洞已被分配 CVE-2019-13720。 您可以在 Chrome 博客文章 中阅读更多关于它的信息。

请注意,Chrome将这个漏洞报告为已经被利用,因此强烈建议您尽快升级 Electron


作用域

This affects any Electron application that may run third-party or untrusted JavaScript.

Mitigation

Affected apps should upgrade to a patched version of Electron.

We've published new versions of Electron which include fixes for this vulnerability:

Electron 7.0.1 在发布通知之前已自动包含了上游的修复。 Electron 8同样不受影响。 该漏洞在Electron 5中不存在,因此该版本也不受影响。

Further Information

此漏洞由卡巴斯基实验室的 Anton Ivanov 和 Alexey Kulaev 发现,并报告给 Chrome 团队。 Chrome博客文章可以在这里找到

要了解更多关于维护您的 Electron 应用安全的最佳做法,请参阅我们的 安全教程

If you wish to report a vulnerability in Electron, email security@electronjs.org.

Chromium FileReader Vulnerability Fix

· 阅读时间:约 1 分钟

A High severity vulnerability has been discovered in Chrome which affects all software based on Chromium, including Electron.

此漏洞已被分配 CVE-2019-5786。 You can read more about it in the Chrome Blog Post.

Please note that Chrome has reports of this vulnerability being used in the wild so it is strongly recommended you upgrade Electron ASAP.


作用域

This affects any Electron application that may run third-party or untrusted JavaScript.

Mitigation

Affected apps should upgrade to a patched version of Electron.

We've published new versions of Electron which include fixes for this vulnerability:

The latest beta of Electron 5 was tracking Chromium 73 and therefore is already patched:

Further Information

This vulnerability was discovered by Clement Lecigne of Google's Threat Analysis Group and reported to the Chrome team. The Chrome blog post can be found here.

要了解更多关于维护您的 Electron 应用安全的最佳做法,请参阅我们的 安全教程

If you wish to report a vulnerability in Electron, email security@electronjs.org.

BrowserView window.open() 漏洞修复

· 阅读时间:约 2 分钟

已发现一个代码漏洞,允许在子窗口中重新启用 Node。


打开一个带有 sandbox: true 或者 nativeWindowOpen: truenodeIntegration: false 这些属性的 BrowserView ,将生成一个 webContents ,里面的window.open 方法可以被调用,同时新打开的子窗口将启用 nodeIntegration。 此漏洞会影响所有受支持的 Electron 版本。

Mitigation

We've published new versions of Electron which include fixes for this vulnerability: 2.0.17, 3.0.15, 3.1.3, 4.0.4, and 5.0.0-beta.2. 我们鼓励所有 Electron 开发者立即更新他们的应用程序到最新稳定版本。

如果由于某些原因,无法升级 Electron 版本,你可以通过禁用所有子网页内容来缓解这个问题:

view.webContents.on('-add-new-contents', (e) => e.preventDefault());

Further Information

此漏洞是由 PalmerAL发现并负责任地报告给Electron项目的。

要了解更多关于维护您的 Electron 应用安全的最佳做法,请参阅我们的 安全教程

If you wish to report a vulnerability in Electron, email security@electronjs.org.

SQLite Vulnerability Fix

· 阅读时间:约 1 分钟

A remote code execution vulnerability, "Magellan," has been discovered affecting software based on SQLite or Chromium, including all versions of Electron.


作用域

Electron applications using Web SQL are impacted.

Mitigation

Affected apps should stop using Web SQL or upgrade to a patched version of Electron.

We've published new versions of Electron which include fixes for this vulnerability:

There are no reports of this in the wild; however, affected applications are urged to mitigate.

Further Information

This vulnerability was discovered by the Tencent Blade team, who have published a blog post that discusses the vulnerability.

要了解更多关于维护您的 Electron 应用安全的最佳做法,请参阅我们的 安全教程

If you wish to report a vulnerability in Electron, email security@electronjs.org.

WebPreferences Vulnerability Fix

· 阅读时间:约 3 分钟

A remote code execution vulnerability has been discovered affecting apps with the ability to open nested child windows on Electron versions (3.0.0-beta.6, 2.0.7, 1.8.7, and 1.7.15). 这个脆弱性已经被分配到CVE标识符 CVE-2018-15685


Affected Platforms

You are impacted if:

  1. You embed any remote user content, even in a sandbox
  2. You accept user input with any XSS vulnerabilities

详细信息

You are impacted if any user code runs inside an iframe / can create an iframe. Given the possibility of an XSS vulnerability it can be assumed that most apps are vulnerable to this case.

You are also impacted if you open any of your windows with the nativeWindowOpen: true or sandbox: true option. Although this vulnerability also requires an XSS vulnerability to exist in your app, you should still apply one of the mitigations below if you use either of these options.

Mitigation

We've published new versions of Electron which include fixes for this vulnerability: 3.0.0-beta.7, 2.0.8, 1.8.8, and 1.7.16. We urge all Electron developers to update their apps to the latest stable version immediately.

If for some reason you are unable to upgrade your Electron version, you can protect your app by blanket-calling event.preventDefault() on the new-window event for all webContents'. If you don't use window.open or any child windows at all then this is also a valid mitigation for your app.

mainWindow.webContents.on('new-window', (e) => e.preventDefault());

If you rely on the ability of your child windows to make grandchild windows, then a third mitigation strategy is to use the following code on your top level window:

const enforceInheritance = (topWebContents) => {
const handle = (webContents) => {
webContents.on(
'new-window',
(event, url, frameName, disposition, options) => {
if (!options.webPreferences) {
options.webPreferences = {};
}
Object.assign(
options.webPreferences,
topWebContents.getLastWebPreferences(),
);
if (options.webContents) {
handle(options.webContents);
}
},
);
};
handle(topWebContents);
};

enforceInheritance(mainWindow.webContents);

This code will manually enforce that the top level windows webPreferences is manually applied to all child windows infinitely deep.

Further Information

This vulnerability was found and reported responsibly to the Electron project by Matt Austin of Contrast Security.

要了解更多关于维护您的 Electron 应用安全的最佳做法,请参阅我们的 安全教程

If you wish to report a vulnerability in Electron, email security@electronjs.org.

Webview 漏洞修复

· 阅读时间:约 3 分钟

已发现一个漏洞,该漏洞允许在某些禁用 Node.js 集成的 Electron 应用程序中重新启用 Node.js 环境。 已为此漏洞分配了 CVE 标识符 CVE-2018-1000136


受影响的应用程序

如果 以下所有 都为真,则应用程序将受到影响:

  1. 在 Electron 1.7, 1.8, 或 2.0.0-beta 上运行
  2. 允许执行任意远程代码
  3. 禁用 Node.js 集成
  4. 没有在其网页首选项中明确声明 webviewTag: false
  5. 不启用 nativeWindowOption 选项
  6. 不要在未使用提供的选项标签的情况下拦截 new-window 事件并手动覆盖 event.newGuest

虽然这似乎是 Electron 应用程序中的少数,但我们鼓励所有应用程序升级,以此作为一种预防措施。

Mitigation

此漏洞在当前 1.7.13, 1.8.4, 和 2.0.0-beta.5 版本中已修复.

无法升级其 Electron 版本的开发人员可以使用以下代码缓解此漏洞:

app.on('web-contents-created', (event, win) => {
win.on(
'new-window',
(event, newURL, frameName, disposition, options, additionalFeatures) => {
if (!options.webPreferences) options.webPreferences = {};
options.webPreferences.nodeIntegration = false;
options.webPreferences.nodeIntegrationInWorker = false;
options.webPreferences.webviewTag = false;
delete options.webPreferences.preload;
},
);
});

// and *IF* you don't use WebViews at all,
// you might also want
app.on('web-contents-created', (event, win) => {
win.on('will-attach-webview', (event, webPreferences, params) => {
event.preventDefault();
});
});

Further Information

此漏洞是由 Trustwave SpiderLabs的Brendan Scarvell 发现并负责任地报告给Electron项目的。

要了解有关确保 Electron 应用程序安全的最佳实践,请参阅我们的 安全教程

要报告Electron中的漏洞,请发送电子邮件至 security@electronjs.org 邮箱。

请加入我们 电子邮件列表 以接收有关版本和安全更新的信息。

Protocol Handler Vulnerability Fix

· 阅读时间:约 2 分钟

A remote code execution vulnerability has been discovered affecting Electron apps that use custom protocol handlers. This vulnerability has been assigned the CVE identifier CVE-2018-1000006.


Affected Platforms

Electron apps designed to run on Windows that register themselves as the default handler for a protocol, like myapp://, are vulnerable.

Such apps can be affected regardless of how the protocol is registered, e.g. using native code, the Windows registry, or Electron's app.setAsDefaultProtocolClient API.

macOS and Linux are not vulnerable to this issue.

Mitigation

We've published new versions of Electron which include fixes for this vulnerability: 1.8.2-beta.5, 1.7.12, and 1.6.17. We urge all Electron developers to update their apps to the latest stable version immediately.

如果由于某些原因,您无法升级您的 Electron 版本, 在调用 应用时,您可以添加 -- 作为最后一个参数。 etAsdefaultProtocol客户端, 防止Chromium 解析更多选项。 The double dash -- signifies the end of command options, after which only positional parameters are accepted.

app.setAsDefaultProtocolClient(protocol, process.execPath, [
'--your-switches-here',
'--',
]);

更多详情请参阅 app.setAssDefaultProtocol客户端 API。

要了解更多关于维护您的 Electron 应用安全的最佳做法, 请参阅我们的 安全教程

If you wish to report a vulnerability in Electron, email security@electronjs.org.

Chromium RCE脆弱性修复补丁

· 阅读时间:约 1 分钟

在谷歌Chromium的代码中发现了远程代码执行功能,这将影响到所有Electron的最新版本。 访问 远程内容的任何Electron应用都易受此开发利用的伤害,不管 沙盒选项 是否启用。

我们已经发布了两个新版本的Electron,分别是1.7.81.6.14,这两个版本都包括了对于这种脆弱性的修复。 我们鼓励所有Electron开发者立即升级他们的应用到最新的稳定版。

npm i electron@latest --save-dev

要了解更多关于维护您的 Electron 应用安全的最佳做法, 请参阅我们的 安全教程

如果您想在Electron报告一个脆弱性,请联系security@electronjs.org