
Element Web v1.12.29 - उच्च - रिमोट - सेशन - fragment guest creds whoami से पहले वास्तविक सेशन को मिटा देता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · element-fragment-guest
Element Web v1.12.29 - Element / New Vector
Class: Session destruction Reach: Remote
Lifecycle.loadSession URL hash से guest_user_id और guest_access_token को restoreSessionFromStorage पर प्राथमिकता देता है। Guests डिफ़ॉल्ट रूप से चालू हैं (enableGuest={!config.disable_guests})। app.element.io config.json में disable_guests सेट नहीं है। onTokenLoginCompleted केवल SSO और OIDC पैरामीटर हटाता है। यह कभी भी guest keys को नहीं हटाता। url_utils.ts पहले से ही टिप्पणी करता है कि ये fragment params अप्रयुक्त लगते हैं। वे अभी भी जीतते हैं।
कोई भी व्यक्ति जो किसी signed-in उपयोगकर्ता को guest fragment params के साथ hash URL खोलने के लिए प्रेरित कर सकता है, उन्हें लॉग आउट कर देता है और स्थानीय crypto मिटा देता है। एक garbage token पर्याप्त है। whoami कभी कॉल नहीं किया जाता।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-384 / CWE-352 / CWE-613 |
| CVSS | High: 7.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H |
| Product | Element Web |
| Affected | v1.12.29 tag v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e)। Guests सक्षम (डिफ़ॉल्ट)। |
| Auth | unauthenticated attacker। पीड़ित को एक URL खोलना (या पुनः लोड करना) होगा। |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
किसी signed-in उपयोगकर्ता को guest fragment params के साथ hash URL खोलने के लिए प्रेरित करें। क्लाइंट उन्हें लॉग आउट कर देता है, स्थानीय crypto मिटा देता है, और उन्हें एक हमलावर guest पर पार्क कर सकता है। यह logout और crypto wipe है। यह steal-the-real-token नहीं है। यह OS RCE नहीं है।
| Privilege | Method / sink | Recon / integrity / availability | Lab-proven or inferred |
|---|---|---|---|
| Parse guest creds from the hash | url_utils.ts guest: { keys: ["guest_user_id", "guest_access_token"], location: "fragment" } | Integrity of session selection | Lab-proven। #/home?guest_user_id=...&guest_access_token=... guest_params बन गया। Query-string only नहीं हुआ। |
| Prefer guest over a stored non-guest session | Lifecycle.loadSession guest-first branch, log Using guest access credentials | Integrity | Lab-proven। Seeded @victim:example.org पुनः स्थापित नहीं हुआ। |
| Wipe localStorage, IndexedDB account, sessionStorage, crypto | doSetLoggedIn(..., clearStorageEnabled=true) फिर clearStorage() | Integrity / availability of the local session | Lab-proven। crypto_empty=yes, पूर्व token चला गया। |
| Skip token validation | Guest path कभी /_matrix/client/v3/account/whoami कॉल नहीं करता | Integrity | Lab-proven। whoami_called=no। Garbage token not-a-real-token फिर भी मिटा दिया। |
| Persist attacker guest creds | Wipe के बाद persistCredentials | Integrity | Lab-proven। after_user=@x:example.org, after_token=not-a-real-token, mx_is_guest=true। |
| Fixate onto a real guest on the default HS | यदि guest token valid है तो वही persist | Integrity | Inferred। Lab ने garbage token का उपयोग किया, इसलिए कोई live HS login नहीं। |
| Keep doing this on reload | Guest keys hash में रहते हैं; onTokenLoginCompleted उन्हें नहीं हटाता | Integrity | Pin app.tsx से inferred। Lab ने URL एक बार खोला। |
इस leftover पर बंद: असली access token चुराना (यह हटा दिया जाता है, exfiltrate नहीं किया जाता)। OS RCE / LPE (Desktop nodeIntegration: false, sandbox)। Live Element SPA (how=gadget)। Query-string ?guest_user_id= (केवल fragment)। disable_guests: true non-guest session रखता है। एक patched loadSession जो non-guest session मौजूद होने पर guest को अनदेखा करता है, वह भी इसे रखता है।
Same pin leftovers: vector: Windows drive-letter, Univention ICS javascript: href।
मैंने 22 Sep 2026 GitHub release के बाद Element Web v1.12.29 को pin किया। SSO loginToken केवल query-only है और उपयोग के बाद हटा दिया जाता है। Guest keys अभी भी fragment में बैठे हैं और restore पर जीतते हैं। url_utils.ts में टिप्पणी ही संकेत है: उन्हें पहले से ही संदेह था कि ये keys specified थीं।
गलत मोड़ पहले से दर्ज: query-string ?guest_user_id= को vector मानना (keys hash में रहती हैं); इसे token theft कहना (असली token हटा दिया जाता है, भेजा नहीं जाता); app.element.io config पर disable_guests की अपेक्षा करना (यह unset है)। एक reverse shell। Theatre।
Pin के gadget functions। Live Element Web container नहीं। how=gadget।
python3 element-fragment-guest-Abraxas-Labs.py
या
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:19600। Compose project element-fragment-guest। Run के बाद stack tear down हो जाता है।
SUCCESS element-fragment-guest how=gadget guest-wipe=yes prior-kept=no garbage-token=yes disable-guests-keeps=yes ELEMENT-FRAGMENT-GUEST-WITNESS
जब non-guest session पहले से मौजूद हो तो guest fragment params को अनदेखा करें। clearStorage से पहले /_matrix/client/v3/account/whoami के साथ guest token को validate करें। guest_user_id और guest_access_token को उसी तरह हटाएं जैसे SSO tokens हटाए जाते हैं। Hosted app.element.io के लिए डिफ़ॉल्ट disable_guests: true।
Lifecycle.ts (loadSession guest-first)url_utils.tsapp.tsx (enableGuest={!config.disable_guests})GNU Affero GPL v3.0। देखें LICENSE। केवल Loopback lab। कोई warranty नहीं।