Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
element-fragment-guest — Element Web v1.12.29 — High — Remote — Session — фрагмент guest creds стирает реальную сессию перед whoami | Kitploit
Инструменты/GitHubGitHub/abraxas/element-fragment-guest
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьАутентификацияЛаборатории и Практика
GitHubabraxas/element-fragment-guest

element-fragment-guest

Element Web v1.12.29 — High — Remote — Session — фрагмент guest creds стирает реальную сессию перед whoami

Репозиторий
278 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Abraxas Labs - element-fragment-guest

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

Разбор: https://abraxaslabs.tech/research/element-fragment-guest

element-fragment-guest

Element Web v1.12.29 - Element / New Vector

Класс: Уничтожение сессии Доступ: Удалённый

Lifecycle.loadSession предпочитает guest_user_id и guest_access_token из хэша URL вместо restoreSessionFromStorage. Гостевой режим включён по умолчанию (enableGuest={!config.disable_guests}). В config.json на app.element.io не задан disable_guests. onTokenLoginCompleted удаляет только параметры SSO и OIDC. Он никогда не удаляет гостевые ключи. В url_utils.ts уже есть комментарий, что эти параметры фрагмента выглядят неиспользуемыми. Они всё равно побеждают.

Любой, кто сможет заставить вошедшего пользователя открыть URL с хэшем, содержащим гостевые параметры фрагмента, разлогинит его и уничтожит локальные криптоданные. Достаточно мусорного токена. whoami никогда не вызывается.

IDCVE пока нет
CWECWE-384 / CWE-352 / CWE-613
CVSSВысокий: 7.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H
ПродуктElement Web
ЗатронутоТег v1.12.29 v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e). Гостевой режим включён (по умолчанию).
Аутентификациянеаутентифицированный атакующий. Жертва должна открыть (или перезагрузить) URL.
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

Что может сделать атакующий

Заставить вошедшего пользователя открыть URL с хэшем, содержащим гостевые параметры фрагмента. Клиент разлогинивает его, уничтожает локальные криптоданные и может оставить его в гостевой сессии атакующего. Это разлогинивание и уничтожение криптоданных. Это не кража настоящего токена. Это не RCE в ОС.

ПривилегияМетод / точка воздействияРазведка / целостность / доступностьДоказано в лаборатории или выведено
Разбор гостевых учётных данных из хэшаurl_utils.ts guest: { keys: ["guest_user_id", "guest_access_token"], location: "fragment" }Целостность выбора сессииДоказано в лаборатории. #/home?guest_user_id=...&guest_access_token=... стало guest_params. Только в строке запроса — не сработало.
Предпочтение гостевой сессии сохранённой негостевойВетка Lifecycle.loadSession, где гостевая сессия имеет приоритет, лог Using guest access credentialsЦелостностьДоказано в лаборатории. Заранее созданная @victim:example.org не была восстановлена.
Уничтожение localStorage, аккаунта IndexedDB, sessionStorage, криптоданныхdoSetLoggedIn(..., clearStorageEnabled=true), затем clearStorage()Целостность / доступность локальной сессииДоказано в лаборатории. crypto_empty=yes, прежний токен исчез.
Пропуск проверки токенаГостевой путь никогда не вызывает /_matrix/client/v3/account/whoamiЦелостностьДоказано в лаборатории. whoami_called=no. Мусорный токен not-a-real-token всё равно привёл к уничтожению данных.
Сохранение гостевых учётных данных атакующегоpersistCredentials после уничтоженияЦелостностьДоказано в лаборатории. after_user=@x:example.org, after_token=not-a-real-token, mx_is_guest=true.
Фиксация на реальном госте на домашнем сервере по умолчаниюТо же сохранение, если гостевой токен действителенЦелостностьВыведено. В лаборатории использовался мусорный токен, поэтому входа на живой домашний сервер не было.
Повторение при перезагрузкеГостевые ключи остаются в хэше; onTokenLoginCompleted их не удаляетЦелостностьВыведено из закреплённого app.tsx. В лаборатории URL открывался один раз.

Закрыто по этому остатку: украсть настоящий access token (он удаляется, а не похищается). OS RCE / LPE (Desktop nodeIntegration: false, sandbox). Живой Element SPA (how=gadget). Query-string ?guest_user_id= (только фрагмент). disable_guests: true сохраняет не-гостевую сессию. Пропатченный loadSession, который игнорирует гостя при наличии не-гостевой сессии, также сохраняет её.

Те же остатки пина: vector: Windows drive-letter, Univention ICS javascript: href.

Как я это нашёл

Я закрепил Element Web v1.12.29 после релиза на GitHub 22 сентября 2026 года. SSO loginToken передаётся только через query и вырезается после использования. Гостевые ключи по-прежнему находятся во фрагменте и побеждают при восстановлении. Комментарий в url_utils.ts — это подсказка: они уже сомневались, что эти ключи специфицированы.

Уже зафиксированные неверные пути: трактовка query-string ?guest_user_id= как вектора (ключи живут в хэше); называть это кражей токена (настоящий токен удаляется, а не отправляется); ожидание disable_guests в конфиге app.element.io (он не задан). Обратная оболочка. Театр.

Лаборатория

Гаджет функций пина. Не живой контейнер Element Web. how=gadget.

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

или

cd lab
./run.sh

Цель — только http://127.0.0.1:19600. Проект Compose element-fragment-guest. Стек разворачивается после запуска.

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

Исправление

Игнорировать параметры гостевого фрагмента, если не гостевая сессия уже существует. Проверять гостевой токен с помощью /_matrix/client/v3/account/whoami перед clearStorage. Удалять guest_user_id и guest_access_token так же, как удаляются токены SSO. По умолчанию disable_guests: true для размещённого app.element.io.

Ссылки

  • github.com/element-hq/element-web тег v1.12.29
  • Lifecycle.ts (loadSession с приоритетом гостя)
  • url_utils.ts
  • app.tsx (enableGuest={!config.disable_guests})
  • Тот же пин: element-vector-drive-letter · element-ics-javascript
  • CWE-384

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только для лаборатории с loopback. Без гарантий.

Скачать инструмент