Skip to main content

Backstage Catalog Backend EUVDEUVD-2026-110054

| CVE-2026-115923 MEDIUM
Path Traversal (CWE-22)
2026-10-26 GitHub_M GHSA-w658-mh9p-ww8f
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 catalog.location.create permission
  2. Delivery
    Craft URL with percent-encoded dot segments
  3. Exploit
    Register location matching trusted catalog.rules pattern
  4. Execution
    URL reader canonicalizes and fetches untrusted path
  5. Impact
    Untrusted entity ingested as trusted content

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

Exploitable only in deployments that use catalog.rules with URL-type ('url') location patterns to restrict which catalog kinds may be ingested from which URL prefixes; deployments not relying on URL location patterns are not exposed to the bypass. The attacker must be an authenticated user holding the catalog.location.create permission (per PR:L), so this is not remote-unauthenticated. The technique depends on the mismatch between DefaultCatalogRulesEnforcer matching the raw location.target string and URL readers canonicalizing the same URL (normalizing percent-encoded dot segments, encoded separators/backslashes, default ports) before fetching. No complete workaround exists for deployments that depend on URL location patterns to restrict catalog kinds; the vendor states that restricting location-registration permissions reduces exposure and that upgrading is the fix. Downstream consequences beyond the ingestion-policy boundary (e.g., actions by processors or scaffolder using integration credentials) depend on deployment configuration and were not substantiated by the advisory.

Impact

Signals are moderate and internally consistent rather than alarming. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N, base 6.5) describes a network-reachable, low-complexity flaw that requires an authenticated principal holding the catalog.location.create permission (PR:L), with impact limited to integrity (C:N/A:N). This aligns with the GHSA advisory: the only confirmed crossed boundary is the operator-configured catalog ingestion policy, and the advisory explicitly states it found no basis for impact claims beyond that boundary. No EPSS score is provided in the input, so exploitation probability cannot be quantified. KEV status is not indicated, so there is no confirmed active exploitation. No POC/exploit availability is asserted in the input (the references are the vendor advisory, patch commits, and release tags, not exploit code), so there is no public exploit identified at time of analysis - though the advisory does document a concrete example attack URL. The vuln.today decision label is 'this_month', consistent with a real-but-not-emergency issue: it is a genuine authorization-bypass worth patching on a normal cadence, not a high-CVSS-but-illusory problem, but it is gated behind an authenticated, specifically-permissioned user and a deployment that actually relies on catalog.rules URL patterns to restrict kinds. Teams not using URL-pattern-based catalog rules are effectively unaffected.

Exploit ScenarioDerived

In a Backstage deployment that restricts catalog kinds to trusted URL prefixes via catalog.rules, an authenticated user holding catalog.location.create registers a URL location such as https://ghe.example.com/trusted/%2e%2e/attacker/repo/blob/main/catalog-info.yaml. The raw string matches the https://ghe.example.com/trusted/** pattern during rule evaluation, but the URL reader canonicalizes the percent-encoded dot segments and fetches content from the attacker-controlled path, admitting untrusted entity content as trusted. No public exploit code is identified, though the advisory documents the exact crafted-URL technique.

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 26, 2026

Catalog ingestion policy bypass in @backstage/plugin-catalog-backend lets an authenticated user holding the catalog.location.create permission register a URL whose raw string matches a trusted catalog.rules prefix (for example https://ghe.example.com/trusted/**) while the URL reader canonicalizes it to a location outside that prefix, so entity content from an untrusted source is ingested as if it came from a trusted one. Versions before 3.9.2 and 4.0.0 through 4.0.1 are affected, fixed in 3.9.2 (Backstage 1.54.10) and 4.0.2 (Backstage 1.56.1). Impact is scoped to the operator-configured ingestion policy boundary, downstream effects depend on deployment configuration, and no public exploit identified at time of analysis.

RemediationAI

Upgrade @backstage/plugin-catalog-backend to 3.9.2 (Backstage release 1.54.10) on the 3.x line or to 4.0.2 (Backstage release 1.56.1) on the 4.x line; do not rely on 4.0.1, which the vendor states is not fixed. After upgrading, review catalog.rules URL location patterns, because matching now happens against the canonical URL form and any pattern that relied on percent-encoded characters being matched as written, or on default ports being kept, will no longer match and must be updated. The vendor states there is no complete workaround for deployments that depend on URL location patterns to restrict catalog kinds, and that restricting who holds the catalog.location.create permission reduces exposure - a measure that limits the attacker population but does not restore the policy boundary, so upgrading remains the only complete fix. Advisory and release notes are at https://github.com/backstage/backstage/security/advisories/GHSA-w658-mh9p-ww8f, https://github.com/backstage/backstage/releases/tag/v1.54.10 and https://github.com/backstage/backstage/releases/tag/v1.56.1.

Affected VersionsENISA

backstage 4.0.0, < 4.0.2
backstage < 3.9.2

Affected Packages

npm @backstage/plugin-catalog-backend fix: 3.9.2, 4.0.2
euvd backstage fix: 3.9.2, 4.0.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

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

DefaultCatalogRulesEnforcer in the Backstage catalog backend evaluates URL-type location targets by glob-matching the raw location.target string against the operator's catalog.rules location patterns, whereas the URL readers used for ingestion parse and canonicalize the same target - normalizing percent-encoded dot segments, encoded path separators, encoded backslashes, default ports and similar forms - before fetching content. That discrepancy is a classic CWE-22 path traversal confusion: a target such as https://<host>/trusted/%2e%2e/attacker/repo/blob/main/catalog-info.yaml satisfies the trusted prefix pattern as a literal string but resolves to https://<host>/attacker/repo/... when read. The upstream fix matches locations in canonical form so rule decisions agree with fetch-time resolution; the commit tests cover multi-encoded dot segments (%252e%252e), encoded separators (%2f), encoded backslashes (%5C), and userinfo-based prefix spoofing. Because matching now happens on the canonical URL, existing patterns that depended on percent-encoded characters being matched literally or on default ports being preserved must be rewritten.

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:N/I:H/A:N
vuln.today AI 6.5 MEDIUM

Authenticated user with catalog.location.create is required (PR:L), the crafted URL is network-submitted with no user interaction (AV:N/UI:N), and impact is integrity-only - untrusted content admitted as trusted (I:H, C:N/A:N).

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

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
None
Integrity
High
Availability
None

Lifecycle Timeline

1
Patch available
Oct 26, 2026 - 19:18 EUVD

DescriptionCVE.org

Backstage is an open framework for building developer portals. Prior to 3.9.2 and from 4.0.0 until 4.0.2, DefaultCatalogRulesEnforcer in @backstage/plugin-catalog-backend compares the raw location.target URL against catalog.rules, while URL readers canonicalize the same URL before fetching it. An authenticated user with catalog.location.create permission can use percent-encoded path segments to make an untrusted URL match a trusted location pattern even though the canonical URL resolves outside that scope. This admits entity content from an untrusted source as trusted, while further downstream consequences depend on deployment configuration. This issue is fixed in versions 3.9.2 and 4.0.2.

Threat Intelligence Overview

EPSS Score
0.3%
Top 75% exploitable
Prevalence
Medium
popular open-source developer portal, common in tech enterprises, not everywhere
Threat Intel
1
1 source
Social Media
2
Sightings
Data Quality
3 sources
Confidence: Low

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· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

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

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