Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
grafana-signup-invite-join — Grafana OSS 13.2.3 - High - Remote - Invite join - SignUpStep2 joins pending org invites without the code | Kitploit
Tools/GitHubGitHub/abraxas/grafana-signup-invite-join
Authentication & AuthorizationPrivilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingLabs & Practice

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
GitHubabraxas/grafana-signup-invite-join

grafana-signup-invite-join

Grafana OSS 13.2.3 - High - Remote - Invite join - SignUpStep2 joins pending org invites without the code

View Repository
75 days agoNot yet reviewed

Abraxas Labs - grafana-signup-invite-join

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  grafana-signup-invite-join

grafana-signup-invite-join

Class: Privilege leftover Reach: Remote

Grafana OSS 13.2.3 (6193dc0) - Grafana Labs

When users.allow_sign_up is true and users.verify_email_enabled stays at the default false, unauthenticated POST /api/user/signup/step2 with an invited email creates the account and applyUserInvite attaches every InvitePending row for that address at invite.Role. The 30-character invite code is never required on this path. Role can be Admin.

Know the invited email. Skip the invite code. Join the org as Admin.

IDno CVE yet
ClassPrivilege leftover
ReachRemote (unauthenticated HTTP; needs users.allow_sign_up=true)
CWECWE-862
CVSSHigh: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
ProductGrafana OSS
Affected13.2.3 (6193dc0); open-signup path
Authunauthenticated. Email verify default off. Signup off in stock defaults.ini.
LicenseGNU Affero GPL v3.0
Lab127.0.0.1 only

What an attacker can do

Needs the invited address (the invite email, a guess, or another leak). Does not need the mailbox and does not need the invite code. Does not need an existing Grafana account.

PrivilegeMethod / sinkRecon / integrity / availabilityLab-proven or inferred
Create an account as the invited emailUnauth POST /api/user/signup/step2 with code=""Integrity (account create)Lab-proven. Session /api/user login=invitee
Join the invited org at the invite role (Admin in this lab)applyUserInvite from GetTempUsersQuery{Email, InvitePending}Integrity (org membership + role)Lab-proven. /api/user/orgs role=Admin; sqlite org_user Admin
Complete the pending invite so the real invitee cannot use itupdateTempUserStatus(..., TmpUserCompleted)Integrity (invite consumption)Lab-proven. Pending list empty; sqlite temp status=Completed
Same join for Viewer/Editor invitesinvite.Role is copied as-isIntegrityInferred. Lab used Admin
Read/write that org as Org Admin after loginOrg Admin APIs (datasources, dashboards, users)Recon + integrityInferred. Lab stops at role=Admin
Negative controlSignup as a different email with empty coden/aLab-proven. invite-org-role=none

Closed on this leftover: default install with signup off; email-verify-on path (that path checks form.Code); complete-invite email bind (CVE-2022-39306 class, still present); Grafana Admin (isGrafanaAdmin). Not unauthenticated RCE. Skip Grafana G2 (IAM SSOSetting k8s authorizer).

How I found it

I pinned Grafana OSS 13.2.3. Default OSS came back empty at this bar. I sat on the open-signup path anyway. POST /api/user/signup/step2 is unauthenticated. SignUpStep2 creates the user, then loads pending invites by email. form.Code is only required when VerifyEmailEnabled is true.

Wrong turns already recorded: re-filing CVE-2022-39306 (complete-invite still binds the email); treating stock defaults.ini as this leftover (signup is off there); SCIM unauth on OSS (nil k8s client); a reverse shell. Theatre.

Lab

python3 grafana-signup-invite-join-Abraxas-Labs.py

or:

cd lab
./run.sh

Target only http://127.0.0.1:19350. Image grafana/grafana:13.2.3 with GF_USERS_ALLOW_SIGN_UP=true and email verify left 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

The fix

Require the pending invite code, or mailbox proof, before applyUserInvite on signup. Do not attach InvitePending rows from email match alone.

References

  • github.com/grafana/grafana tag v13.2.3
  • signup.go · org_invite.go
  • Nearby (not this path): CVE-2022-39306
  • CWE-862

License

GNU Affero GPL v3.0. See LICENSE. Loopback lab only. No warranty.

Download Tool