
Element Desktop v1.12.29 - 高 - ローカル - ファイル - ベクター: プロトコルが asar ジェイル外の Windows ファイルを読み取る
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 の join はすでに 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 | High: 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("..") のみ。ドライブレターの join は絶対パスになるため、チェックを通過する。path.win32.resolve(asar, relTarget) は C:\Windows\win.ini となる | 偵察 | URL パーサーガジェットでラボ実証済み。ボディは ELEMENT-VECTOR-DRIVE-LETTER-WITNESS。ネイティブ Desktop は未実行 |
同じ ACL 上の electron-config、プロファイル、他ユーザーのファイルの同様の読み取り | 同じ vector://vector/webapp/C:/... フェッチ | 偵察 | 推測。ラボでは 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/../ | n/a | ここではクローズ。WHATWG URL がこれを折りたたみ、ハンドラーは FILE_NOT_FOUND (-6) を返す |
| POSIX / macOS / Linux のドライブレターフェッチ | path.posix.join は C:/Windows/win.ini を asar 配下に残す | n/a | ここではクローズ。ガジェットの posix は 404、witness なし |
| OS RCE / LPE | nodeIntegration: false、app.enableSandbox() | n/a | クローズ。この残存バグではない |
同じピンの残存バグ: fragment guest wipe、Univention ICS javascript: href。
2026年9月22日の GitHub リリース後、element-hq/element-web v1.12.29 をピン留めした。Timeline XSS、HTML エクスポート XSS (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 配下に留まる)、ファイル読み取りを OS 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 を参照。ループバックラボのみ。無保証。