
Element Desktop v1.12.29 — высокий — локальный — файл — вектор: протокол читает файлы Windows за пределами asar-песочницы
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: как привилегированный файловый протокол. Защита сводится лишь к relTarget.startsWith("..") после path.normalize(path.join(...pathname.split("/").slice(2))). В 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 не запускался. Гаджет копирует парсер 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 не запускался |
То же чтение electron-config, профилей, файлов других пользователей с теми же ACL | Тот же fetch vector://vector/webapp/C:/... | Разведка | Выведено. В лаборатории подложен win.ini, а не реальные секреты |
| ATO Matrix, если главный фрейм загружает HTML атакующего, уже находящийся на диске | will-navigate пропускает vector:. Враждебный HTML по адресу vector://vector получает preload / window.electron (токены, Seshat, clearStorage) | Целостность | Выведено из webcontents-handler.ts и preload. В лаборатории навигация BrowserWindow не выполнялась |
Обход ../ по дереву asar | vector://vector/webapp/../ | н/д | Закрыто здесь. WHATWG URL сворачивает его; обработчик возвращает FILE_NOT_FOUND (-6) |
| Запрос с буквой диска в POSIX / macOS / Linux | path.posix.join оставляет C:/Windows/win.ini внутри asar | н/д | Закрыто здесь. Гаджет posix 404, свидетеля нет |
| RCE / LPE в ОС | nodeIntegration: false, app.enableSandbox() | н/д | Закрыто. Не эта уязвимость |
Другие уязвимости того же пина: fragment guest wipe, Univention ICS javascript: href.
Я зафиксировал element-hq/element-web v1.12.29 после релиза на GitHub 22 сентября 2026 года. XSS в таймлайне, XSS в экспорте HTML (GHSA-wqmv), HTML на главной странице (GHSA-wrcp), токен медиа виджета (GHSA-3jm3) и ключи Element Call (GHSA-69q3) закрыты на этом теге. Пользовательский протокол 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 остаются включёнными). Обратная оболочка. Театр.
Гаджет парсера 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. Только лаборатория на loopback. Без гарантий.