
Element Desktop v1.12.29 - 高 - ローカル - ファイル - ベクター: プロトコルが asar ジェイル外の Windows ファイルを読み取る
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · element-vector-drive-letter
解説記事: https://abraxaslabs.tech/research/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 は実行していない。このガジェットは pin の 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:/... の 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/../ | n/a | ここではクローズ。WHATWG URL がこれを折りたたみ、ハンドラーは FILE_NOT_FOUND (-6) を返す |
| POSIX / macOS / Linux でのドライブレター fetch | path.posix.join は C:/Windows/win.ini を asar 配下に残す | n/a | ここではクローズ。ガジェットの posix は 404 で、ウィットネスなし |
| 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 のみです。プロジェクト 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 を参照。ループバックラボ専用。保証なし。