Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate and register documentation source
-
DeliveryPlant out-of-bounds symlink with MkDocs snippet include
-
ExploitTechDocs path resolution follows link outside boundary
-
ExecutionBuild embeds host file into published docs
-
ImpactRead exfiltrated file contents
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Symlink resolution safety
|
| Exploitation Conditions | Requires an authenticated principal with permission to register TechDocs documentation sources (PR:L), and an attacker-controlled source tree containing (1) a symbolic link resolving outside the intended source/documentation directory and (2) an MkDocs snippets include (pymdownx.snippets, '--8<--') referencing that link so the out-of-bounds file is pulled into the build. Exploitation is bounded to files readable by the TechDocs build process and is only meaningful 'depending on deployment' - i.e. instances that build docs from untrusted, user-registerable sources. Limiting factors: no anonymous access (authentication required), high attack complexity (crafted symlink plus snippet chain), reliance on the MkDocs snippets extension, and confidentiality limited to the build process's file permissions; versions 1.15.4 and later reject source trees whose symlinks resolve outside the input directory. |
| Impact | This is a genuine but moderate, pre-conditioned issue rather than a top-tier emergency. The CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N = 5.3) is internally consistent and the signals align: it is network-reachable but requires an authenticated user (PR:L) who already holds the ability to register documentation sources, carries high attack complexity (AC:H) because the attacker must stage both a symlink that resolves outside the source tree AND an MkDocs snippets include that pulls it in, and the impact is confined to confidentiality (C:H, I:N, A:N) - arbitrary read of files the TechDocs build process can access. No EPSS score, no CISA KEV listing, and no public proof-of-concept were provided, so there is no public exploit identified at time of analysis and no evidence of active or widespread exploitation. The 'Information Disclosure' tag matches the confidentiality-only profile. One nuance to verify: the advisory states impact occurs 'depending on deployment,' meaning exploitability hinges on whether the instance actually builds documentation from attacker-registerable sources and whether the MkDocs snippets extension is in use - these deployment conditions, combined with PR:L and AC:H, meaningfully limit practical risk below what the raw score alone might suggest. |
| Exploit ScenarioDerived | An authenticated user permitted to register a TechDocs documentation source commits a crafted source tree containing a symlink (e.g. 'leak_link' -> /etc/passwd) at the input-directory root plus an MkDocs snippets include (--8<-- "leak_link") in a markdown file. When TechDocs generates the docs, unsafe path resolution follows the symlink outside the intended documentation boundary and embeds the external file's contents into the published documentation, disclosing it to the attacker. No public exploit was identified at time of analysis; exploitation is network-reachable but high-complexity and depends on the MkDocs snippets mechanism. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Arbitrary file read in the Backstage TechDocs node plugin (@backstage/plugin-techdocs-node) prior to 1.15.4 allows an authenticated user who can register documentation sources to escape the intended documentation boundary. Because TechDocs only validated symlinks inside the docs_dir, an attacker-controlled source tree containing a symlink that resolves outside the tree (e.g. to /etc/passwd) plus an MkDocs snippets include directive ('--8<--') could pull that out-of-bounds file into the generated documentation, exposing anything readable by the build process. Exploitation requires authenticated access (PR:L), a crafted symlink/snippet chain (AC:H), and a deployment that builds docs from user-registerable sources; impact is confidentiality-only (C:H/I:N/A:N, CVSS 5.3), and no public exploit was identified at time of analysis.
RemediationAI
Upgrade @backstage/plugin-techdocs-node to 1.15.4 or later (Backstage release v1.54.6, https://github.com/backstage/backstage/releases/tag/v1.54.6); the vendor-released patch is version 1.15.4, which extends symlink validation to the entire input directory and rejects any link resolving outside it (commit 911ca36f10e654c5517da029129230fc05a4f580, advisory GHSA-vmqh-7cj9-mvcj). If upgrading is not immediately possible, apply compensating controls with their trade-offs: (1) restrict the TechDocs source-registration permission so only trusted maintainers can supply source trees - effective but removes self-service docs for regular developers; (2) run the TechDocs build in a locked-down container or as a low-privilege user with no access to sensitive host paths such as /etc/passwd, cloud credentials, or secrets mounts, which caps the blast radius but requires infrastructure changes; (3) remove or disable the pymdownx.snippets extension in mkdocs.yml so '--8<--' includes cannot pull in out-of-bounds files - low cost but breaks legitimate documentation reuse features; and (4) scan or pre-clean incoming source trees for symlinks before build, which is operationally brittle compared to the vendor fix. Note that the vulnerability is not remotely exploitable anonymously: it requires an authenticated principal with the ability to register documentation sources, and the audit trail for such registrations should be reviewed for any attempt to reference links outside the source tree.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in 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 CWE-59 (Improper Link Resolution Before File Access), a symlink-following path traversal in the TechDocs generation stage implemented in plugins/techdocs-node/src/stages/generate/helpers.ts. The original helper validateDocsDirectory() recursively walked only the docs directory and asserted that each entry stayed within the input root via isChildPath(). However, MkDocs with the pymdownx.snippets extension can include files referenced from anywhere in the repository, not only under docs_dir, so symlinks placed at the input-directory root were never examined. The upstream fix renames the check to validateInputDirectory() and enumerates the whole input directory with fs.readdir(inputDir, { recursive: true, withFileTypes: true }), rejecting any entry where !isChildPath(inputDir, entryPath); because isChildPath resolves both paths through realpath, relative, chained, dangling, and cyclic links are all covered. A regression test explicitly creates a symlink to /etc/passwd at the input root and a docs/index.md containing '--8<-- "leak_link"', asserting the build is rejected. The affected package is the Node.js TechDocs generator component of the Backstage developer portal; the underlying technology is MkDocs static-site generation running over a repository tree supplied as a documentation source.
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 source registration (PR:L) over the network (AV:N), high complexity (AC:H) from the staged symlink plus MkDocs snippet chain; confidentiality-only arbitrary file read, so C:H with I:N/A:N.
Primary rating from NVD.
CVSS VectorNVD
Lifecycle Timeline
2DescriptionNVD
Backstage is an open framework for building developer portals. Prior to 1.15.4, the @backstage/plugin-techdocs-node package is affected by techdocs arbitrary file read via mkdocs snippets. Unsafe path resolution in TechDocs source tree handling allows an authenticated user who can register documentation sources to include content from outside the intended documentation boundary. Depending on deployment, this may expose files readable by the build process. 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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
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-94072
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB