
Grafana OSS 13.2.3 - उच्च - रिमोट - Invite join - SignUpStep2 बिना कोड के लंबित org invites में शामिल हो जाता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · grafana-signup-invite-join
Class: Privilege leftover Reach: Remote
Grafana OSS 13.2.3 (6193dc0) - Grafana Labs
जब users.allow_sign_up true होता है और users.verify_email_enabled डिफ़ॉल्ट false पर बना रहता है, तो unauthenticated POST /api/user/signup/step2 किसी invited email के साथ account बना देता है और applyUserInvite उस address की हर InvitePending row को invite.Role पर attach कर देता है। इस path पर 30-character invite code की कभी आवश्यकता नहीं होती। Role Admin हो सकता है।
Invited email जानें। Invite code छोड़ें। Admin के रूप में org में शामिल हों।
| ID | अभी तक कोई CVE नहीं |
| Class | Privilege leftover |
| Reach | Remote (unauthenticated 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 |
| Product | Grafana OSS |
| Affected | 13.2.3 (6193dc0); open-signup path |
| Auth | unauthenticated. Email verify डिफ़ॉल्ट रूप से off. stock defaults.ini में signup off. |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
Invited address चाहिए (invite email, एक अनुमान, या कोई अन्य leak)। Mailbox की आवश्यकता नहीं और invite code की आवश्यकता नहीं। मौजूदा Grafana account की आवश्यकता नहीं।
| Privilege | Method / sink | Recon / integrity / availability | Lab-proven या inferred |
|---|---|---|---|
| Invited email के रूप में account बनाएँ | Unauth POST /api/user/signup/step2 with code="" | Integrity (account create) | Lab-proven. Session /api/user login=invitee |
| Invite role पर invited org में शामिल हों (इस lab में Admin) | applyUserInvite from GetTempUsersQuery{Email, InvitePending} | Integrity (org membership + role) | Lab-proven. /api/user/orgs role=Admin; sqlite org_user Admin |
| Pending invite पूरा करें ताकि असली invitee इसे उपयोग न कर सके | updateTempUserStatus(..., TmpUserCompleted) | Integrity (invite consumption) | Lab-proven. Pending list खाली; sqlite temp status=Completed |
| Viewer/Editor invites के लिए वही join | invite.Role जैसा है वैसा ही copy होता है | Integrity | Inferred. Lab ने Admin का उपयोग किया |
| Login के बाद उस org को Org Admin के रूप में read/write करें | Org Admin APIs (datasources, dashboards, users) | Recon + integrity | Inferred. Lab role=Admin पर रुकता है |
| Negative control | भिन्न email के साथ empty code से signup | n/a | Lab-proven. invite-org-role=none |
इस leftover पर बंद: signup off के साथ default install; email-verify-on path (वह path form.Code जाँचता है); complete-invite email bind (CVE-2022-39306 class, अभी भी मौजूद); Grafana Admin (isGrafanaAdmin)। unauthenticated RCE नहीं। Grafana G2 (IAM SSOSetting k8s authorizer) छोड़ें।
मैंने Grafana OSS 13.2.3 pin किया। Default OSS इस bar पर खाली लौटा। मैंने फिर भी open-signup path पर ध्यान दिया। POST /api/user/signup/step2 unauthenticated है। SignUpStep2 user बनाता है, फिर email से pending invites load करता है। form.Code केवल तब आवश्यक है जब VerifyEmailEnabled true हो।
पहले से दर्ज गलत रास्ते: CVE-2022-39306 को फिर से file करना (complete-invite अभी भी email bind करता है); stock defaults.ini को इस leftover के रूप में मानना (वहाँ signup off है); OSS पर SCIM unauth (nil k8s client); एक reverse shell। नाटक।
python3 grafana-signup-invite-join-Abraxas-Labs.py
या:
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:19350। Image grafana/grafana:13.2.3 with GF_USERS_ALLOW_SIGN_UP=true और email verify off छोड़ा गया।
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
Signup पर applyUserInvite से पहले pending invite code, या mailbox proof आवश्यक करें। केवल email match से InvitePending rows attach न करें।
signup.go · org_invite.goGNU Affero GPL v3.0. देखें LICENSE। केवल Loopback lab। कोई warranty नहीं।