Backstage TechDocs
CVE-2026-25153
HIGH
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
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.
Primary rating from NVD.
CVSS VectorNVD
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Lifecycle Timeline
10Blast Radius
ecosystem impact- 2 npm packages depend on @backstage/plugin-techdocs-node (2 direct, 0 indirect)
Ecosystem-wide dependent count for version 1.14.0.
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.
AnalysisAI
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.
Technical ContextAI
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.
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.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
Cross-user flow execution in Langflow (< 1.9.1) lets any authenticated API-key holder run another user's flow by passing
Same weakness CWE-94 – Code Injection
View allSame technique Code Injection
View allVendor StatusVendor
Share
External POC / Exploit Code
Leaving vuln.today
GHSA-6jr7-99pf-8vgf