Skip to main content

Backstage TechDocs CVE-2026-25153

HIGH
Code Injection (CWE-94)
2026-01-30 security-advisories@github.com GHSA-6jr7-99pf-8vgf
8.8
CVSS 3.1 · NVD
View

Attack ChainAIDerived

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

  1. Access
    Obtain repo contributor or PR access
  2. Delivery
    Add malicious hooks: entry to mkdocs.yml
  3. Exploit
    TechDocs local build loads MkDocs hook
  4. Execution
    Arbitrary Python executes on build server
  5. Impact
    Full compromise of build environment

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

Requires TechDocs to be configured with runIn: local (local generation mode rather than the more isolated runIn: docker), and an installed MkDocs version >= 1.4.0 that supports the hooks configuration key. The attacker must be able to submit or modify the mkdocs.yml file in a repository that TechDocs processes - i.e., write access or an accepted pull request/fork contribution (matching CVSS PR:L). No end-user interaction is needed; execution triggers automatically on the next documentation build. Limiting factors: it does not work against runIn: docker deployments without escaping the container, it is neutralized by MkDocs < 1.4.0, and it is fully blocked once the package is patched (the allowlist strips hooks). Building via @techdocs/cli in CI/CD does NOT limit exploitation - the CLI uses the same vulnerable package.

Impact

Signals are mixed but coherent. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H = 8.8) describes a network-reachable, low-complexity attack requiring only low privileges (a repository contributor) and no user interaction, yielding full confidentiality/integrity/availability impact on the build server - consistent with the description. The EPSS score is very low (0.02%, 6th percentile) and the CVE is NOT in CISA KEV, with no public exploit identified, indicating no observed mass exploitation. This is best read as a real but conditional risk: it is gated on the non-default-sensitive runIn: local configuration and on the attacker having write/PR access to a processed repository, so it favors insider or supply-chain-style abuse over opportunistic internet-wide scanning. The low EPSS does not contradict the high CVSS - it reflects narrow preconditions and absence of weaponized exploit code, not low impact. No SSVC decision data was provided in the input.

Exploit ScenarioDerived

An attacker with contributor or fork-PR access to a repository that Backstage TechDocs builds adds a hooks entry to mkdocs.yml pointing at a Python module containing a reverse shell or credential-stealing code. When TechDocs (configured with runIn: local) or a @techdocs/cli CI job builds the documentation, MkDocs loads and executes the hook, running the attacker's Python on the build server. No public exploit code is identified at time of analysis, but the technique is straightforward given MkDocs' documented hooks behavior.

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

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

Alert me

AnalysisAIv5 – Jun 30, 2026

Arbitrary Python code execution in Backstage's @backstage/plugin-techdocs-node (versions < 1.13.11 and = 1.14.0) lets a contributor who can add or edit a repository's mkdocs.yml inject a malicious MkDocs hooks directive that runs on the TechDocs build server whenever TechDocs is configured with runIn: local. The flaw also affects documentation built in CI/CD via @techdocs/cli, which bundles the same package. EPSS is very low (0.02%, 6th percentile) and there is no public exploit identified at time of analysis, but the CVSS of 8.8 reflects full host compromise of the build environment.

Earlier versions of this analysis (4)
v4 Jun 30, 2026 - 05:53 cvss changed CVSS 8.8

Arbitrary Python code execution affects @backstage/plugin-techdocs-node before 1.13.11 and 1.14.1 when TechDocs runs with runIn: local, allowing any contributor who can submit or alter a repository's mkdocs.yml to run code on the TechDocs build server via the MkDocs hooks directive. The CVSS 3.1 score is 8.8 (high), reflecting network reach, low privileges, and full confidentiality/integrity/availability impact on the build host; there is no public exploit identified at time of analysis and EPSS is very low (0.02%, 6th percentile), so this is a credible but not yet widely-exploited build-pipeline risk. The fix introduces an allowlist that strips unsupported keys such as hooks from mkdocs.yml before generation.

v3 Jun 30, 2026 - 05:52 cvss changed CVSS 8.8

Arbitrary Python code execution in @backstage/plugin-techdocs-node (versions before 1.13.11 and the 1.14.x line before 1.14.1) lets an attacker who can edit a repository's mkdocs.yml run code on the TechDocs build server when TechDocs runs with runIn: local. By abusing the MkDocs hooks configuration key, a contributor with commit or pull-request access can have attacker-supplied Python executed during the documentation build. Publicly available exploit code exists via the GHSA advisory's technical detail, but there is no public exploit identified as weaponized; EPSS is very low at 0.02% (6th percentile) and it is not listed in CISA KEV.

v2 Jun 30, 2026 - 05:51 cvss changed CVSS 8.8

Remote code execution in @backstage/plugin-techdocs-node (versions before 1.13.11 and 1.14.1) allows an attacker who can submit or modify a repository's mkdocs.yml to run arbitrary Python on the TechDocs build server when TechDocs is configured with runIn: local, by abusing the MkDocs hooks configuration directive. The flaw (CWE-94 code injection) carries a CVSS 8.8 and also affects @techdocs/cli, since it bundles the same vulnerable package. There is no public exploit identified at time of analysis and EPSS is very low (0.02%), but the attack is technically simple for anyone with repository contribution rights.

v1 Mar 12, 2026 - 22:00 CVSS 7.7

Backstage is an open framework for building developer portals, and @backstage/plugin-techdocs-node provides common node.js functionalities for TechDocs. [CVSS 7.7 HIGH]

RemediationAI

Vendor-released patch: upgrade @backstage/plugin-techdocs-node to 1.13.11 or 1.14.1 (or later); the fix adds an allowlist of supported MkDocs configuration keys and strips unsupported keys including hooks from mkdocs.yml before generation, logging a warning for removed keys. Red Hat users should apply RHSA-2026:6174 and RHSA-2026:6802. Users of @techdocs/cli must also upgrade to the latest version since it bundles the vulnerable package - building docs in CI/CD does not avoid the issue. If immediate upgrade is impossible, switch TechDocs to runIn: docker for container isolation (note: this contains but does not fully eliminate the risk, as malicious code still runs inside the container); restrict who can modify mkdocs.yml to trusted contributors only (trade-off: added contribution friction); enforce mandatory PR review on mkdocs.yml changes to catch malicious hooks entries before merge (trade-off: relies on reviewer vigilance); or pin MkDocs to < 1.4.0 such as 1.3.1 which has no hooks support (trade-off: loses newer MkDocs features). Advisory: https://github.com/backstage/backstage/security/advisories/GHSA-6jr7-99pf-8vgf.

Affected Packages

npm @backstage/plugin-techdocs-node fix: 1.13.11, 1.14.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The affected component is the Node.js TechDocs generator (npm @backstage/plugin-techdocs-node), which drives the Python-based MkDocs static-site generator to build developer documentation. MkDocs 1.4.0+ supports a hooks configuration key (https://www.mkdocs.org/user-guide/configuration/#hooks) that loads and executes arbitrary Python modules at build time by design. The root cause is CWE-94 (Code Injection): the plugin passed the repository-supplied mkdocs.yml to the generator without filtering keys, so an attacker-controlled hooks entry was honored and its Python executed in the build process. The CPE data (cpe:2.3:a:linuxfoundation:backstage) confirms the Linux Foundation Backstage project as the affected product family.

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

NVD PRIMARY 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

A repo contributor (PR:L) submits a malicious mkdocs.yml processed remotely with no interaction (AV:N/UI:N); the hook runs Python on the build host giving full C:H/I:H/A:H, scope unchanged.

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

CVSS VectorNVD

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

Lifecycle Timeline

7
Analysis Updated
Jun 30, 2026 - 05:55 vuln.today
v5 - CVSS changed
Analysis Updated
Jun 30, 2026 - 05:53 vuln.today
v4 - CVSS changed
Analysis Updated
Jun 30, 2026 - 05:52 vuln.today
v3 - CVSS changed
Analysis Updated
Jun 30, 2026 - 05:51 vuln.today
v2 - CVSS changed
CVSS changed
Jun 30, 2026 - 03:23 NVD
7.7 (HIGH) 8.8 (HIGH)
Patch released
Mar 31, 2026 - 21:13 nvd
Patch available
CVE Published
Jan 30, 2026 - 22:15 nvd
HIGH 7.7

DescriptionNVD

Backstage is an open framework for building developer portals, and @backstage/plugin-techdocs-node provides common node.js functionalities for TechDocs. In versions of @backstage/plugin-techdocs-node prior to 1.13.11 and 1.14.1, when TechDocs is configured with runIn: local, a malicious actor who can submit or modify a repository's mkdocs.yml file can execute arbitrary Python code on the TechDocs build server via MkDocs hooks configuration. @backstage/plugin-techdocs-node versions 1.13.11 and 1.14.1 contain a fix. The fix introduces an allowlist of supported MkDocs configuration keys. Unsupported configuration keys (including hooks) are now removed from mkdocs.yml before running the generator, with a warning logged to indicate which keys were removed. Users of @techdocs/cli should also upgrade to the latest version, which includes the fixed @backstage/plugin-techdocs-node dependency. Some workarounds are available. Configure TechDocs with runIn: docker instead of runIn: local to provide container isolation, though it does not fully mitigate the risk. Limit who can modify mkdocs.yml files in repositories that TechDocs processes; only allow trusted contributors. Implement PR review requirements for changes to mkdocs.yml files to detect malicious hooks configurations before they are merged. Use MkDocs < 1.4.0 (e.g., 1.3.1) which does not support hooks. Note: This may limit access to newer MkDocs features. Building documentation in CI/CD pipelines using @techdocs/cli does not mitigate this vulnerability, as the CLI uses the same vulnerable @backstage/plugin-techdocs-node package.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 2 npm packages depend on @backstage/plugin-techdocs-node (2 direct, 0 indirect)

Ecosystem-wide dependent count for version 1.14.0.

Executive ViewAI

Why It Matters

Backstage TechDocs deployments are vulnerable to code execution through documentation configuration files edited by repository contributors, potentially compromising CI/CD build infrastructure. The technical severity rating (CVSS 8.8) significantly overstates real-world risk-exploitability remains very low (EPSS 0.02%, no public exploit identified at time of analysis), making this a controlled-priority patch rather than an emergency response. Organizations should coordinate an upgrade across development teams while tightening access controls on repository configuration files.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.0%
Top 94% exploitable
Prevalence
Medium
widely adopted developer-portal framework, but vulnerable runIn:local config is a subset
Data Quality
6 sources
Confidence: High
NVD CVE.org EPSS 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.0%
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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

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.

Affected Products (CPE)NVD

cpe:2.3:a:linuxfoundation:backstage:*:*:*:*:*:*:*:*
cpe:2.3:a:linuxfoundation:backstage:*:*:*:*:*:*:*:*
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-106509 HIGH
8.8 Oct 06

Arbitrary code execution in Backstage TechDocs documentation builds allows an authenticated user with write access to 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