Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
element-fragment-guest — Element Web v1.12.29 - Alto - Remoto - Sessione - frammento credenziali guest cancellano una sessione reale prima di whoami | Kitploit
Strumenti/GitHubGitHub/abraxas/element-fragment-guest
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebAutenticazioneLab e Pratica
GitHubabraxas/element-fragment-guest

element-fragment-guest

Element Web v1.12.29 - Alto - Remoto - Sessione - frammento credenziali guest cancellano una sessione reale prima di whoami

Vedi Repository
278 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Abraxas Labs - element-fragment-guest

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

Write-up: https://abraxaslabs.tech/research/element-fragment-guest

element-fragment-guest

Element Web v1.12.29 - Element / New Vector

Classe: Distruzione della sessione Portata: Remota

Lifecycle.loadSession preferisce guest_user_id e guest_access_token dall'hash dell'URL rispetto a restoreSessionFromStorage. Gli ospiti sono attivi per impostazione predefinita (enableGuest={!config.disable_guests}). Il file config.json di app.element.io non imposta disable_guests. onTokenLoginCompleted rimuove solo i parametri SSO e OIDC. Non rimuove mai le chiavi guest. url_utils.ts commenta già che questi parametri del fragment sembrano inutilizzati. Ciononostante prevalgono.

Chiunque riesca a far aprire a un utente autenticato un URL con hash contenente parametri guest nel fragment lo disconnette e cancella la crittografia locale. Basta un token spazzatura. whoami non viene mai chiamato.

IDnessuna CVE al momento
CWECWE-384 / CWE-352 / CWE-613
CVSSAlto: 7.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H
ProdottoElement Web
Affettotag v1.12.29 v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e). Ospiti abilitati (predefinito).
Autenticazioneattaccante non autenticato. La vittima deve aprire (o ricaricare) un URL.
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Far aprire a un utente autenticato un URL con hash contenente parametri guest nel fragment. Il client lo disconnette, cancella la crittografia locale e può collocarlo su un ospite controllato dall'attaccante. Si tratta di logout e cancellazione della crittografia. Non è furto del token reale. Non è RCE sul sistema operativo.

PrivilegioMetodo / sinkRicognizione / integrità / disponibilitàProvato in lab o dedotto
Analizzare le credenziali guest dall'hashurl_utils.ts guest: { keys: ["guest_user_id", "guest_access_token"], location: "fragment" }Integrità della selezione della sessioneProvato in lab. #/home?guest_user_id=...&guest_access_token=... è diventato guest_params. Solo nella query string non funzionava.
Preferire il guest a una sessione non-guest memorizzataRamo guest-first di Lifecycle.loadSession, log Using guest access credentialsIntegritàProvato in lab. La sessione preesistente @victim:example.org non è stata ripristinata.
Cancellare localStorage, account IndexedDB, sessionStorage, crittografiadoSetLoggedIn(..., clearStorageEnabled=true) poi clearStorage()Integrità / disponibilità della sessione localeProvato in lab. crypto_empty=yes, token precedente sparito.
Saltare la validazione del tokenIl percorso guest non chiama mai /_matrix/client/v3/account/whoamiIntegritàProvato in lab. whoami_called=no. Il token spazzatura not-a-real-token ha comunque causato la cancellazione.
Persistere le credenziali guest dell'attaccantepersistCredentials dopo la cancellazioneIntegritàProvato in lab. after_user=@x:example.org, after_token=not-a-real-token, mx_is_guest=true.
Fissare un vero guest sull'HS predefinitoStessa persistenza se il token guest è validoIntegritàDedotto. Il lab ha usato un token spazzatura, quindi nessun login su HS reale.
Continuare a farlo alla ricaricaLe chiavi guest restano nell'hash; onTokenLoginCompleted non le eliminaIntegritàDedotto dal pin app.tsx. Il lab ha aperto l'URL una sola volta.

Chiuso su questo residuo: rubare il vero access token (viene eliminato, non esfiltrato). OS RCE / LPE (Desktop nodeIntegration: false, sandbox). Element SPA live (how=gadget). Query-string ?guest_user_id= (solo fragment). disable_guests: true mantiene la sessione non-guest. Anche una loadSession patchata che ignora il guest quando esiste una sessione non-guest la mantiene.

Stessi residui del pin: vector: Windows drive-letter, Univention ICS javascript: href.

Come l'ho trovato

Ho fissato Element Web v1.12.29 dopo la release GitHub del 22 Sep 2026. Il loginToken SSO è solo query e viene rimosso dopo l'uso. Le chiavi guest restano nel fragment e vincono sul ripristino. Il commento in url_utils.ts è l'indizio: già dubitavano che queste chiavi fossero specificate.

Vicoli ciechi già registrati: trattare la query-string ?guest_user_id= come il vettore (le chiavi vivono nell'hash); chiamarlo furto di token (il vero token viene eliminato, non inviato); aspettarsi disable_guests nella config di app.element.io (non è impostato). Una reverse shell. Teatro.

Lab

Gadget delle funzioni del pin. Non un container Element Web live. how=gadget.

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

o

cd lab
./run.sh

Esegui il target solo su http://127.0.0.1:19600. Progetto Compose element-fragment-guest. Lo stack viene rimosso al termine dell'esecuzione.

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

La correzione

Ignorare i parametri del frammento guest quando esiste già una sessione non-guest. Convalidare il token guest con /_matrix/client/v3/account/whoami prima di clearStorage. Rimuovere guest_user_id e guest_access_token allo stesso modo in cui vengono rimossi i token SSO. Impostare disable_guests: true come valore predefinito per l'app ospitata app.element.io.

Riferimenti

  • github.com/element-hq/element-web tag v1.12.29
  • Lifecycle.ts (loadSession guest-first)
  • url_utils.ts
  • app.tsx (enableGuest={!config.disable_guests})
  • Stesso pin: element-vector-drive-letter · element-ics-javascript
  • CWE-384

Licenza

GNU Affero GPL v3.0. Vedi LICENSE. Solo laboratorio loopback. Nessuna garanzia.

Scarica lo strumento