Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain admin role in own workspace
-
ExploitRead victim project slug and env name from public fork-PR comment
-
ExecutionSend GET to ReviewPreviewEnvDeployAPIView with victim parameters (no project scoping)
-
ImpactReceive 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
Lifecycle Timeline
1DescriptionCVE.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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-116592
GHSA-wx9v-p2rq-5m8q
NVD
CVE.org
Exploit-DB