Skip to main content

Backstage TechDocs EUVDEUVD-2026-94008

| CVE-2026-106489 MEDIUM
Path Traversal (CWE-22)
2026-10-06 GitHub_M GHSA-rg9r-hr7g-5gc2
6.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticate with access to one TechDocs site
  2. Exploit
    Craft static-docs URL with encoded %2e%2e segments
  3. Execution
    Bypass per-entity permission check
  4. Impact
    Read documentation of another entity

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK

2 techniques across 2 tactics: Discovery, Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires ALL of the following to hold simultaneously: (1) the deployment uses the external TechDocs builder with an external storage provider such as AWS S3 or Google Cloud Storage; (2) the Backstage permission framework is enabled (permission.enabled: true); and (3) the attacker is an authenticated user who already has authorized access to at least one TechDocs documentation site. Given those, the attacker sends a crafted request to the /static/docs/... endpoint using percent-encoded dot-dot (%2e%2e) segments to traverse outside their permitted entity directory. LIMITING FACTORS: authentication is required (PR:L); the permission framework must be explicitly enabled - instances without it are unaffected because TechDocs content is intentionally visible to all authenticated users; and the non-default external-builder + external-storage configuration must be in use. These preconditions substantially narrow the exposed population below what the network attack vector alone would suggest.

Impact

Signals converge on a moderate, conditional risk rather than an urgent one. The CVSS 3.1 base score of 6.5 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N) describes a network-reachable, low-complexity information-disclosure flaw that nonetheless requires an authenticated account (PR:L) and yields confidentiality-only impact (I:N/A:N). No EPSS score was provided in the input, so probabilistic exploitation likelihood cannot be quantified. The CVE is NOT listed in CISA KEV and no packaged public exploit is referenced, so exploitation status is 'no public exploit identified at time of analysis' - however, the fixing commit (bf6bbf7) ships a regression test embedding the exact working payload '/static/docs/default/component/entity-a/%2e%2e/entity-b/index.html', which effectively discloses the technique to any reader of the patch. The decisive risk-limiting factor is configuration scope: the flaw only manifests when the external TechDocs builder is used with an external storage provider (S3/GCS/etc.) AND the permission framework is enabled; deployments without the permission framework are unaffected by design. No SSVC decision record was supplied. Net: this is a legitimately real but narrowly-scoped authorization-bypass affecting a subset of Backstage installations, not a high-CVSS-but-illusory issue, yet also not a mass-exploitation priority given the authentication requirement, confidentiality-only impact, and restrictive configuration preconditions.

Exploit ScenarioDerived

An authenticated engineer who is authorized to view the TechDocs site for one catalog entity crafts a request containing encoded '..' path segments (e.g. %2e%2e) to traverse out of their permitted entity path and retrieve documentation belonging to a different entity whose docs the permission framework was meant to hide from them. Because exploitation is network-based, low-complexity (AV:N/AC:L) and needs only a valid low-privilege session plus the specific external-storage + permission-framework configuration, it is trivial once those preconditions hold. No packaged public exploit is referenced, but the vendor's fixing commit includes a test case that reproduces the exact traversal payload.

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

Authenticated users of Backstage TechDocs can bypass entity-scoped authorization and read documentation belonging to other entities by requesting a crafted /static/docs/... URL containing percent-encoded parent-directory (%2e%2e) segments. The issue is confined to deployments that combine the external TechDocs builder with an external storage provider (S3, GCS, etc.) and have the Backstage permission framework enabled; setups without the permission framework are unaffected because TechDocs content is intentionally readable by all authenticated users, and the default local builder/storage path is not exposed. Exploitation requires an authenticated account that already has access to at least one TechDocs site (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N, 6.5), exposure is therefore limited to confidentiality of docs across entity boundaries, and no public exploit code or confirmed active exploitation was identified at time of analysis.

RemediationAI

Vendor-released patch: upgrade @backstage/plugin-techdocs-backend to version 2.2.4 (Backstage release referenced as v1.54.6), as documented in advisory GHSA-rg9r-hr7g-5gc2 and implemented by commit bf6bbf7326ada7d96d7b2c4ebc4a71546106f311, which adds an isPathWithinEntity() normalization guard in plugins/techdocs-backend/src/service/router.ts. Where an immediate upgrade is not possible, the most effective compensating control is to switch from the external TechDocs builder/external storage configuration to the default local builder and storage, which removes the vulnerable static-serving path entirely, at the cost of losing object-store-backed scaling and multi-writer publishing. Alternatively, front the /static/docs/ endpoints with a reverse proxy or WAF rule that rejects request paths containing raw or percent-encoded dot-dot sequences (%2e%2e, %2e., ..), being aware that overly aggressive normalization rules can break legitimate documentation links that rely on encoded characters. Because exploitation requires an authenticated account with access to at least one TechDocs site, tightening TechDocs permissions (least-privilege entity grants) and auditing which entities each account can reach limits blast radius but does not close the traversal itself. Note that disabling the permission framework is not a remediation: although such deployments are reported unaffected by this bypass, TechDocs content is visible to all authenticated users by design, so it would widen rather than narrow exposure. Administrators should also review external storage access logs for /static/docs/ requests containing encoded traversal sequences to assess whether cross-entity reads occurred.

Affected VersionsENISA

plugin-techdocs-backend < 2.2.4
backstage < 1.54.6

Affected Packages

npm @backstage/plugin-techdocs-backend fix: 2.2.4
euvd backstage fix: 1.54.6
euvd plugin_techdocs_backend fix: 2.2.4

Source: OSV (Open Source Vulnerabilities)

Affects your stack

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

The flaw is a path traversal (CWE-22) in the Express router of @backstage/plugin-techdocs-backend. The backend resolves the target entity from the leading URL segments, performs its TechDocs permission check against that entity, and then hands the remaining relative path to the storage provider's docsRouter for retrieval. Because the traversal segments were not normalized before the storage lookup, a request such as /static/docs/default/component/entity-a/%2e%2e/entity-b/index.html could resolve outside entity-a's directory in the external object store while still passing the authorization check performed for entity-a. The fix introduces an isPathWithinEntity() guard in plugins/techdocs-backend/src/service/router.ts that decodes the request path, strips leading slashes, runs path.posix.normalize(), and rejects anything equal to '..' or beginning with '../' with a NotFoundError before the docsRouter is invoked. The accompanying test asserts that a contained path (/static/docs/default/component/entity-a/dir/%2e%2e/index.html) still returns 200 while a traversing path (/static/docs/default/component/entity-a/%2e%2e/entity-b/index.html) returns 404 without calling the docs router. The underlying technology chain - the permission framework, the entity-derived storage key layout, and object-store path semantics in S3/GCS - is what makes the normalization step security-relevant rather than cosmetic.

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_M) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 6.5 MEDIUM

Authenticated user crafts a URL over the network with low complexity (PR:L/AC:L/AV:N); impact is cross-entity documentation disclosure only, so C:H with I:N/A:N and unchanged scope.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

1
Patch available
Oct 06, 2026 - 22:20 EUVD

DescriptionCVE.org

Backstage is an open framework for building developer portals. Prior to 2.2.4, the @backstage/plugin-techdocs-backend package is affected by improper authorization enforcement for techdocs static content. An authenticated user with access to one TechDocs documentation site could craft a URL able to read documentation belonging to a different entity. This only affects deployments using the external TechDocs builder with an external storage provider (S3, GCS, etc.) and the permission framework enabled. Instances that do not use the permission framework are unaffected, since TechDocs content is visible to all authenticated users by design. This issue is fixed in version 2.2.4.

Threat Intelligence Overview

EPSS Score
0.3%
Top 81% exploitable
Prevalence
Medium
popular CNCF developer portal, common in engineering orgs, not ubiquitous
Threat Intel
1
1 source
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub

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

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

CVE-2026-106486 CRITICAL
9.9 Oct 06

The Bitbucket pull-request Scaffolder actions in Backstage can be abused by an authenticated user with template-executio

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

Vendor StatusVendor

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