abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · element-vector-drive-letter
Element Desktop v1.12.29 - Element Creations Ltd
类别: 文件读取 影响范围: 本地
apps/desktop/src/electron-main.ts 将 vector: 注册为特权文件协议。其防护仅依赖 path.normalize(path.join(...pathname.split("/").slice(2))) 之后的 relTarget.startsWith("..")。在 Windows 上,将 C:、Windows、win.ini 拼接后已经是 C:\Windows\win.ini。绝对路径不以 .. 开头,因此该检查会放行它们。Electron 自身关于自定义协议的说明也拒绝 path.isAbsolute。POSIX 的 path.join 不将 C: 视为绝对路径,因此 Linux 和 macOS 不存在此遗留问题。will-navigate 允许 vector: 通过。
渲染进程 XSS、DevTools 或另一个本地进程可以 fetch("vector://vector/webapp/C:/Windows/win.ini") 并读取 Element 进程能够打开的文件。
| ID | 暂无 CVE |
| CWE | CWE-22 / CWE-73 |
| CVSS | 高危:8.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N |
| 产品 | element-web Desktop (apps/desktop) |
| 受影响版本 | v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e)。仅限 Windows。 |
| 认证 | 本地渲染进程(DevTools / XSS) |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
渲染进程 XSS、DevTools 或另一个能够访问 vector: 的本地进程。未运行原生 Windows Element Desktop。该利用组件复制了该 pin 的 URL 解析器,并使用 Node 的 path.win32。
| 权限 | 方法 / 汇聚点 | 侦察 / 完整性 / 可用性 | 实验验证或推断 |
|---|---|---|---|
| 读取 Element 进程能够打开的文件 | fetch("vector://vector/webapp/C:/Windows/win.ini")。防护仅为 relTarget.startsWith("..")。盘符拼接后为绝对路径,因此检查通过。path.win32.resolve(asar, relTarget) 为 C:\Windows\win.ini | 侦察 | 已在 URL 解析器利用组件上实验验证。响应体为 ELEMENT-VECTOR-DRIVE-LETTER-WITNESS。未运行原生 Desktop |
在相同 ACL 下同样读取 electron-config、配置文件、其他用户的文件 | 相同的 vector://vector/webapp/C:/... fetch | 侦察 | 推断。实验环境放置的是 win.ini,而非真实密钥 |
| 若主框架加载磁盘上已有的攻击者 HTML,则导致 Matrix ATO | will-navigate 允许 vector: 通过。位于 vector://vector 的恶意 HTML 会获得 preload / window.electron(令牌、Seshat、clearStorage) | 完整性 | 根据 webcontents-handler.ts 和 preload 推断。实验未导航 BrowserWindow |
对 asar 树进行 ../ 遍历 | vector://vector/webapp/../ | 不适用 | 此处已关闭。WHATWG URL 会折叠它;处理器返回 FILE_NOT_FOUND (-6) |
| POSIX / macOS / Linux 盘符 fetch | path.posix.join 会将 C:/Windows/win.ini 留在 asar 下 | 不适用 | 此处已关闭。利用组件 posix 返回 404,无见证 |
| 操作系统 RCE / LPE | nodeIntegration: false、app.enableSandbox() | 不适用 | 已关闭。非此遗留问题 |
同一 pin 的其他遗留问题:fragment guest wipe、Univention ICS javascript: href。
在 2026 年 9 月 22 日 GitHub 发布后,我锁定了 element-hq/element-web v1.12.29。时间线 XSS、HTML 导出 XSS(GHSA-wqmv)、主页 HTML(GHSA-wrcp)、widget 媒体令牌(GHSA-3jm3)以及 Element Call 密钥(GHSA-69q3)在此 tag 上均已关闭。Desktop 自定义协议仍然只检查 startsWith("..")。
new URL("vector://vector/webapp/C:/Windows/win.ini") 会将 C: 保留为路径段。path.win32.join("C:", "Windows", "win.ini") 为 C:\Windows\win.ini。Node 的 path.win32.join(asar, abs) 会进行拼接;path.win32.resolve 会丢弃 asar 根目录。
已记录的弯路:将 ../ 视为遗留问题(WHATWG 会折叠它,处理器返回 404);将 POSIX 的 C: 称为同一漏洞(posix join 仍留在 asar 下);将文件读取夸大为操作系统 RCE(沙箱和 nodeIntegration: false 仍然开启)。一个反弹 shell。纯属表演。
URL 解析器的利用组件。Node 的 path.win32 对比 path.posix。没有 Windows Element Desktop 进程。放置的 /lab/oracle/win.ini 代替 C:\Windows\win.ini。/lab/asar/index.html 是 asar 牢笼。
python3 element-vector-drive-letter-Abraxas-Labs.py
或
cd lab
./run.sh
目标仅限 http://127.0.0.1:19610。Compose 项目 element-vector-drive-letter。运行后技术栈会拆除。
SUCCESS element-vector-drive-letter how=gadget win32-drive-letter=200 posix-drive-letter=404 control-dotdot=404 patched-isabs=404 ELEMENT-VECTOR-DRIVE-LETTER-WITNESS
在 normalize 之后,拒绝 path.isAbsolute(relTarget),并要求 path.resolve(baseDir, relTarget) 保持在 path.resolve(baseDir) 之下(使用 path.relative,拒绝 ..)。
electron-main.ts(registerFileProtocol)webcontents-handler.ts(will-navigate)GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。无担保。