Electron Desktop Apps

WhiteIntel是一个由暗网支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到窃取恶意软件的侵害。
WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
您可以访问他们的网站并免费尝试他们的引擎:
简介
Electron结合了本地后端(使用NodeJS)和前端(Chromium),尽管它缺少一些现代浏览器的安全机制。
通常,您可能会在.asar应用程序中找到Electron应用程序代码,为了获取代码,您需要提取它:
在 Electron 应用的源代码中,在 packet.json 文件中,你可以找到指定了 main.js 文件的安全配置。
Electron有2种进程类型:
主进程(完全访问NodeJS)
渲染进程(出于安全原因,应限制NodeJS访问权限)

一个渲染进程将是加载文件的浏览器窗口:
渲染进程的设置可以在main.js文件中的主进程中进行配置。如果设置正确配置,一些配置将防止Electron应用程序受到RCE或其他漏洞的影响。
尽管可以配置Electron应用程序以防止其访问设备,但它可以通过Node API访问:
nodeIntegration- 默认为off。如果打开,允许从渲染进程访问Node功能。contextIsolation- 默认为on。如果关闭,主进程和渲染进程不会被隔离。preload- 默认为空。sandbox- 默认为关闭。它将限制NodeJS可以执行的操作。Workers中的Node集成
nodeIntegrationInSubframes- 默认为关闭。如果启用了**
nodeIntegration,这将允许在Electron应用程序中的iframe中加载的网页中使用Node.js API**。如果**
nodeIntegration被禁用**,则预加载将在iframe中加载。
配置示例:
以下是来自这里的一些RCE payloads:
捕获流量
修改start-main配置并添加使用代理,例如:
Electron 本地代码注入
如果你可以在本地执行 Electron 应用程序,那么可能可以使其执行任意的 JavaScript 代码。查看方法:
macOS Electron Applications InjectionRCE: XSS + nodeIntegration
如果 nodeIntegration 设置为 on,网页的 JavaScript 可以轻松使用 Node.js 功能,只需调用 require()。例如,在 Windows 上执行计算器应用程序的方法是:

RCE: preload
在这个设置中指定的脚本是在渲染器中的其他脚本之前加载的,因此它具有对Node API的无限访问权限:
因此,脚本可以将节点功能导出到页面:
RCE: XSS + contextIsolation
_contextIsolation_引入了网页脚本和JavaScript Electron内部代码之间的分离上下文,使得每个代码的JavaScript执行不会相互影响。这是一个必要的功能,以消除RCE的可能性。
如果上下文没有被隔离,攻击者可以:
在渲染器中执行任意JavaScript(XSS或导航到外部站点)
覆盖在preload或Electron内部代码中使用的内置方法为自己的函数
触发覆盖的函数的使用
RCE?
内置方法可以被覆盖的地方有两个:在preload代码中或在Electron内部代码中:
Electron contextIsolation RCE via preload codeElectron contextIsolation RCE via Electron internal codeElectron contextIsolation RCE via IPC绕过点击事件
如果在单击链接时应用了限制,您可能可以通过中键单击而不是常规左键单击来绕过这些限制
通过 shell.openExternal 实现远程代码执行(RCE)
有关这些示例的更多信息,请查看https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8和https://benjamin-altpeter.de/shell-openexternal-dangers/
在部署 Electron 桌面应用程序时,确保 nodeIntegration 和 contextIsolation 的正确设置至关重要。已经确定,通过这些设置可以有效防止针对预加载脚本或 Electron 主进程的客户端远程代码执行(RCE)。
当用户与链接交互或打开新窗口时,会触发特定的事件侦听器,这对应用程序的安全性和功能至关重要:
这些监听器被桌面应用程序覆盖,以实现自己的业务逻辑。该应用程序评估导航链接应在内部打开还是在外部Web浏览器中打开。通常通过一个名为openInternally的函数来做出决定。如果此函数返回false,则表示应在外部打开链接,利用shell.openExternal函数。
以下是简化的伪代码:


Electron JS安全最佳实践建议不要使用openExternal函数接受不受信任的内容,因为这可能通过各种协议导致RCE。操作系统支持可能触发RCE的不同协议。有关此主题的详细示例和进一步解释,可以参考此资源,其中包括能够利用此漏洞的Windows协议示例。
Windows协议利用示例包括:
读取内部文件:XSS + contextIsolation
禁用 contextIsolation 可以启用 <webview> 标签,类似于 <iframe>,用于读取和外泄本地文件。提供了一个示例,演示了如何利用此漏洞读取内部文件的内容:

此外,还分享了另一种读取内部文件的方法,突出了 Electron 桌面应用程序中的关键本地文件读取漏洞。这涉及注入脚本以利用应用程序并外泄数据:
RCE: XSS + 旧版 Chromium
如果应用程序使用的 Chromium 版本较 旧,并且存在已知的 漏洞,可能可以通过 XSS 利用它并获得 RCE。 您可以在这个 writeup 中看到一个示例:https://blog.electrovolt.io/posts/discord-rce/
通过内部 URL 正则表达式绕过进行 XSS 钓鱼
假设您发现了一个 XSS,但是 无法触发 RCE 或窃取内部文件,您可以尝试使用它来通过 钓鱼 窃取凭据。
首先,您需要了解当尝试打开新 URL 时会发生什么,检查前端的 JS 代码:
调用**openInternally将决定将链接在桌面窗口中打开,因为它是属于平台的链接,或者将在浏览器中作为第三方资源**打开。
如果函数使用的正则表达式容易被绕过(例如未转义子域的点),攻击者可以利用XSS来打开一个新窗口,该窗口位于攻击者的基础设施中,要求用户提供凭据:
工具
Electronegativity 是一个用于识别 Electron 应用程序中的配置错误和安全反模式的工具。
Electrolint 是一个开源的 VS Code 插件,用于 Electron 应用程序,使用 Electronegativity。
nodejsscan 用于检查第三方库是否存在漏洞。
Electro.ng:需要购买
实验室
在 https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s 中,您可以找到一个用于利用易受攻击的 Electron 应用程序的实验室。
一些命令可以帮助您完成实验室:
参考资料
有关 Electron 安全性的更多研究和报告,请访问 https://github.com/doyensec/awesome-electronjs-hacking

WhiteIntel 是一个由暗网支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到窃取恶意软件的侵害。
WhiteIntel 的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
您可以访问他们的网站并免费尝试他们的引擎:
最后更新于