Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain write access to configured S3/Azure catalog source
-
DeliveryCreate or rename object with encoded dot-segment path
-
ExploitBackstage URL reader resolves traversal path
-
ExecutionCatalog descriptor read outside intended boundary
-
ImpactDisclosure of data reachable with backend credentials
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 (1) a Backstage deployment version prior to 1.54.6 that is configured to use a cloud storage catalog provider - specifically an Azure Blob Storage source (via @backstage/plugin-catalog-backend-module-azure) or an AWS S3 source (via @backstage/plugin-catalog-backend-module-aws / backend-defaults cloud URL readers); and (2) the attacker being a principal already authorized to create or rename objects (object keys / blob names) within that configured storage source. The attacker must craft an object name containing dot-path segments, including URL-encoded forms such as %2e%2e, %2E%2E, or backslash-delimited variants, to escape the intended prefix. Exploitation is LIMITED by: the need for pre-existing write access to the trusted catalog storage (not a default-open remote condition), the requirement that the target data be reachable only with the backend's own configured credentials (no privilege escalation beyond the backend's existing storage access), and confidentiality-only impact (read of catalog descriptors, no write or availability effect). It does NOT apply to Backstage instances that do not use Azure Blob or AWS S3 catalog sources. |
| Impact | This is a genuinely low-priority issue despite being a path traversal (CWE-22) weakness. The provided CVSS:3.1 vector (AV:N/AC:H/PR:H/UI:N/S:C/C:L/I:N/A:N = 3.0, Low) tells a consistent story: although the attack vector is network-based, exploitation requires HIGH privileges (PR:H) and HIGH attack complexity (AC:H), and the impact is confidentiality-only and limited (C:L, I:N, A:N). The prerequisite - being a principal already able to create or rename objects in a configured Azure Blob Storage or AWS S3 catalog source - means the attacker must already hold write access to a trusted catalog backend, which heavily constrains the population of potential abusers to insiders or already-compromised writers. The scope change (S:C) is the only aggravating signal, reflecting that the backend can be coerced into reading descriptors from storage locations outside the intended boundary, but even that is bounded to locations reachable with the backend's own configured credentials. No EPSS score, KEV listing, POC, or SSVC decision data was supplied in the input; absence of these is not itself a risk indicator, but there is nothing here suggesting mass or automatable exploitation. The CVSS network/local signals are not contradictory - the storage is accessed over the network, but the real gating factor is the required write privilege, so defenders should treat this as an authenticated/insider confidentiality concern rather than a remote-exploitable critical flaw. |
| Exploit ScenarioDerived | An actor who already has permission to create or rename objects in an organization's AWS S3 bucket or Azure Blob container used as a Backstage catalog source uploads or renames an object so its key/blob name contains encoded dot-segments (e.g. %2e%2e). When Backstage's catalog backend resolves that path, it is tricked into reading a catalog descriptor from outside the intended storage prefix, exposing content reachable with the backend's configured storage credentials. No public exploit identified at time of analysis, so any attempt would require an actor to craft the traversal payload themselves. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Backstage deployments prior to 1.54.6 that use Azure Blob Storage or AWS S3 catalog sources can be induced to read catalog descriptors from outside the configured storage boundary - an object-storage path traversal in the cloud storage catalog providers and cloud URL readers. Exploitation requires an authenticated principal with high privileges (CVSS PR:H) who already has permission to create or rename objects in the trusted catalog bucket or container, and who then crafts object names containing dot-path segments (including encoded forms such as %2e%2e or backslash-delimited variants) to escape the intended prefix; the read is limited to locations reachable with the backend's own configured storage credentials, and impact is confidentiality-only (CVSS 3.0, AV:N/AC:H/PR:H/S:C/C:L/I:N/A:N). No public exploit code has been identified at time of analysis and the issue is not listed in CISA KEV; a vendor-released patch is available in 1.54.6.
RemediationAI
Upgrade to Backstage 1.54.6 or later, which contains the vendor-released patch (commit 47ddbd8b4a3efd812309f759c38f4877fbd9e5ff) and updates the catalog backend modules and backend-defaults cloud URL readers; see the advisory at https://github.com/backstage/backstage/security/advisories/GHSA-xvh9-35w9-42m4 and the release notes at https://github.com/backstage/backstage/releases/tag/v1.54.6. If immediate upgrade is not possible, the most effective compensating control is to restrict write access to the configured catalog bucket or container: grant create/rename (object put and copy) rights to as few principals as possible and keep the catalog storage read-only for everyone else, since exploitation requires a principal that can introduce crafted object names - the trade-off is reduced flexibility for teams that currently publish catalog-info.yaml files directly to that storage. Additionally, scope the backend's storage credentials to the narrowest prefix or container that the catalog actually needs, which caps the reachable traversal surface at the cost of possibly splitting the catalog across multiple configured sources, and audit existing object keys for dot-path segments or percent-encoded sequences. These are mitigations only; the path traversal logic itself is fixed solely by upgrading to 1.54.6.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 6 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 weakness is a classic path traversal (CWE-22) arising from a validate-before-decode mismatch in Backstage's cloud storage reader stack, tracked against the CPEs for backstage:backstage and the @backstage/plugin-catalog-backend-module-azure and @backstage/plugin-catalog-backend-module-aws packages, with the fix landing additionally in @backstage/backend-defaults. The affected code (AwsS3UrlReader.ts and AzureBlobStorageUrlReader.ts) previously checked the raw, still-encoded URL path for dot segments via hasDotPathSegments, then derived the object key or blob name from the pathname; because percent-encoded dot segments (%2e%2e, %2E%2E, mixed forms like .%2e or %2e., and backslash-delimited variants such as %2e%2e%5c) were not decoded before validation, they passed the check and were subsequently decoded and resolved by the storage SDK, allowing traversal above the configured prefix. The upstream commit introduces isUrlPathWithoutDotSegments in util.ts, which parses the authority-relative pathname and rejects any URL whose path contains dot segments, and changes the readers to decode each path segment exactly once (split('/').map(decodeURIComponent)) after validation, closing the single- and double-encoding bypasses. The CVSS scope change (S:C) reflects that the reader acts under the backend's own storage identity and can therefore reach objects outside the catalog's intended prefix but within the credentials' permission set; confidentiality impact is low because only catalog descriptor content is exposed, with no integrity or availability effect.
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
AV:N/AC:L/PR:H/UI:N/S:C/C:L/I:N/A:N
Requires existing write access to the cloud catalog source so PR:H, with crafted encoded-traversal keys giving AC:H; scope changes to storage (S:C) with limited read-only disclosure (C:L, I:N, A:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorNVD
Lifecycle Timeline
4DescriptionNVD
Backstage is an open framework for building developer portals. Prior to 1.54.6, cloud storage catalog providers did not sufficiently validate object paths. A principal able to create or rename objects in a configured Azure Blob Storage or AWS S3 catalog source could cause catalog descriptors to be read from outside the intended storage boundary, limited to locations reachable with the backend's configured credentials. This issue is fixed in 1.54.6.
Blast Radius
ecosystem impact- 111 npm packages depend on @backstage/backend-defaults (104 direct, 8 indirect)
Ecosystem-wide dependent count for version 0.17.8.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
The Bitbucket pull-request Scaffolder actions in Backstage can be abused by an authenticated user with template-executio
Backstage is an open platform for building developer portals. Rated critical severity (CVSS 9.9), this vulnerability is
Authenticated Backstage users can retrieve the internal execution data of other users' Scaffolder tasks - notably the Se
Authenticated users who can register or modify a TechDocs documentation source can achieve code execution inside the Bac
Authenticated remote code execution in the @backstage/plugin-techdocs-node package shipped with the Backstage developer
Arbitrary code execution in Backstage TechDocs documentation builds allows an authenticated user with write access to a
Arbitrary Python code execution in Backstage's @backstage/plugin-techdocs-node (versions < 1.13.11 and = 1.14.0) lets a
Improper task-state validation in the @backstage/plugin-scaffolder-backend plugin (Backstage versions prior to 3.3.1, 3.
Arbitrary code execution on the TechDocs backend host is achievable through a sanitizer bypass in the @backstage/plugin-
Improper input validation in the @backstage/plugin-scaffolder-backend-module-sentry scaffolder actions (Backstage 0.3.0
@backstage/plugin-scaffolder-backend is the backend for the default Backstage software templates. Rated high severity (C
Authenticated users of Backstage Scaffolder can bypass administrator-configured action restrictions in @backstage/plugin
EUVD-2026-94013
GHSA-xvh9-35w9-42m4
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB