
Element Desktop v1.12.29 - Alto - Locale - File - vettore: il protocollo legge i file Windows al di fuori della jail asar
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · element-vector-drive-letter
Element Desktop v1.12.29 - Element Creations Ltd
Classe: Lettura di file Portata: Locale
apps/desktop/src/electron-main.ts registra vector: come protocollo file privilegiato. La jail è solo relTarget.startsWith("..") dopo path.normalize(path.join(...pathname.split("/").slice(2))). Su Windows un join di C:, Windows, win.ini è già C:\Windows\win.ini. I percorsi assoluti non iniziano con .., quindi il controllo li lascia passare. Anche la nota di Electron sui protocolli personalizzati rifiuta path.isAbsolute. Il path.join POSIX non considera C: come assoluto, quindi Linux e macOS non sono questo residuo. will-navigate lascia passare vector:.
XSS nel renderer, DevTools o un altro processo locale può eseguire fetch("vector://vector/webapp/C:/Windows/win.ini") e leggere file che il processo Element può aprire.
| ID | nessuna CVE al momento |
| CWE | CWE-22 / CWE-73 |
| CVSS | Alto: 8.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N |
| Prodotto | element-web Desktop (apps/desktop) |
| Affetto | v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e). Solo Windows. |
| Auth | renderer locale (DevTools / XSS) |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
XSS nel renderer, DevTools o un altro processo locale che può raggiungere vector:. Element Desktop nativo per Windows non è stato eseguito. Il gadget copia il parser URL del pin e usa il path.win32 di Node.
| Privilegio | Metodo / sink | Ricognizione / integrità / disponibilità | Provato in lab o dedotto |
|---|---|---|---|
| Leggere un file che il processo Element può aprire | fetch("vector://vector/webapp/C:/Windows/win.ini"). La jail è solo relTarget.startsWith(".."). Il join con lettera di unità è assoluto, quindi il controllo passa. path.win32.resolve(asar, relTarget) è C:\Windows\win.ini | Ricognizione | Provato in lab sul gadget del parser URL. Il body è ELEMENT-VECTOR-DRIVE-LETTER-WITNESS. Desktop nativo non eseguito |
Stessa lettura di electron-config, profili, file di altri utenti sulla stessa ACL | Stesso fetch vector://vector/webapp/C:/... | Ricognizione | Dedotto. Il lab ha piazzato win.ini, non segreti reali |
| ATO Matrix se il frame principale carica HTML dell'attaccante già su disco | will-navigate lascia passare vector:. HTML ostile su vector://vector ottiene preload / window.electron (token, Seshat, clearStorage) | Integrità | Dedotto da webcontents-handler.ts e preload. Il lab non ha navigato un BrowserWindow |
Traversal ../ dell'albero asar | vector://vector/webapp/../ | n/a | Chiuso qui. WHATWG URL lo collassa; l'handler restituisce FILE_NOT_FOUND (-6) |
| Fetch con lettera di unità su POSIX / macOS / Linux | path.posix.join lascia C:/Windows/win.ini sotto asar | n/a | Chiuso qui. Gadget posix 404, nessun witness |
| RCE / LPE a livello OS | nodeIntegration: false, app.enableSandbox() | n/a | Chiuso. Non questo residuo |
Altri residui dello stesso pin: fragment guest wipe, Univention ICS javascript: href.
Ho fissato element-hq/element-web v1.12.29 dopo la release GitHub del 22 settembre 2026. Timeline XSS, HTML-export XSS (GHSA-wqmv), homepage HTML (GHSA-wrcp), widget media token (GHSA-3jm3) ed Element Call keys (GHSA-69q3) sono chiusi su questo tag. Il protocollo personalizzato di Desktop controlla ancora solo startsWith("..").
new URL("vector://vector/webapp/C:/Windows/win.ini") mantiene C: come segmento di percorso. path.win32.join("C:", "Windows", "win.ini") è C:\Windows\win.ini. Il path.win32.join(asar, abs) di Node concatena; path.win32.resolve elimina la radice asar.
Vicoli ciechi già registrati: trattare ../ come il residuo (WHATWG lo collassa, l'handler restituisce 404); chiamare il C: POSIX lo stesso bug (il join posix resta sotto asar); gonfiare la lettura di file a RCE a livello OS (sandbox e nodeIntegration: false restano attivi). Una reverse shell. Teatro.
Gadget del parser URL. path.win32 di Node contro path.posix. Nessun processo Element Desktop per Windows. Il /lab/oracle/win.ini piazzato sostituisce C:\Windows\win.ini. /lab/asar/index.html è la jail asar.
python3 element-vector-drive-letter-Abraxas-Labs.py
oppure
cd lab
./run.sh
Target solo http://127.0.0.1:19610. Progetto Compose element-vector-drive-letter. Lo stack viene smontato dopo l'esecuzione.
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
Dopo normalize, rifiutare path.isAbsolute(relTarget) e richiedere che path.resolve(baseDir, relTarget) rimanga sotto path.resolve(baseDir) (path.relative, rifiutare ..).
electron-main.ts (registerFileProtocol)webcontents-handler.ts (will-navigate)GNU Affero GPL v3.0. Vedi LICENSE. Solo lab su loopback. Nessuna garanzia.