
Element Web v1.12.29 - उच्च - रिमोट - XSS - Univention ICS navigation.json लिंक एक javascript: मेनू href बन जाता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · element-ics-javascript
Element Web v1.12.29 - Element / New Vector
Class: XSS Reach: Remote
Univention बैनर मॉड्यूल ICS navigation.json को फ़ेच करता है, प्रत्येक एंट्री के link को बिना किसी स्कीम जाँच के z.string() के रूप में स्वीकार करता है, और Menu.tsx उस स्ट्रिंग को एक स्टाइल किए गए <a href> पर रखता है। स्टैटिक मेनू कॉन्फ़िग link_url के लिए z.url() का उपयोग करता है। ICS पथ ऐसा नहीं करता। उसी पिन पर URL प्रीव्यू पहले से ही javascript: को अस्वीकार करता है (previewFromBundle, GHSA-9r5h)। यह डिफ़ॉल्ट app.element.io नहीं है। इसके लिए modules/banner के साथ menu.type univention चाहिए, साथ ही एक ICS जिस पर डिप्लॉय भरोसा करता है।
जो कोई भी उस navigation.json को बदल सकता है, वह javascript: या data: लगा सकता है। एक साइन-इन उपयोगकर्ता जो बैनर मेनू खोलता है और आइटम पर क्लिक करता है, Element ओरिजिन पर स्क्रिप्ट चलाता है।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-79 / CWE-20 |
| CVSS | Medium: 6.8 CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:H/I:H/A:N |
| Product | Element Web |
| Affected | v1.12.29 टैग v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e)। गेटेड: Univention बैनर + ICS। |
| Auth | ICS ऑपरेटर / ICS समझौता। पीड़ित एक साइन-इन उपयोगकर्ता है जो मेनू आइटम पर क्लिक करता है। |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
उस ICS से समझौता करें या उसे संचालित करें जिस पर Element डिप्लॉय भरोसा करता है। navigation.json में एक javascript: (या data:) URL डालें। एक साइन-इन उपयोगकर्ता के बैनर मेनू खोलने और आइटम पर क्लिक करने की प्रतीक्षा करें। यह Matrix अकाउंट टेकओवर है: एक्सेस टोकन, क्रिप्टो स्टोर, सेशन। यह OS RCE नहीं है। डेस्कटॉप पर अभी भी nodeIntegration बंद और एक सैंडबॉक्स है।
| Privilege | Method / sink | Recon / integrity / availability | Lab-proven or inferred |
|---|---|---|---|
Element ओरिजिन पर बैनर-मेनू <a href="javascript:…"> रेंडर करें | ICS navigation.json entries[].link -> navigationToConfig link_url -> Menu.tsx LinkButton href={link.link_url} | मेनू DOM की इंटीग्रिटी | Lab-proven। मॉक ICS लिंक javascript:ELEMENT-ICS-JAVASCRIPT-WITNESS वह href बन गया। https पोर्टल लिंक अभी भी रेंडर हुआ |
| क्लिक के बाद Element ओरिजिन के रूप में स्क्रिप्ट चलाएँ | पीड़ित मेनू आइटम पर क्लिक करता है (UI:R) | Integrity | href sink से अनुमानित। Lab ने ब्राउज़र क्लिक नहीं चलाया या लाइव Matrix टोकन नहीं चुराया |
| Matrix एक्सेस टोकन / क्रिप्टो स्टोर पढ़ें (अकाउंट टेकओवर) | इन-ओरिजिन स्क्रिप्ट बनाम localStorage / IndexedDB सेशन | Recon / integrity | Element ओरिजिन XSS से अनुमानित। Lab witness href स्ट्रिंग है |
| Element टैब को फ़िशिंग पेज पर टॉप-नेविगेट करें | SilentLogin.tsx अनसैंडबॉक्स्ड iframe src={new URL("silent", icsUrl)} | Integrity | Lab-proven कि iframe में कोई sandbox नहीं है। टॉप-नेविगेशन का परीक्षण नहीं किया गया |
data: के माध्यम से वही प्लांट | z.string() किसी भी स्कीम को स्वीकार करता है | Integrity | अनुमानित। Lab ने केवल javascript: प्लांट किया |
इस पिन पर बंद: डिफ़ॉल्ट app.element.io (कोई Univention बैनर नहीं)। OS RCE / LPE (Desktop nodeIntegration: false, sandbox, contextIsolation)। Timeline HTML XSS। URL-प्रीव्यू javascript: (GHSA-9r5h previewFromBundle को http:/https: चाहिए)। HTML एक्सपोर्ट XSS (GHSA-wqmv)। Widget मीडिया टोकन (GHSA-3jm3)। स्टैटिक बैनर link_url: z.url() ऑपरेटर कॉन्फ़िग है, ICS नहीं; z.url() भी http/https allowlist नहीं है।
उसी पिन के बाकी: fragment guest wipe, vector: Windows drive-letter।
22 Sep 2026 GitHub रिलीज़ के बाद मैंने Element Web v1.12.29 को पिन किया। URL प्रीव्यू ने पहले ही कठिन तरीके से http:/https: सीख लिया था। Univention ICS link अभी भी z.string() है। स्टैटिक मेनू कॉन्फ़िग z.url() का उपयोग करता है। फ़ेच पथ उस जाँच से कभी नहीं गुज़रता।
पहले से दर्ज गलत रास्ते: डिफ़ॉल्ट app.element.io को पीड़ित मानना (Univention गेटेड है); z.url() को स्कीम allowlist मानना (URL कंस्ट्रक्टर javascript: स्वीकार करता है); क्लिक XSS को OS RCE तक बढ़ाना। एक रिवर्स शेल। नाटक।
पिन के फ़ंक्शन्स का गैजेट प्लस एक मॉक ICS navigation.json। लाइव Element Web कंटेनर नहीं। how=gadget। URL-प्रीव्यू http/https allowlist (previewFromBundle) लागू करने से javascript href हट गया और https पोर्टल लिंक बना रहा।
python3 element-ics-javascript-Abraxas-Labs.py
या
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:19620। Compose प्रोजेक्ट element-ics-javascript। रन के बाद स्टैक टियर डाउन हो जाता है।
SUCCESS element-ics-javascript how=gadget href-scheme=javascript menu-a-javascript=yes allowlist-rejects=yes silent-no-sandbox=yes ELEMENT-ICS-JAVASCRIPT-WITNESS
ICS link पर http: और https: को उसी तरह allowlist करें जैसे previewFromBundle करता है। href= से पहले javascript:, data:, और अन्य स्कीम अस्वीकार करें। साइलेंट iframe को सैंडबॉक्स करें (sandbox="" या कम से कम allow-top-navigation के बिना)। z.url() को स्कीम allowlist न मानें।
navigation.tsMenu.tsxSilentLogin.tsxpreviewFromBundleGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।