
Grafana OSS 13.2.3 - Élevé - À distance - Rejoindre sur invitation - SignUpStep2 rejoint les invitations d'organisation en attente sans le code
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · grafana-signup-invite-join
Classe : Privilège résiduel Portée : Distante
Grafana OSS 13.2.3 (6193dc0) - Grafana Labs
Lorsque users.allow_sign_up vaut true et que users.verify_email_enabled reste à sa valeur par défaut false, un POST /api/user/signup/step2 non authentifié avec un email invité crée le compte et applyUserInvite attache chaque ligne InvitePending pour cette adresse avec invite.Role. Le code d'invitation de 30 caractères n'est jamais requis sur ce chemin. Le rôle peut être Admin.
Connaître l'email invité. Contourner le code d'invitation. Rejoindre l'organisation en tant qu'Admin.
| ID | pas encore de CVE |
| Classe | Privilège résiduel |
| Portée | Distante (HTTP non authentifié ; nécessite users.allow_sign_up=true) |
| CWE | CWE-862 |
| CVSS | Élevé : 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Produit | Grafana OSS |
| Affecté | 13.2.3 (6193dc0) ; chemin d'inscription ouverte |
| Auth | non authentifié. Vérification d'email désactivée par défaut. Inscription désactivée dans le defaults.ini standard. |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 uniquement |
Nécessite l'adresse invitée (l'email d'invitation, une supposition, ou une autre fuite). N'a pas besoin de la boîte mail et n'a pas besoin du code d'invitation. N'a pas besoin d'un compte Grafana existant.
| Privilège | Méthode / cible | Reconnaissance / intégrité / disponibilité | Prouvé en lab ou déduit |
|---|---|---|---|
| Créer un compte avec l'email invité | POST /api/user/signup/step2 non authentifié avec code="" | Intégrité (création de compte) | Prouvé en lab. Session /api/user login=invitee |
| Rejoindre l'organisation invitée avec le rôle d'invitation (Admin dans ce lab) | applyUserInvite depuis GetTempUsersQuery{Email, InvitePending} | Intégrité (appartenance à l'organisation + rôle) | Prouvé en lab. /api/user/orgs role=Admin ; sqlite org_user Admin |
| Consommer l'invitation en attente pour que le véritable invité ne puisse plus l'utiliser | updateTempUserStatus(..., TmpUserCompleted) | Intégrité (consommation de l'invitation) | Prouvé en lab. Liste des invitations en attente vide ; sqlite temp status=Completed |
| Même jointure pour les invitations Viewer/Editor | invite.Role est copié tel quel | Intégrité | Déduit. Le lab a utilisé Admin |
| Lire/écrire dans cette organisation en tant qu'Org Admin après connexion | API Org Admin (datasources, dashboards, users) | Reconnaissance + intégrité | Déduit. Le lab s'arrête à role=Admin |
| Contrôle négatif | Inscription avec un autre email et un code vide | n/a | Prouvé en lab. invite-org-role=none |
Fermé sur ce résidu : installation par défaut avec inscription désactivée ; chemin avec vérification d'email activée (ce chemin vérifie form.Code) ; liaison d'email à l'invitation complète (classe CVE-2022-39306, toujours présente) ; Grafana Admin (isGrafanaAdmin). Pas de RCE non authentifiée. Ignorer Grafana G2 (IAM SSOSetting k8s authorizer).
J'ai épinglé Grafana OSS 13.2.3. L'OSS par défaut est revenu vide à ce niveau. Je me suis quand même attardé sur le chemin d'inscription ouverte. POST /api/user/signup/step2 est non authentifié. SignUpStep2 crée l'utilisateur, puis charge les invitations en attente par email. form.Code n'est requis que lorsque VerifyEmailEnabled est true.
Fausses pistes déjà consignées : re-déclarer CVE-2022-39306 (l'invitation complète lie toujours l'email) ; traiter le defaults.ini standard comme ce résidu (l'inscription y est désactivée) ; SCIM non authentifié sur OSS (client k8s nil) ; un reverse shell. Du théâtre.
python3 grafana-signup-invite-join-Abraxas-Labs.py
ou :
cd lab
./run.sh
Cible uniquement http://127.0.0.1:19350. Image grafana/grafana:13.2.3 avec GF_USERS_ALLOW_SIGN_UP=true et la vérification d'email laissée désactivée.
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
Exiger le code d'invitation en attente, ou une preuve de boîte mail, avant applyUserInvite lors de l'inscription. Ne pas attacher les lignes InvitePending à partir de la seule correspondance d'email.
signup.go · org_invite.goGNU Affero GPL v3.0. Voir LICENSE. Lab en boucle locale uniquement. Aucune garantie.