macOS Electron Applications Injection

从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

基本信息

如果您不知道 Electron 是什么,您可以在这里找到大量信息。但现在只需知道 Electron 运行 node。 而 node 具有一些可用于使其执行其他代码参数环境变量

Electron 保险丝

接下来将讨论这些技术,但近年来 Electron 已添加了几个安全标志以防止它们。这些是Electron 保险丝,这些是用于防止 macOS 中的 Electron 应用程序加载任意代码的标志:

  • RunAsNode:如果禁用,将阻止使用环境变量 ELECTRON_RUN_AS_NODE 注入代码。

  • EnableNodeCliInspectArguments:如果禁用,参数如 --inspect--inspect-brk 将不被尊重。避免以此方式注入代码。

  • EnableEmbeddedAsarIntegrityValidation:如果启用,macOS 将验证加载的 asar 文件。通过这种方式防止通过修改此文件的内容进行代码注入

  • OnlyLoadAppFromAsar:如果启用,将仅检查和使用 app.asar,而不是按照以下顺序搜索加载:app.asarapp,最后是**default_app.asar**。因此,当与 embeddedAsarIntegrityValidation 保险丝结合使用时,不可能加载未经验证的代码。

  • LoadBrowserProcessSpecificV8Snapshot:如果启用,浏览器进程将使用名为 browser_v8_context_snapshot.bin 的文件作为其 V8 快照。

另一个不会阻止代码注入的有趣保险丝是:

  • EnableCookieEncryption:如果启用,磁盘上的 cookie 存储将使用操作系统级加密密钥进行加密。

检查 Electron 保险丝

您可以从应用程序中检查这些标志

修改 Electron 保险丝

正如文档提到的Electron 保险丝的配置是在Electron 二进制文件中配置的,其中包含字符串**dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX**。

在 macOS 应用程序中,这通常位于 application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework

您可以在 https://hexed.it/ 中加载此文件并搜索前述字符串。在此字符串之后,您可以在 ASCII 中看到一个数字 "0" 或 "1",表示每个保险丝是禁用还是启用。只需修改十六进制代码(0x3000x311)以修改保险丝值

请注意,如果您尝试覆盖应用程序中的**Electron Framework 二进制文件**,带有这些修改字节的应用程序将无法运行。

RCE 添加代码到 Electron 应用程序

可能存在外部 JS/HTML 文件,一个 Electron 应用程序正在使用,因此攻击者可以在这些文件中注入代码,其签名不会被检查,并在应用程序的上下文中执行任意代码。

请注意,可以通过将应用程序复制到另一个目录(如 /tmp),将文件夹 app.app/Contents 重命名为 app.app/NotCon修改带有您的恶意代码的 asar 文件,将其重新命名为 app.app/Contents 并执行它来绕过**kTCCServiceSystemPolicyAppBundles**的要求。

您可以使用以下命令从 asar 文件中解压缩代码:

并在修改后重新打包:

使用 ELECTRON_RUN_AS_NODE 进行 RCE

根据文档,如果设置了这个环境变量,它将以普通的 Node.js 进程启动该进程。

从应用程序 Plist 进行注入

正如在这里提出的,您可以滥用这个环境变量在 plist 中保持持久性:

使用 NODE_OPTIONS 进行 RCE

您可以将恶意载荷存储在不同的文件中并执行它:

从应用程序 Plist 注入

您可以在 plist 中滥用这个环境变量以保持持久性,添加以下键:

利用检查进行RCE

根据这里,如果你使用诸如**--inspect--inspect-brk--remote-debugging-port等标志来执行Electron应用程序,将会打开一个调试端口**,这样你就可以连接到它(例如从Chrome中的chrome://inspect),然后你就可以在其中注入代码甚至启动新进程。 例如:

使用参数 --remote-debugging-port=9222 可以从 Electron 应用程序中窃取一些信息,如历史记录(使用 GET 命令)或浏览器中的cookies(因为它们在浏览器内部解密,并且有一个json端点可以提供它们)。

您可以在这里这里了解如何操作,并使用自动工具 WhiteChocolateMacademiaNut 或类似的简单脚本:

这篇博文中,利用这种调试方法使一个无头chrome在任意位置下载任意文件

从应用程序 Plist 进行注入

您可以滥用这个环境变量在一个 plist 中,以保持持久性添加这些键:

滥用旧版本的 TCC Bypass

运行非 JS 代码

先前的技术将允许您在 Electron 应用程序的进程中运行 JS 代码。但是,请记住,子进程在相同的沙盒配置文件下运行,并继承其 TCC 权限。 因此,如果您想滥用权限以访问摄像头或麦克风,您可以从进程中运行另一个二进制文件

自动注入

工具 electroniz3r 可轻松用于查找已安装的易受攻击的 Electron 应用程序并在其中注入代码。此工具将尝试使用**--inspect**技术:

您需要自行编译它,并可以像这样使用它:

参考资料

从零开始学习AWS黑客技术 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

最后更新于