Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with access to one TechDocs site
-
ExploitCraft static-docs URL with encoded %2e%2e segments
-
ExecutionBypass per-entity permission check
-
ImpactRead documentation of another entity
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires ALL of the following to hold simultaneously: (1) the deployment uses the external TechDocs builder with an external storage provider such as AWS S3 or Google Cloud Storage; (2) the Backstage permission framework is enabled (permission.enabled: true); and (3) the attacker is an authenticated user who already has authorized access to at least one TechDocs documentation site. Given those, the attacker sends a crafted request to the /static/docs/... endpoint using percent-encoded dot-dot (%2e%2e) segments to traverse outside their permitted entity directory. LIMITING FACTORS: authentication is required (PR:L); the permission framework must be explicitly enabled - instances without it are unaffected because TechDocs content is intentionally visible to all authenticated users; and the non-default external-builder + external-storage configuration must be in use. These preconditions substantially narrow the exposed population below what the network attack vector alone would suggest. |
| Impact | Signals converge on a moderate, conditional risk rather than an urgent one. The CVSS 3.1 base score of 6.5 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N) describes a network-reachable, low-complexity information-disclosure flaw that nonetheless requires an authenticated account (PR:L) and yields confidentiality-only impact (I:N/A:N). No EPSS score was provided in the input, so probabilistic exploitation likelihood cannot be quantified. The CVE is NOT listed in CISA KEV and no packaged public exploit is referenced, so exploitation status is 'no public exploit identified at time of analysis' - however, the fixing commit (bf6bbf7) ships a regression test embedding the exact working payload '/static/docs/default/component/entity-a/%2e%2e/entity-b/index.html', which effectively discloses the technique to any reader of the patch. The decisive risk-limiting factor is configuration scope: the flaw only manifests when the external TechDocs builder is used with an external storage provider (S3/GCS/etc.) AND the permission framework is enabled; deployments without the permission framework are unaffected by design. No SSVC decision record was supplied. Net: this is a legitimately real but narrowly-scoped authorization-bypass affecting a subset of Backstage installations, not a high-CVSS-but-illusory issue, yet also not a mass-exploitation priority given the authentication requirement, confidentiality-only impact, and restrictive configuration preconditions. |
| Exploit ScenarioDerived | An authenticated engineer who is authorized to view the TechDocs site for one catalog entity crafts a request containing encoded '..' path segments (e.g. %2e%2e) to traverse out of their permitted entity path and retrieve documentation belonging to a different entity whose docs the permission framework was meant to hide from them. Because exploitation is network-based, low-complexity (AV:N/AC:L) and needs only a valid low-privilege session plus the specific external-storage + permission-framework configuration, it is trivial once those preconditions hold. No packaged public exploit is referenced, but the vendor's fixing commit includes a test case that reproduces the exact traversal payload. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Authenticated users of Backstage TechDocs can bypass entity-scoped authorization and read documentation belonging to other entities by requesting a crafted /static/docs/... URL containing percent-encoded parent-directory (%2e%2e) segments. The issue is confined to deployments that combine the external TechDocs builder with an external storage provider (S3, GCS, etc.) and have the Backstage permission framework enabled; setups without the permission framework are unaffected because TechDocs content is intentionally readable by all authenticated users, and the default local builder/storage path is not exposed. Exploitation requires an authenticated account that already has access to at least one TechDocs site (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N, 6.5), exposure is therefore limited to confidentiality of docs across entity boundaries, and no public exploit code or confirmed active exploitation was identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade @backstage/plugin-techdocs-backend to version 2.2.4 (Backstage release referenced as v1.54.6), as documented in advisory GHSA-rg9r-hr7g-5gc2 and implemented by commit bf6bbf7326ada7d96d7b2c4ebc4a71546106f311, which adds an isPathWithinEntity() normalization guard in plugins/techdocs-backend/src/service/router.ts. Where an immediate upgrade is not possible, the most effective compensating control is to switch from the external TechDocs builder/external storage configuration to the default local builder and storage, which removes the vulnerable static-serving path entirely, at the cost of losing object-store-backed scaling and multi-writer publishing. Alternatively, front the /static/docs/ endpoints with a reverse proxy or WAF rule that rejects request paths containing raw or percent-encoded dot-dot sequences (%2e%2e, %2e., ..), being aware that overly aggressive normalization rules can break legitimate documentation links that rely on encoded characters. Because exploitation requires an authenticated account with access to at least one TechDocs site, tightening TechDocs permissions (least-privilege entity grants) and auditing which entities each account can reach limits blast radius but does not close the traversal itself. Note that disabling the permission framework is not a remediation: although such deployments are reported unaffected by this bypass, TechDocs content is visible to all authenticated users by design, so it would widen rather than narrow exposure. Administrators should also review external storage access logs for /static/docs/ requests containing encoded traversal sequences to assess whether cross-entity reads occurred.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 3 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is a path traversal (CWE-22) in the Express router of @backstage/plugin-techdocs-backend. The backend resolves the target entity from the leading URL segments, performs its TechDocs permission check against that entity, and then hands the remaining relative path to the storage provider's docsRouter for retrieval. Because the traversal segments were not normalized before the storage lookup, a request such as /static/docs/default/component/entity-a/%2e%2e/entity-b/index.html could resolve outside entity-a's directory in the external object store while still passing the authorization check performed for entity-a. The fix introduces an isPathWithinEntity() guard in plugins/techdocs-backend/src/service/router.ts that decodes the request path, strips leading slashes, runs path.posix.normalize(), and rejects anything equal to '..' or beginning with '../' with a NotFoundError before the docsRouter is invoked. The accompanying test asserts that a contained path (/static/docs/default/component/entity-a/dir/%2e%2e/index.html) still returns 200 while a traversing path (/static/docs/default/component/entity-a/%2e%2e/entity-b/index.html) returns 404 without calling the docs router. The underlying technology chain - the permission framework, the entity-derived storage key layout, and object-store path semantics in S3/GCS - is what makes the normalization step security-relevant rather than cosmetic.
Know when Backstage gets its next vulnerability
- 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
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Authenticated user crafts a URL over the network with low complexity (PR:L/AC:L/AV:N); impact is cross-entity documentation disclosure only, so C:H with I:N/A:N and unchanged scope.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Backstage is an open framework for building developer portals. Prior to 2.2.4, the @backstage/plugin-techdocs-backend package is affected by improper authorization enforcement for techdocs static content. An authenticated user with access to one TechDocs documentation site could craft a URL able to read documentation belonging to a different entity. This only affects deployments using the external TechDocs builder with an external storage provider (S3, GCS, etc.) and the permission framework enabled. Instances that do not use the permission framework are unaffected, since TechDocs content is visible to all authenticated users by design. This issue is fixed in version 2.2.4.
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
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
The Bitbucket pull-request Scaffolder actions in Backstage can be abused by an authenticated user with template-executio
Backstage is an open platform for building developer portals. Rated critical severity (CVSS 9.9), this vulnerability is
Authenticated Backstage users can retrieve the internal execution data of other users' Scaffolder tasks - notably the Se
Authenticated users who can register or modify a TechDocs documentation source can achieve code execution inside the Bac
Authenticated remote code execution in the @backstage/plugin-techdocs-node package shipped with the Backstage developer
Arbitrary code execution in Backstage TechDocs documentation builds allows an authenticated user with write access to a
Arbitrary Python code execution in Backstage's @backstage/plugin-techdocs-node (versions < 1.13.11 and = 1.14.0) lets a
Improper task-state validation in the @backstage/plugin-scaffolder-backend plugin (Backstage versions prior to 3.3.1, 3.
Arbitrary code execution on the TechDocs backend host is achievable through a sanitizer bypass in the @backstage/plugin-
Improper input validation in the @backstage/plugin-scaffolder-backend-module-sentry scaffolder actions (Backstage 0.3.0
@backstage/plugin-scaffolder-backend is the backend for the default Backstage software templates. Rated high severity (C
Authenticated users of Backstage Scaffolder can bypass administrator-configured action restrictions in @backstage/plugin
EUVD-2026-94008
GHSA-rg9r-hr7g-5gc2
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB