Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to Backstage portal
-
DeliveryPlant external symlink in docs source tree
-
ExploitRequest linked path via TechDocs serving endpoint
-
ExecutionEndpoint follows symlink outside output dir
-
ImpactRead arbitrary host file contents
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 | Requires ALL of the following: (1) the TechDocs backend configured with techdocs.publisher.type: 'local' - cloud publishers (S3, GCS, Azure Blob Storage) are explicitly NOT affected; (2) a published documentation directory that contains a symbolic link pointing outside the intended output tree (e.g. to /etc/passwd), which the vendor states does not arise through normal MkDocs operation; and (3) an authenticated user (PR:L) able to reach the documentation serving endpoint. Limiting factors: the non-default local publisher, the need for a pre-existing malicious/misconfigured symlink in the docs source, authenticated access, and confidentiality-only impact (no integrity or availability effect). These combine to the vendor's own 'preconditions that do not arise through normal operation,' consistent with AC:H. |
| Impact | This is a high-CVSS-component but genuinely low-real-world-risk issue, and the signals are largely consistent. The provided CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N = 5.3 Medium) shows a network-reachable serving endpoint but with HIGH attack complexity and LOW-privilege authentication required, and only a confidentiality impact. The vendor (GitHub Security Advisory GHSA-cm77-ch27-6w6v) explicitly states exploitation 'requires preconditions that do not arise through normal MkDocs operation,' which directly supports the AC:H rating and sharply reduces practical exploitability. No EPSS score, no CISA KEV listing, and no public exploit code were provided - the only code evidence is the vendor's own remediation commit, not a proof-of-concept. Exploitation status is therefore: no public exploit identified at time of analysis. The C:H impact (arbitrary host file exposure such as /etc/passwd, per the test fixtures) is the one signal that justifies attention, but it is strongly gated: only the local publisher (techdocs.publisher.type: 'local', a non-recommended production mode) is affected, cloud publishers (S3, GCS, Azure Blob) are explicitly not affected, and a malicious symlink must already exist in the documentation tree. Net: patch during normal maintenance rather than emergency response. One inconsistency to flag: the 'Microsoft' tag in the input is incorrect - Backstage is an independent CNCF/Spotify open-source project, not a Microsoft product. |
| Exploit ScenarioDerived | An authenticated Backstage user browses TechDocs on an instance configured with the local publisher, where a published documentation bundle contains a symlink (e.g. 'leaked' -> /etc/passwd) that was committed or planted in the source docs. When the serving endpoint follows that filesystem reference, the attacker reads host files outside the intended documentation tree. No public proof-of-concept exists - only the vendor patch is available - and the high attack complexity (symlinks do not arise from normal MkDocs builds) makes opportunistic exploitation unlikely. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Filesystem path traversal in the Backstage TechDocs local publisher (@backstage/plugin-techdocs-node) can expose host files - such as /etc/passwd - to authenticated users of the documentation serving endpoint when the backend is configured with techdocs.publisher.type: 'local'. Exploitation requires a documentation source tree that already contains a symbolic link pointing outside the intended output directory, a precondition the vendor states does not arise through normal MkDocs operation, plus an authenticated user able to reach the endpoint (CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N, base 5.3, confidentiality-only impact). Cloud publishers (S3, GCS, Azure Blob Storage) are explicitly not affected, and no public exploit code has been identified at time of analysis; the issue is fixed in @backstage/plugin-techdocs-node 1.15.4.
RemediationAI
Vendor-released patch: upgrade @backstage/plugin-techdocs-node to 1.15.4 or later (the fix ships in the Backstage v1.54.6 release tag, commit 6aecb26f337ffec1d4e67ce903cf1e39b6082ec4), which adds recursive symlink validation during publish and rejects any link resolving outside the documentation output root. If upgrading immediately is not possible, the most effective compensating control is to stop using the local publisher and switch techdocs.publisher.type to a cloud backend (S3, GCS, or Azure Blob Storage), which are unaffected by this flaw - the trade-off is that this requires cloud storage credentials, network egress, and a migration of existing published artifacts, and it changes where TechDocs content is stored and cached. Alternatively, sanitize documentation sources before publishing by rejecting or dereferencing symlinks (for example, validating with 'find <dir> -type l' in CI or building with tools that do not emit symlinks), accepting that this relies on operator discipline and does not protect against links introduced after the check. Restricting network access to the TechDocs documentation endpoint to trusted authenticated users reduces exposure but does not eliminate the flaw and degrades normal documentation availability for other users; note the issue requires authenticated access (PR:L) in the first place, so anonymous exposure is not the primary risk vector. See the advisory (https://github.com/backstage/backstage/security/advisories/GHSA-cm77-ch27-6w6v) for the definitive fixed-version guidance.
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
Backstage's TechDocs plugin builds static documentation sites with MkDocs and then 'publishes' the generated output through a configurable PublisherBase implementation. The local publisher (LocalPublish in plugins/techdocs-node/src/stages/publish/local.ts) copies the generated tree onto the Backstage host filesystem and serves it back through an Express static handler. Because publishing and serving operated on raw filesystem entries, a symbolic link inside the published directory (CWE-22 improper limitation of a pathname to a restricted directory) would be followed at serve time, allowing reads of arbitrary host files reachable by the process account. The upstream fix introduces a recursive validateNoExternalSymlinks() walk that inspects every directory entry during publish, rejects any symlink whose resolved location fails the isChildPath(root, fullPath) check by throwing a Backstage NotAllowedError, and recurses into subdirectories; regression tests added to local.test.ts confirm external symlinks at the top level and in nested subdirectories are rejected while internal symlinks still resolve. The advisory maps to CWE-22 and the affected CPE set is limited to deployments of @backstage/plugin-techdocs-node prior to 1.15.4 that opt into the non-default local publisher; S3/GCS/Azure Blob publishers perform no local filesystem traversal and are unaffected.
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
Network-reachable serving endpoint (AV:N) but requires a pre-planted external symlink not produced by normal builds (AC:H) and an authenticated user (PR:L); arbitrary host file read gives C:H, no I/A impact.
Primary rating from Vendor (github).
CVSS VectorNVD
Lifecycle Timeline
3DescriptionNVD
Backstage is an open framework for building developer portals. Prior to 1.15.4, the @backstage/plugin-techdocs-node package is affected by potential file exposure through local techdocs publisher. When using the local TechDocs publisher (techdocs.publisher.type: 'local'), it was possible for the documentation serving endpoint to follow filesystem references outside the intended documentation tree, potentially exposing host files to authenticated users. This is mitigated by the fact that exploration requires preconditions that do not arise through normal MkDocs operation. Cloud-based publishers (S3, GCS, Azure Blob Storage) are not affected. This issue is fixed in version 1.15.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.
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.
Path traversal in the Backstage Scaffolder Bitbucket pull-request publish actions allows an authenticated user who can e
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-94073
GHSA-cm77-ch27-6w6v
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB