Skip to main content

Backstage TechDocs CVE-2026-106507

| EUVDEUVD-2026-94072 MEDIUM
Improper Link Resolution Before File Access (CWE-59)
2026-10-06 security-advisories@github.com
6.5
CVSS 3.1 · NVD
View

Attack ChainAIDerived

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

  1. Access
    Authenticate and register documentation source
  2. Delivery
    Plant out-of-bounds symlink with MkDocs snippet include
  3. Exploit
    TechDocs path resolution follows link outside boundary
  4. Execution
    Build embeds host file into published docs
  5. Impact
    Read 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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

AnalysisAIv1 – 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

backstage < 1.54.6
plugin-techdocs-node < 1.15.4

Affected Packages

euvd backstage fix: 1.54.6
euvd plugin_techdocs_node fix: 1.15.4

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

NVD PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 5.3 MEDIUM

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.

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

Primary rating from NVD.

CVSS VectorNVD

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

Lifecycle Timeline

2
CVSS changed
Oct 09, 2026 - 17:52 NVD
5.3 (MEDIUM) 6.5 (MEDIUM)
Patch available
Oct 06, 2026 - 23:05 EUVD

DescriptionNVD

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

EPSS Score
0.3%
Top 81% exploitable
Prevalence
Medium
popular CNCF developer-portal framework with notable enterprise adoption, not universal
Data Quality
7 sources
Confidence: High

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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

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