Skip to main content

ZaneOps CVE-2026-121734

| EUVDEUVD-2026-116592 MEDIUM
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-11-03 disclosure@vulncheck.com GHSA-wx9v-p2rq-5m8q
6.0
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain admin role in own workspace
  2. Exploit
    Read victim project slug and env name from public fork-PR comment
  3. Execution
    Send GET to ReviewPreviewEnvDeployAPIView with victim parameters (no project scoping)
  4. Impact
    Receive cross-workspace plaintext env vars and preview basic-auth credentials

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
Exploitation Conditions

Exploitation requires a multi-workspace (multi-tenant) ZaneOps deployment; single-workspace instances are not affected. The attacker must already hold the administrator role in at least one workspace (PR:L - self-created workspace suffices), and the target project must have preview environments enabled with an active fork PR preview still in the PENDING (unapproved) state. The attacker obtains the exact project slug and environment name - including the random fake.slug() suffix - from the public PR comment ZaneOps auto-posts (approval_url at models/main.py:2321), so nothing must be guessed. Limiting factors that reduce real-world risk: the route is read-only (no write/deploy to the victim workspace), exposure is confined to the PENDING window until a maintainer approves/declines the fork preview, the correctly-scoped POST sibling is unaffected, and no RCE or integrity impact is possible through this path.

Impact

This is a genuine but bounded cross-tenant confidentiality flaw, best characterized as a moderate, targeted-risk issue rather than a mass-exploitation emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:L/UI:N) and the VC:H/VI:N/VA:N impact set agree with the evidence: network-reachable API, but requiring privileges (PR:L - the attacker must hold a workspace admin role) and an attack requirement (AT:P - an active fork PR preview must exist in the PENDING state in the target workspace), with impact limited to confidentiality only (no integrity or availability loss, no scope change). The vuln.today decision label is 'this_month', consistent with a real but non-critical priority. No EPSS score and no KEV status were provided - absence of both, combined with a product requiring multi-tenant deployment and an insider admin foothold, points to targeted rather than widespread opportunistic exploitation. The PoC in the GHSA advisory is explicitly derived from static review and was not executed against a live deployment, so it should not be treated as confirmed active exploitation. Net: prioritize patching within the stated this_month window on shared multi-workspace instances, but this is not a drop-everything event given the privilege and deployment-mode preconditions and read-only, confidentiality-only impact.

Exploit ScenarioDerived

On a shared multi-tenant ZaneOps instance, an attacker who is administrator of their own workspace reads the slug and environment name that ZaneOps automatically posts in a public comment on a victim workspace's fork pull request. They then call the GET handler of ReviewPreviewEnvDeployAPIView with those parameters; because the lookup omits the workspace/project scoping filter used by its POST sibling, the victim's pending preview environment is returned, disclosing plaintext environment variables (cloned from production) and the preview basic-auth credentials. A public PoC reference exists in the GHSA advisory; it is not verified as working exploit code, as it was derived from static review and not run against a live deployment.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Nov 03, 2026

Cross-workspace information disclosure in ZaneOps 1.14.0 through 1.15.1 allows an administrator of any single workspace to read another tenant's pending fork preview environment - including plaintext environment variables cloned from the target project's base environment and the preview basic-auth credentials - by calling the ReviewPreviewEnvDeployAPIView GET endpoint with a victim project slug and environment name. Both parameters are published by ZaneOps itself in a public comment on the fork pull request, so nothing has to be guessed, but the route is read-only and exposure is confined to previews still in the PENDING (unapproved) state on multi-workspace deployments. Exploitation requires an authenticated workspace administrator (PR:L, a self-created workspace suffices); a public PoC reference exists but is not verified as working exploit code, and no active exploitation has been confirmed.

RemediationAI

Vendor-released patch: v1.15.2 - upgrade ZaneOps to at least 1.15.2 (release tag https://github.com/zane-ops/zane-ops/releases/tag/v1.15.2, containing commit 0f3e30403a605dc155a664bc70722c74159a6494, which adds the accessible_project_ids() workspace filter to the GET lookup in backend/zane_api/views/environments.py). The advisory at https://github.com/zane-ops/zane-ops/security/advisories/GHSA-r87v-8542-wx9q identifies updating as the fix; until an instance is upgraded, exposure can be reduced by approving or declining pending fork PR previews promptly so no environment lingers in the PENDING state that the endpoint reads, by keeping workspace administrator grants limited to trusted users on shared multi-tenant instances (the attacker needs the admin role in any one workspace, and an admin of their own workspace never triggers the serializer's sensitive-field stripping), and by avoiding preview deployments for public fork pull requests on shared instances where the patch cannot be applied - noting that these only shrink the exposure window, since the vulnerable GET is read-only and causes no write, integrity or code-execution impact in the victim workspace.

Affected VersionsENISA

zane-ops 1.14.0 <1.15.2

Affected Packages

euvd zane_ops fix: 1.15.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

ZaneOps is a Django REST Framework application whose multi-tenant separation is enforced not by the permission classes but by a scoping primitive: accessible_project_ids() in backend/zane_api/permissions.py returns the projects of the caller's workspace, and project-scoped views filter their lookups through id__in=request_access(request).accessible_project_ids(). IsWorkspaceAdmin only verifies the caller's role inside their own workspace, so it does not constrain which tenant's project is fetched. In the GET handler of ReviewPreviewEnvDeployAPIView (backend/zane_api/views/environments.py:238), the lookup is a bare Project.objects.get(slug=slug.lower()) with no workspace filter, while the POST handler in the same class (environments.py:285) applies the filter - the asymmetry is the entire bug and maps to CWE-639 (Authorization Bypass Through User-Controlled Key) with a CWE-200 disclosure outcome. EnvironmentWithVariablesSerializer then serializes variables through SharedEnvVariableSerializer (id, key, value) and preview_metadata through PreviewMetadataSerializer (auth_user, auth_password); sensitive fields are stripped only when the caller lacks WorkspaceRole.MEMBER, which never applies to a workspace admin. The required keys are not secret: fork PR previews are named preview-pr-{number}-{service}-{fake.slug()} and ZaneOps posts a public PR comment containing an approval_url of the form /project/{project.slug}/{environment.name}/review-deployment (models/main.py:2321), disclosing both the slug and the randomly suffixed environment name. The committed fix (0f3e304) adds id__in=request_access(self.request).accessible_project_ids() to the GET lookup.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (vulncheck) PRIMARY 6.0 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.3 MEDIUM

Network API with authenticated workspace-admin access (PR:L); AC:H because a target-side pending fork preview must exist (attacker-uncontrolled); confidentiality-only secret disclosure, so C:H, I:N, A:N.

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Nov 04, 2026 - 02:16 EUVD

DescriptionCVE.org

ZaneOps 1.14.0 before 1.15.2 contains an authorization bypass vulnerability that allows any workspace administrator to read another workspace's pending preview environment by querying ReviewPreviewEnvDeployAPIView without project scoping. Attackers can use the project slug and environment name from public fork pull request comments to retrieve plaintext environment variables and preview basic-auth credentials.

Threat Intelligence Overview

Prevalence
Low
niche self-hosted open-source PaaS, limited multi-tenant production footprint
Data Quality
3 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy