
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-30920 is a broken access control vulnerability in OneUptime's GitHub App installation callback flow that allows unauthenticated attackers to overwrite another project's GitHub App installation binding and create unauthorized CodeRepository records. It affects all OneUptime versions prior to 10.0.19 (npm packages oneuptime and @oneuptime/common). The vulnerability was published on March 6, 2026, and patched in version 10.0.19. It carries a CVSS v3.1 base score of 8.6 (High) (GitHub Advisory, OneUptime Advisory).
The root cause is a combination of CWE-345 (Insufficient Verification of Data Authenticity), CWE-639 (Authorization Bypass Through User-Controlled Key), and CWE-862 (Missing Authorization). The GitHub App OAuth callback endpoint (/api/github/auth/callback) decodes an unsigned base64-encoded JSON blob from the state query parameter and uses the embedded projectId directly to update Project.gitHubAppInstallationId with isRoot: true privileges — without verifying that the caller owns or is authorized for that project. The userId field in state is only checked for presence, not authenticity, and the state token itself is plain base64 JSON rather than a signed or session-bound value. Additionally, the middleware permits requests with no authentication token to proceed as Public, and installation tokens can be minted from any valid installation_id, making follow-on repository listing and connect endpoints equally exploitable (OneUptime Advisory, GitHub Advisory).
Successful exploitation allows an unauthenticated attacker to overwrite any project's gitHubAppInstallationId, effectively hijacking or disrupting its GitHub integration (availability impact). Using a valid installation_id, an attacker can enumerate repository metadata across projects (confidentiality impact) and create unauthorized CodeRepository records in arbitrary projects they do not own (integrity impact). This cross-tenant data manipulation could break CI/CD pipelines, expose repository metadata, and enable an attacker to bind their own GitHub App installation to a victim project for persistent access (OneUptime Advisory).
A proof-of-concept exploit is publicly available in the official security advisory, consisting of a minimal two-line bash/curl command that requires no authentication and no special tooling (OneUptime Advisory). The EPSS score is approximately 0.011% (2nd percentile), indicating a low current probability of active exploitation. There is no evidence of in-the-wild exploitation at this time, and the vulnerability is not listed in the CISA KEV catalog. No threat actor attribution has been reported (GitHub Advisory).
projectId (a UUID) of the target project — this may be discoverable via the OneUptime UI, API responses, or public dashboards.projectId and any non-empty userId value, then base64-encode it:STATE=$(printf '%s' '{"projectId":"<victim-project-id>","userId":"x"}' | base64 | tr -d '\n')installation_id can be obtained from any GitHub App installation the attacker controls, or by guessing/enumerating numeric IDs.curl -isk "https://<host>/api/github/auth/callback?installation_id=<installation_id>&state=${STATE}"/dashboard/<projectId>/code-repository?installation_id=<installation_id>, and the victim project's gitHubAppInstallationId is overwritten with the attacker-supplied value.installation_id against the repository listing endpoint (GitHubAPI.ts#L179-L258) to enumerate repository metadata for the bound installation.GitHubAPI.ts#L260-L356) to create CodeRepository records in the victim project, establishing persistent unauthorized access to the project's code integration (OneUptime Advisory)./api/github/auth/callback with state parameters containing base64-encoded JSON where the userId is a single character (e.g., x) or otherwise anomalous; requests originating from IPs not associated with GitHub's OAuth redirect infrastructure./api/github/auth/callback to /dashboard/<projectId>/code-repository for project IDs not initiated by the project owner; repeated callback requests with varying installation_id values suggesting enumeration.Project.gitHubAppInstallationId fields in the database, particularly if the new value does not correspond to a GitHub App installation authorized by the project owner; newly created CodeRepository records in projects whose owners did not initiate a GitHub connection.GitHub.ts#L347-L425) for installation_id values not associated with the project's legitimate GitHub App setup (OneUptime Advisory).Upgrade OneUptime to version 10.0.19 or later, which fixes this vulnerability (GitHub Advisory). No official configuration-based workaround is provided; the recommended remediation is to validate all attacker-controlled state and installation_id values in the GitHub App callback handler, implement proper authorization checks before allowing updates to Project.gitHubAppInstallationId, and enforce authentication on all GitHub-related endpoints. Organizations unable to upgrade immediately should consider disabling the GitHub App integration feature or restricting network access to the /api/github/ endpoints until patching is possible (OneUptime Advisory).
The vulnerability was reported by security researcher maru1009 and published by OneUptime maintainer simlarsen on March 6, 2026 (OneUptime Advisory). Coverage appeared on The Hacker Wire, which published a dedicated technical write-up on the authorization bypass (The Hacker Wire). Social media activity was observed on Bluesky and via CVEnew notifications, indicating moderate community awareness. No significant vendor controversy or widespread media coverage beyond security-focused outlets has been noted.
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."