CVE-2026-106494
Executive Summary
CVE-2026-106494 is an improper input validation vulnerability (classified under CWE-22) affecting the @backstage/backend-defaults package in versions prior to 0.17.8. The flaw resides in cloud storage URL readers, where an attacker possessing write access to a cloud storage bucket consumed by Backstage can craft object names that collide with protected files in the output directory. In specific deployment configurations, successful exploitation enables content injection. The vulnerability carries a CVSS v3.1 base score of 4.4 (Medium severity) and no public proof-of-concept, exploit code, or Nuclei template is currently available.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Backstage is an open framework for building developer portals, and the @backstage/backend-defaults package supplies default backend service implementations, including URL readers that fetch content from external systems. The affected component is the cloud storage URL reader family. These readers retrieve objects from cloud storage buckets (for example, S3-compatible object stores) and materialize or process them within a configured output directory.
The vulnerability is a path traversal / object-name collision issue mapped to CWE-22 (Improper Limitation of a Pathname to a Restricted Directory, commonly known as Path Traversal). Per the NVD description, the underlying weakness is "improper input validation in cloud storage url readers." The specific mechanism is that object names taken from a cloud storage bucket are not sufficiently validated or normalized before being used in a context where they can resolve to, or collide with, protected file locations in the output directory.
The critical precondition: an attacker must already possess write access to a cloud storage bucket that the Backstage deployment reads from. This explains the CVSS vector's elevated privilege requirement (PR:H) and high attack complexity (AC:H), along with the network attack vector (AV:N) and no user interaction (UI:N). The confidentiality impact is None (C:N), while integrity impact is High (I:H) because the primary outcome is unauthorized modification/injection of content rather than disclosure. Availability is unaffected (A:N).
Because the description is deliberately sparse regarding exact internal implementation, the following points are NOT asserted and should not be treated as confirmed:
- The exact function names, classes, or modules involved in the URL reader logic.
- The precise string-matching or normalization algorithm used to detect collisions.
- The specific cloud storage provider(s) affected, beyond "cloud storage url readers" generically.
What can be stated with confidence from the description: the root cause is insufficient validation of attacker-controllable object names, the exploit primitive is a name collision with protected output-directory files, and the resulting impact class is content injection in "certain deployment configurations." The "certain deployment configurations" qualifier indicates the flaw is not universally exploitable and depends on how the reader is wired into the portal's build/output pipeline.
The fix is delivered in version 0.17.8, consistent with an input-validation hardening change. No advisory detail is available describing the exact patch delta.
Exploitation Scenarios
No public PoC is available; the attack chain below is inferred strictly from the NVD description and the CWE-22 vulnerability class.
Reconnaissance / target identification. The attacker identifies a Backstage deployment that uses the
@backstage/backend-defaultscloud storage URL readers and determines which cloud storage bucket(s) the deployment consumes. Because exploitation requires bucket write access (PR:H), the attacker prioritizes environments where they already hold, or can obtain, write permissions on that bucket — for example, shared or multi-tenant storage buckets, compromised CI/CD credentials, or over-permissive IAM policies.Triggering the flaw class (improper input validation / path traversal). With write access to the bucket, the attacker uploads objects whose names are crafted to collide with files that normally reside in the protected output directory. The vulnerable reader fails to adequately validate/normalize these attacker-supplied object names, so the crafted names are not rejected or sandboxed before being resolved against the output directory.
Payload/execution (vulnerability-class level). The attack does not execute code; it abuses improper input validation to cause an attacker-controlled object name to map onto a protected file path. Upon the reader processing the bucket contents (in deployment configurations where this collision is reachable), the attacker-influenced object is positioned to overwrite or shadow the protected output file, resulting in content injection. No specific function calls, endpoints, or parameter names are claimed here because the advisory does not disclose them.
Post-exploitation impact. The injected content becomes part of the portal's output. Depending on what the collided protected file represents, this could mean tampered generated artifacts or served content within the developer portal. CVSS reflects High integrity impact and no confidentiality/availability impact, so the attacker's gain is the ability to alter trusted content rather than to steal data or disrupt service. Because the advisory limits impact to "certain deployment configurations," real-world exploitation depends on whether a given deployment's reader-to-output pipeline is susceptible to the collision.
Impact Assessment
The CVSS v3.1 base score is 4.4 (Medium), with vector CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:H/A:N. Subscore interpretation:
- AV:N (Network): the bucket/reader interaction is network-reachable.
- AC:H (High): exploitation depends on a favorable, non-trivial configuration and a crafted collision.
- PR:H (High): the attacker must already hold privileged write access to the relevant cloud storage bucket.
- UI:N: no victim interaction required.
- S:U (Unchanged): impact is confined to the vulnerable component's security scope.
- C:N / I:H / A:N: no confidentiality impact, high integrity impact (content injection), no availability impact.
Business impact: The primary risk is integrity of content served or generated by affected developer portals built on Backstage. Because Backstage portals frequently aggregate organizational tooling, documentation, and service metadata, injected content could mislead developers or downstream automation that trusts portal output. Blast radius: limited to organizations running vulnerable @backstage/backend-defaults (< 0.17.8) and using cloud storage URL readers where an attacker can write to the consumed bucket and where the output-directory collision path is reachable. CISA KEV status is NO; no known in-the-wild exploitation is reported; EPSS is not yet scored by FIRST.org.
Detection Guidance
Sigma Rule
title: Suspicious Object Name Collision in Backstage Cloud Storage URL Reader Output
id: 7b2c9f10-4a3e-4d61-9c2a-106494aaaa
status: experimental
description: Detects file creation/overwrite events in a Backstage output directory with object names resembling protected filenames, indicative of CVE-2026-106494 content-injection attempts.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-106494
logsource:
category: file_event
product: linux
detection:
selection_path:
TargetFilename|contains:
- '/backstage/'
- 'output/'
selection_suspicious:
TargetFilename|endswith:
- '.tmp'
# object-name collisions with protected output files
filter_expected:
Image|contains:
- '/usr/bin/node'
condition: selection_path and selection_suspicious
fields:
- TargetFilename
- Image
- User
falsepositives:
- Legitimate Backstage build/write operations writing temporary artifacts
level: medium
tags:
- attack.t1190
- cve.2026-106494
YARA Rule
rule CVE_2026_106494_Backstage_ObjectNameCollision
{
meta:
description = "Detects object-name patterns consistent with cloud storage collision attempts against Backstage URL readers (CVE-2026-106494)"
author = "valtersit.com"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-106494"
date = "2026-01-01"
severity = "medium"
strings:
// Traversal / normalization-abuse markers in object names
$t1 = "../" ascii nocase
$t2 = "..\\" ascii nocase
$t3 = "%2e%2e" ascii nocase
// Backstage package context appearing alongside traversal tokens
$p1 = "backend-defaults" ascii nocase
$p2 = "backstage" ascii nocase
condition:
any of ($t*) and any of ($p*)
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-106494 Backstage cloud storage URL reader path traversal attempt"; flow:established,to_server; http.uri; content:".."; content:"%2e%2e"; nocase; pcre:"/(\.\.\/|%2e%2e)/i"; reference:cve,2026-106494; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-106494; classtype:attempted-user; sid:2026106494; rev:1;)
Elastic Detection
file where process.name == "node" and
file.path : ("*backstage*" or "*output*") and
file.name : ("*.tmp" or "*..*")
Splunk SPL Query
index=endpoint OR index=backstage
(sourcetype=fs_notifications OR sourcetype=file_events)
| search (file_path="*backstage*" OR file_path="*output*")
| eval sus = if(match(file_path, "\.\.|%2e%2e"), 1, 0)
| where sus=1
| stats count min(_time) as first_seen max(_time) as last_seen by host, user, file_path, process_name
| convert ctime(first_seen) ctime(last_seen)
| sort - count
Wazuh OSSEC Rule
<group name="backstage,cve-2026-106494,">
<rule id="106494" level="10">
<decoded_as>json</decoded_as>
<field name="file_path">\.\.|%2e%2e</field>
<field name="file_path">output|backstage</field>
<description>CVE-2026-106494: Possible Backstage cloud storage URL reader object-name collision / content injection attempt</description>
<mitre>
<id>T1190</id>
</mitre>
<group>attack,file_event,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source). The NVD description states the issue is fixed in @backstage/backend-defaults version 0.17.8, but no patch source, commit, or advisory delta has been confirmed by tracked sources; treat remediation as upgrade-driven and verify against the vendor's official release notes before relying on it.
1) Immediate mitigations
- Restrict write access to any cloud storage bucket consumed by Backstage URL readers. Since exploitation requires bucket write access (PR:H), tightening IAM/ACL policies to least privilege significantly reduces exposure.
- Audit bucket contents and object names for entries containing path-traversal sequences (e.g.,
../, encoded variants) or names resembling protected output-directory filenames. - Monitor and log object creation/modification in consumed buckets; alert on unexpected writers.
- Review deployment configuration to determine whether the output-directory collision path is reachable ("certain deployment configurations") and reduce exposure where feasible (e.g., isolate output directories).
2) Patch / upgrade steps
- Upgrade
@backstage/backend-defaultsto version 0.17.8 or later as referenced in the advisory. - Rebuild and redeploy the Backstage backend, then confirm the installed version (e.g., via
yarn why @backstage/backend-defaultsor lockfile inspection). - Re-validate cloud storage reader configurations after upgrade.
3) Long-term hardening
- Enforce strict normalization and allow-listing of object names at ingestion boundaries; reject traversal sequences and collision-prone names.
- Adopt immutable or write-once bucket policies and separate read/write credentials per service.
- Integrate dependency scanning for Backstage packages and track advisories for the
@backstage/*ecosystem. - Apply least-privilege IAM and continuous storage access auditing to detect unauthorized writes.
References
- NVD — CVE-2026-106494: https://nvd.nist.gov/vuln/detail/CVE-2026-106494
- Backstage (open framework for developer portals) project and backend documentation: https://backstage.io/
- CWE-22 — Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal'): https://cwe.mitre.org/data/definitions/22.html
- MITRE ATT&CK T1190 — Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/
- CISA Known Exploited Vulnerabilities Catalog (this CVE is NOT listed as of reporting): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
No known threat actor campaigns or exploit-in-the-wild evidence are associated with CVE-2026-106494 at this time. No public PoC, exploit code, or Nuclei template exists per available data.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.