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-fragment-guest — Element Web v1.12.29 - Élevé - À distance - Session - fragment guest creds wipe a real session before whoami | Kitploit
Outils/GitHubGitHub/abraxas/element-fragment-guest
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebAuthentificationLabs et Pratique
GitHubabraxas/element-fragment-guest

element-fragment-guest

Element Web v1.12.29 - Élevé - À distance - Session - fragment guest creds wipe a real session before whoami

Voir le dépôt
27il 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-fragment-guest

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  element-fragment-guest

Analyse détaillée : https://abraxaslabs.tech/research/element-fragment-guest

element-fragment-guest

Element Web v1.12.29 - Element / New Vector

Classe : Destruction de session Portée : À distance

Lifecycle.loadSession privilégie guest_user_id et guest_access_token issus du fragment d'URL plutôt que restoreSessionFromStorage. Les invités sont activés par défaut (enableGuest={!config.disable_guests}). Le config.json de app.element.io ne définit pas disable_guests. onTokenLoginCompleted ne supprime que les paramètres SSO et OIDC. Il ne supprime jamais les clés invité. url_utils.ts commente déjà que ces paramètres de fragment semblent inutilisés. Ils l'emportent tout de même.

Quiconque parvient à faire ouvrir à un utilisateur connecté une URL avec fragment contenant des paramètres invité le déconnecte et efface sa cryptographie locale. Un jeton bidon suffit. whoami n'est jamais appelé.

IDpas encore de CVE
CWECWE-384 / CWE-352 / CWE-613
CVSSÉlevé : 7.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H
ProduitElement Web
Affectétag v1.12.29 v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e). Invités activés (par défaut).
Authentificationattaquant non authentifié. La victime doit ouvrir (ou recharger) une URL.
LicenceGNU Affero GPL v3.0
Labo127.0.0.1 uniquement

Ce qu'un attaquant peut faire

Amener un utilisateur connecté à ouvrir une URL avec fragment contenant des paramètres invité. Le client le déconnecte, efface sa cryptographie locale et peut le placer sur un invité contrôlé par l'attaquant. Il s'agit d'une déconnexion et d'un effacement de la cryptographie. Ce n'est pas le vol du vrai jeton. Ce n'est pas une RCE au niveau de l'OS.

PrivilègeMéthode / point de terminaisonReconnaissance / intégrité / disponibilitéProuvé en labo ou déduit
Analyser les identifiants invité depuis le fragmenturl_utils.ts guest: { keys: ["guest_user_id", "guest_access_token"], location: "fragment" }Intégrité de la sélection de sessionProuvé en labo. #/home?guest_user_id=...&guest_access_token=... est devenu guest_params. La chaîne de requête seule ne l'a pas fait.
Privilégier l'invité sur une session non invitée stockéeBranche prioritaire invité de Lifecycle.loadSession, journal Using guest access credentialsIntégritéProuvé en labo. La session préchargée @victim:example.org n'a pas été restaurée.
Effacer localStorage, le compte IndexedDB, sessionStorage, la cryptographiedoSetLoggedIn(..., clearStorageEnabled=true) puis clearStorage()Intégrité / disponibilité de la session localeProuvé en labo. crypto_empty=yes, le jeton précédent a disparu.
Ignorer la validation du jetonLe chemin invité n'appelle jamais /_matrix/client/v3/account/whoamiIntégritéProuvé en labo. whoami_called=no. Le jeton bidon not-a-real-token a tout de même effacé les données.
Persister les identifiants invité de l'attaquantpersistCredentials après l'effacementIntégritéProuvé en labo. after_user=@x:example.org, after_token=not-a-real-token, mx_is_guest=true.
Fixer la session sur un véritable invité du HS par défautMême persistance si le jeton invité est valideIntégritéDéduit. Le labo a utilisé un jeton bidon, donc aucune connexion HS réelle.
Répéter cela au rechargementLes clés invité restent dans le fragment ; onTokenLoginCompleted ne les supprime pasIntégritéDéduit du code épinglé app.tsx. Le labo a ouvert l'URL une fois.

Fermé sur ce point restant : voler le véritable jeton d'accès (il est supprimé, pas exfiltré). RCE / LPE du système d'exploitation (Desktop nodeIntegration: false, sandbox). SPA Element en direct (how=gadget). Chaîne de requête ?guest_user_id= (fragment uniquement). disable_guests: true conserve la session non invitée. Un loadSession corrigé qui ignore l'invité lorsqu'une session non invitée existe la conserve également.

Autres points restants du pin : vector: lettre de lecteur Windows, Univention ICS javascript: href.

Comment je l'ai trouvé

J'ai épinglé Element Web v1.12.29 après la publication GitHub du 22 septembre 2026. Le loginToken SSO est uniquement en chaîne de requête et supprimé après usage. Les clés invité restent dans le fragment et l'emportent sur la restauration. Le commentaire dans url_utils.ts est révélateur : ils doutaient déjà que ces clés soient spécifiées.

Fausses pistes déjà consignées : traiter la chaîne de requête ?guest_user_id= comme le vecteur (les clés vivent dans le hash) ; qualifier cela de vol de jeton (le vrai jeton est supprimé, pas envoyé) ; s'attendre à disable_guests dans la config d'app.element.io (il n'est pas défini). Un reverse shell. Du théâtre.

Labo

Gadget des fonctions du pin. Pas un conteneur Element Web en direct. how=gadget.

python3 element-fragment-guest-Abraxas-Labs.py

ou

cd lab
./run.sh

Ciblez uniquement http://127.0.0.1:19600. Composez le projet element-fragment-guest. La pile est démontée après l'exécution.

SUCCESS element-fragment-guest how=gadget guest-wipe=yes prior-kept=no garbage-token=yes disable-guests-keeps=yes ELEMENT-FRAGMENT-GUEST-WITNESS

Le correctif

Ignorer les paramètres de fragment invité lorsqu'une session non invitée existe déjà. Valider le jeton invité avec /_matrix/client/v3/account/whoami avant clearStorage. Supprimer guest_user_id et guest_access_token de la même manière que les jetons SSO sont supprimés. Définir disable_guests: true par défaut pour l'app.element.io hébergé.

Références

  • github.com/element-hq/element-web tag v1.12.29
  • Lifecycle.ts (loadSession invité en priorité)
  • url_utils.ts
  • app.tsx (enableGuest={!config.disable_guests})
  • Même épinglage : element-vector-drive-letter · element-ics-javascript
  • CWE-384

Licence

Télécharger l’outil