Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
element-vector-drive-letter — Element Desktop v1.12.29 - Élevé - Local - Fichier - vecteur : le protocole lit les fichiers Windows en dehors de la prison asar | Kitploit
Outils/GitHubGitHub/abraxas/element-vector-drive-letter
Analyse des VulnérabilitésExploitationExploitation d'Applications WebVirtualisation de SécuritéTests d'IntrusionLabs et Pratique
GitHubabraxas/element-vector-drive-letter

element-vector-drive-letter

Element Desktop v1.12.29 - Élevé - Local - Fichier - vecteur : le protocole lit les fichiers Windows en dehors de la prison asar

Voir le dépôt
12il y a 9 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Abraxas Labs - element-vector-drive-letter

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  element-vector-drive-letter

Write-up : https://abraxaslabs.tech/research/element-vector-drive-letter

element-vector-drive-letter

Element Desktop v1.12.29 - Element Creations Ltd

Classe : Lecture de fichier Portée : Locale

apps/desktop/src/electron-main.ts enregistre vector: comme protocole de fichier privilégié. La prison se limite à relTarget.startsWith("..") après path.normalize(path.join(...pathname.split("/").slice(2))). Sous Windows, une jointure de C:, Windows, win.ini donne déjà C:\Windows\win.ini. Les chemins absolus ne commencent pas par .., donc la vérification les laisse passer. La note d'Electron sur les protocoles personnalisés rejette également path.isAbsolute. Le path.join POSIX ne traite pas C: comme absolu, donc Linux et macOS ne sont pas concernés par ce reliquat. will-navigate laisse passer vector:.

Un XSS dans le renderer, les DevTools ou un autre processus local peut exécuter fetch("vector://vector/webapp/C:/Windows/win.ini") et lire les fichiers que le processus Element peut ouvrir.

IDpas encore de CVE
CWECWE-22 / CWE-73
CVSSÉlevé : 8.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
Produitelement-web Desktop (apps/desktop)
Affectév1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e). Windows uniquement.
Authrenderer local (DevTools / XSS)
LicenceGNU Affero GPL v3.0
Lab127.0.0.1 uniquement

Ce qu'un attaquant peut faire

XSS dans le renderer, DevTools ou un autre processus local capable d'atteindre vector:. Element Desktop natif sous Windows n'a pas été exécuté. Le gadget copie le parseur d'URL du pin et utilise path.win32 de Node.

PrivilègeMéthode / sinkRecon / intégrité / disponibilitéProuvé en lab ou déduit
Lire un fichier que le processus Element peut ouvrirfetch("vector://vector/webapp/C:/Windows/win.ini"). La prison se limite à relTarget.startsWith(".."). La jointure avec la lettre de lecteur est absolue, donc la vérification passe. path.win32.resolve(asar, relTarget) donne C:\Windows\win.iniReconProuvé en lab sur le gadget du parseur d'URL. Le corps est ELEMENT-VECTOR-DRIVE-LETTER-WITNESS. Desktop natif non exécuté
Même lecture de electron-config, des profils, des fichiers d'autres utilisateurs sur la même ACLMême fetch vector://vector/webapp/C:/...ReconDéduit. Le lab a planté win.ini, pas de vrais secrets
ATO Matrix si le frame principal charge du HTML attaquant déjà présent sur le disquewill-navigate laisse passer vector:. Du HTML hostile à vector://vector obtient le preload / window.electron (tokens, Seshat, clearStorage)IntégritéDéduit de webcontents-handler.ts et du preload. Le lab n'a pas navigué de BrowserWindow
Traversée ../ de l'arborescence asarvector://vector/webapp/../n/aFermé ici. L'URL WHATWG la réduit ; le handler renvoie FILE_NOT_FOUND (-6)
Fetch par lettre de lecteur POSIX / macOS / Linuxpath.posix.join laisse C:/Windows/win.ini sous l'asarn/aFermé ici. Gadget posix 404, pas de témoin
RCE OS / LPEnodeIntegration: false, app.enableSandbox()n/aFermé. Pas ce reliquat

Restes d'épinglage identiques : fragment guest wipe, Univention ICS javascript: href.

Comment je l'ai trouvé

J'ai épinglé element-hq/element-web v1.12.29 après la release GitHub du 22 septembre 2026. Le XSS de la timeline, le XSS de l'export HTML (GHSA-wqmv), le HTML de la page d'accueil (GHSA-wrcp), le jeton média des widgets (GHSA-3jm3) et les clés Element Call (GHSA-69q3) sont corrigés sur ce tag. Le protocole personnalisé de Desktop ne vérifie toujours que startsWith("..").

new URL("vector://vector/webapp/C:/Windows/win.ini") conserve C: comme segment de chemin. path.win32.join("C:", "Windows", "win.ini") donne C:\Windows\win.ini. Node path.win32.join(asar, abs) concatène ; path.win32.resolve abandonne la racine asar.

Fausses pistes déjà consignées : traiter ../ comme le reste (WHATWG le réduit, le handler renvoie 404) ; qualifier le C: POSIX du même bug (le join posix reste sous l'asar) ; gonfler la lecture de fichier en RCE système (le sandbox et nodeIntegration: false restent actifs). Un reverse shell. Du théâtre.

Labo

Gadget du parseur d'URL. Node path.win32 contre path.posix. Aucun processus Element Desktop sous Windows. Un /lab/oracle/win.ini planté tient lieu de C:\Windows\win.ini. /lab/asar/index.html est la prison asar.

python3 element-vector-drive-letter-Abraxas-Labs.py

ou

cd lab
./run.sh

Ciblez uniquement http://127.0.0.1:19610. Composez le projet element-vector-drive-letter. La stack est démontée après l'exécution.

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

Le correctif

Après la normalisation, rejeter path.isAbsolute(relTarget) et exiger que path.resolve(baseDir, relTarget) reste sous path.resolve(baseDir) (path.relative, refuser ..).

Références

  • github.com/element-hq/element-web tag v1.12.29
  • electron-main.ts (registerFileProtocol)
  • webcontents-handler.ts (will-navigate)
  • Correctifs proches (non liés à ce jail) : GHSA-wqmv · GHSA-wrcp
  • Même épinglage : element-fragment-guest · element-ics-javascript
  • CWE-22

Licence

GNU Affero GPL v3.0. Voir LICENSE. Laboratoire en boucle locale uniquement. Aucune garantie.

Télécharger l’outil