
Grafana OSS 13.2.3 - Alta - Remoto - Entrada por convite - SignUpStep2 entra em convites de organização pendentes sem o código
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · grafana-signup-invite-join
Classe: Privilégio remanescente Alcance: Remoto
Grafana OSS 13.2.3 (6193dc0) - Grafana Labs
Quando users.allow_sign_up é true e users.verify_email_enabled permanece no padrão false, um POST /api/user/signup/step2 não autenticado com um e-mail convidado cria a conta e applyUserInvite anexa cada linha InvitePending para esse endereço em invite.Role. O código de convite de 30 caracteres nunca é exigido nesse caminho. A função pode ser Admin.
Conheça o e-mail convidado. Pule o código de convite. Entre na organização como Admin.
| ID | ainda sem CVE |
| Classe | Privilégio remanescente |
| Alcance | Remoto (HTTP não autenticado; requer users.allow_sign_up=true) |
| CWE | CWE-862 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Produto | Grafana OSS |
| Afetado | 13.2.3 (6193dc0); caminho de cadastro aberto |
| Autenticação | não autenticado. Verificação de e-mail desativada por padrão. Cadastro desativado no defaults.ini padrão. |
| Licença | GNU Affero GPL v3.0 |
| Lab | apenas 127.0.0.1 |
Precisa do endereço convidado (o e-mail do convite, um palpite ou outro vazamento). Não precisa da caixa de correio e não precisa do código de convite. Não precisa de uma conta Grafana existente.
| Privilégio | Método / sink | Reconhecimento / integridade / disponibilidade | Comprovado em lab ou inferido |
|---|---|---|---|
| Criar uma conta com o e-mail convidado | POST /api/user/signup/step2 não autenticado com code="" | Integridade (criação de conta) | Comprovado em lab. Sessão /api/user login=convidado |
| Entrar na organização convidada com a função do convite (Admin neste lab) | applyUserInvite a partir de GetTempUsersQuery{Email, InvitePending} | Integridade (participação na organização + função) | Comprovado em lab. /api/user/orgs role=Admin; sqlite org_user Admin |
| Concluir o convite pendente para que o convidado real não possa usá-lo | updateTempUserStatus(..., TmpUserCompleted) | Integridade (consumo do convite) | Comprovado em lab. Lista de pendentes vazia; sqlite temp status=Completed |
| Mesma entrada para convites de Viewer/Editor | invite.Role é copiado como está | Integridade | Inferido. O lab usou Admin |
| Ler/escrever nessa organização como Org Admin após o login | APIs de Org Admin (datasources, dashboards, users) | Reconhecimento + integridade | Inferido. O lab para em role=Admin |
| Controle negativo | Cadastro com um e-mail diferente com código vazio | n/a | Comprovado em lab. invite-org-role=none |
Fechado neste remanescente: instalação padrão com cadastro desativado; caminho com verificação de e-mail ativada (esse caminho verifica form.Code); vínculo de e-mail de convite completo (classe CVE-2022-39306, ainda presente); Grafana Admin (isGrafanaAdmin). Não é RCE não autenticado. Ignore o Grafana G2 (autorizador k8s IAM SSOSetting).
Fixe a versão Grafana OSS 13.2.3. O OSS padrão voltou vazio nesse critério. Mesmo assim, insisti no caminho de cadastro aberto. POST /api/user/signup/step2 não é autenticado. SignUpStep2 cria o usuário e depois carrega convites pendentes por e-mail. form.Code só é exigido quando VerifyEmailEnabled é true.
Caminhos errados já registrados: reenviar CVE-2022-39306 (convite completo ainda vincula o e-mail); tratar o defaults.ini padrão como este remanescente (o cadastro está desativado lá); SCIM não autenticado no OSS (cliente k8s nulo); um reverse shell. Teatro.
python3 grafana-signup-invite-join-Abraxas-Labs.py
ou:
cd lab
./run.sh
Alvo apenas http://127.0.0.1:19350. Imagem grafana/grafana:13.2.3 com GF_USERS_ALLOW_SIGN_UP=true e verificação de e-mail desativada.
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
Exigir o código de convite pendente, ou prova de caixa de correio, antes de applyUserInvite no cadastro. Não anexar linhas InvitePending apenas com base na correspondência de e-mail.
signup.go · org_invite.goGNU Affero GPL v3.0. Consulte LICENSE. Apenas lab em loopback. Sem garantia.