Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain write access to trusted storage bucket
-
DeliveryUpload object with traversal name (../ or %2e%2e)
-
ExploitBackstage URL reader ingests object tree
-
ExecutionCrafted name collides with protected output path
-
ImpactInject attacker-controlled 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 | Exploitation requires that Backstage be configured to use a cloud storage URL reader (AWS S3, AWS CodeCommit, or Azure Blob Storage) to ingest content such as TechDocs, AND that the attacker possess write access to that specific bucket/repository to create objects with malicious names. The description further limits impact to 'certain deployment configurations' where a traversal-crafted object name collides with a protected file in the output directory - so deployments without writable-bucket exposure, or not using these cloud readers, are not affected. The required bucket write privilege (reflected as PR:H) and the non-trivial collision condition (reflected as AC:H) are the key limiting factors; there is no user-interaction requirement. |
| Impact | This is a genuine but low-priority issue whose signals are internally consistent rather than conflicting. The CVSS 3.1 vector (AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:H/A:N, base 4.4 Medium) tells the real story: although the attack is network-reachable, it carries HIGH attack complexity and requires HIGH privileges - specifically pre-existing write access to a cloud storage bucket (S3, AWS CodeCommit, or Azure Blob) that Backstage already trusts and reads from. Impact is limited to integrity (I:H) via content injection, with no confidentiality or availability loss. No EPSS score, CISA KEV listing, or public POC was provided in the intelligence set, so there is no evidence of active exploitation or widespread weaponization; this is consistent with the AC:H/PR:H profile, which makes opportunistic mass exploitation unlikely. The practical risk is bounded to scenarios where an adversary (insider, compromised CI credential, or third party with bucket write access) already holds a foothold in the storage backend - making this a hardening/defense-in-depth fix rather than an urgent remediation for most deployments. Note: the fix-version signals disagree between sources - the description cites @backstage/backend-defaults 0.17.8 while a referenced GitHub release tag reads v1.54.6; verify the correct artifact before patching. |
| Exploit ScenarioDerived | An attacker who already holds write access to a cloud storage bucket that Backstage's URL reader ingests (e.g., a TechDocs S3 bucket) uploads an object whose name embeds path-traversal segments such as 'uploads/../legitimate.yaml' or encoded variants like '%2e%2e'. When Backstage reads the bucket tree, the crafted object name collides with or overwrites a protected file in the output directory, injecting attacker-controlled content. No public exploit code was identified at time of analysis, though the fix commit's regression tests effectively document the malicious inputs. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Content injection in Backstage's cloud storage URL readers (the @backstage/backend-defaults package before 0.17.8) allows an attacker who holds write access to a configured AWS S3 bucket, AWS CodeCommit repository, or Azure Blob Storage container to craft object names containing path traversal segments so that an ingested object can collide with a protected file in the reader's output directory, overwriting or injecting content in certain deployment configurations. The issue is a CWE-22 improper-limitation-of-pathname flaw with an integrity-only impact, scored CVSS 4.4 (AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:H/A:N), meaning exploitation demands high privileges (bucket write access) and a non-trivial collision condition, while confidentiality and availability are unaffected. No public exploit code and no confirmed active exploitation were identified at time of analysis, and a vendor patch is available in @backstage/backend-defaults 0.17.8 (Backstage v1.54.6).
RemediationAI
Upgrade to @backstage/backend-defaults version 0.17.8, which corresponds to the Backstage v1.54.6 release and contains the input-validation fix (vendor-released patch: 0.17.8), as referenced in advisory GHSA-7649-wm97-w3j3 and upstream commit 14e925ce5b905dd8daa64c3009722febda76034c. Because the vulnerable code now rejects object names containing literal, backslash, or percent-encoded dot-dot segments, any deployment that relied on such names for legitimate content will see those entries skipped after upgrading - verify TechDocs and other ingested content still resolves after the change. Where immediate upgrading is not possible, the most effective compensating control is to revoke write access to any bucket, repository, or container consumed by a Backstage URL reader from untrusted principals, since the flaw requires attacker-controlled object names to be written into that store; this is a configuration-hygiene control rather than a code fix and does nothing if a trusted-but-compromised principal retains write access. Additional hardening with clear trade-offs: point each reader at a dedicated, minimally-shared bucket and use a narrow prefix so the set of objects the reader can materialize is small (reduces blast radius but requires re-organizing content layout and re-issuing credentials); run the Backstage backend with a restricted filesystem user and a confined, disposable output directory so a traversal collision cannot overwrite sensitive files outside it (may break workflows that expect persistent output paths); and monitor or alert on object keys containing '..', backslashes, or '%2e' sequences in the consumed storage (adds observability but does not block the write itself). Note that the impact assessment is integrity-only (C:N/A:N), so these controls should be prioritized accordingly relative to higher-severity findings.
Affected VersionsENISA
Affected Packages
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
Backstage's backend-defaults package supplies 'URL readers' that fetch and materialize remote content - most visibly TechDocs - from sources such as AWS S3 (AwsS3UrlReader), AWS CodeCommit (AwsCodeCommitUrlReader), and Azure Blob Storage (AzureBlobStorageUrlReader). Each reader lists objects under a configured prefix and writes the retrieved files into a local output/target directory, using the object key or repository-relative path to reconstruct the destination path. Because the object name was trusted verbatim, a key such as 'prefix/uploads/../legitimate.yaml', a backslash variant 'uploads\..', or percent-encoded forms ('%2e%2e', '.%2e', '%2E%2E') could resolve outside the intended subtree and overwrite a protected file already present in the output directory - the classic CWE-22 path traversal class applied to cloud object names rather than HTTP parameters. The upstream fix introduces a hasDotPathSegments() helper in the reader 'util' module and calls it while iterating the listed files/objects in AwsCodeCommitUrlReader.ts and AwsS3UrlReader.ts (and correspondingly across the other cloud readers), skipping any entry whose path contains dot or dot-dot segments in literal, backslash, or URL-encoded form; unit tests added alongside the change assert that maliciously named entries are filtered out while legitimate files still materialize.
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:U/C:N/I:H/A:N
Attacker needs pre-existing write access to a trusted cloud bucket (PR:H) and a specific collision-prone deployment config (AC:H); impact is content injection, so I:H with no C or A.
Primary rating from Vendor (GitHub_M).
CVSS VectorNVD
Lifecycle Timeline
2DescriptionNVD
Backstage is an open framework for building developer portals. Prior to 0.17.8, the @backstage/backend-defaults package is affected by improper input validation in cloud storage url readers. An attacker with write access to a cloud storage bucket used by Backstage could craft object names that could collide with protected files in the output directory. In certain deployment configurations, this could lead to content injection. This issue is fixed in version 0.17.8.
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.
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.
Path traversal in the Backstage Scaffolder Bitbucket pull-request publish actions allows an authenticated user who can e
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-94015
GHSA-7649-wm97-w3j3
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB