
Grafana OSS 13.2.3 — высокий — удалённый — присоединение по приглашению — SignUpStep2 присоединяет к ожидающим приглашениям организации без кода
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · grafana-signup-invite-join
Класс: Остаточные привилегии Достижимость: Удалённая
Grafana OSS 13.2.3 (6193dc0) - Grafana Labs
Когда users.allow_sign_up имеет значение true, а users.verify_email_enabled остаётся по умолчанию false, неаутентифицированный POST /api/user/signup/step2 с приглашённым email создаёт учётную запись, и applyUserInvite привязывает каждую строку InvitePending для этого адреса с invite.Role. 30-символьный код приглашения на этом пути никогда не требуется. Роль может быть Admin.
Знайте приглашённый email. Пропустите код приглашения. Присоединитесь к организации как Admin.
| ID | пока нет CVE |
| Класс | Остаточные привилегии |
| Достижимость | Удалённая (неаутентифицированный HTTP; требуется users.allow_sign_up=true) |
| CWE | CWE-862 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Продукт | Grafana OSS |
| Затронуто | 13.2.3 (6193dc0); путь открытой регистрации |
| Аутентификация | неаутентифицированная. Проверка email по умолчанию выключена. Регистрация выключена в стандартном defaults.ini. |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1 |
Требуется приглашённый адрес (письмо с приглашением, догадка или другая утечка). Не требуется почтовый ящик и не требуется код приглашения. Не требуется существующая учётная запись Grafana.
| Привилегия | Метод / точка назначения | Разведка / целостность / доступность | Доказано в лаборатории или выведено |
|---|---|---|---|
| Создать учётную запись с приглашённым email | Неаутентифицированный POST /api/user/signup/step2 с code="" | Целостность (создание учётной записи) | Доказано в лаборатории. Сессия /api/user login=invitee |
| Присоединиться к приглашённой организации с ролью из приглашения (Admin в этой лаборатории) | applyUserInvite из GetTempUsersQuery{Email, InvitePending} | Целостность (членство в организации + роль) | Доказано в лаборатории. /api/user/orgs role=Admin; sqlite org_user Admin |
| Завершить ожидающее приглашение, чтобы реальный приглашённый не смог им воспользоваться | updateTempUserStatus(..., TmpUserCompleted) | Целостность (использование приглашения) | Доказано в лаборатории. Список ожидающих пуст; sqlite temp status=Completed |
| То же присоединение для приглашений Viewer/Editor | invite.Role копируется как есть | Целостность | Выведено. В лаборатории использовался Admin |
| Чтение/запись этой организации как Org Admin после входа | API Org Admin (datasources, dashboards, users) | Разведка + целостность | Выведено. Лаборатория останавливается на role=Admin |
| Негативный контроль | Регистрация с другим email и пустым кодом | н/д | Доказано в лаборатории. invite-org-role=none |
Закрыто на этом остатке: установка по умолчанию с выключенной регистрацией; путь с включённой проверкой email (этот путь проверяет form.Code); привязка email при завершении приглашения (класс CVE-2022-39306, всё ещё присутствует); Grafana Admin (isGrafanaAdmin). Не неаутентифицированный RCE. Пропустите Grafana G2 (IAM SSOSetting k8s authorizer).
Я зафиксировал Grafana OSS 13.2.3. Стандартная OSS-сборка не дала результата на этой планке. Я всё равно занялся путём открытой регистрации. POST /api/user/signup/step2 неаутентифицирован. SignUpStep2 создаёт пользователя, затем загружает ожидающие приглашения по email. form.Code требуется только когда VerifyEmailEnabled имеет значение true.
Уже зафиксированные ложные пути: повторная подача CVE-2022-39306 (завершение приглашения всё ещё привязывает email); трактовка стандартного defaults.ini как этого остатка (там регистрация выключена); неаутентифицированный SCIM в OSS (nil k8s client); обратная оболочка. Театр.
python3 grafana-signup-invite-join-Abraxas-Labs.py
или:
cd lab
./run.sh
Цель только http://127.0.0.1:19350. Образ grafana/grafana:13.2.3 с GF_USERS_ALLOW_SIGN_UP=true и выключенной проверкой email.
SUCCESS GRAFANA-SIGNUP-INVITE-JOIN version=13.2.3 invite-org=2 invite-code-len=30 step2-code-sent=empty step2-redirect=redirect-to-select-org api-role=Admin sqlite-role=Admin temp-status=Completed control-invite-org-role=none GRAFANA-SIGNUP-INVITE-JOIN-WITNESS
Требуйте код ожидающего приглашения или подтверждение почтового ящика перед applyUserInvite при регистрации. Не привязывайте строки InvitePending только по совпадению email.
signup.go · org_invite.goGNU Affero GPL v3.0. См. LICENSE. Только лаборатория на loopback. Без гарантий.