CVE-2026-106490
Executive Summary
CVE-2026-106490 is an improper input validation vulnerability in the @backstage/plugin-techdocs-backend package of Backstage, an open framework for building developer portals. When the Azure Blob Storage provider is used in combination with entity-level permissions, an authenticated Backstage user may be able to read restricted TechDocs static content that they are not authorized to access. The issue is fixed in version 2.2.4; deployments that intentionally disable the default backend authentication policy may have broader exposure.
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 its TechDocs plugin renders documentation sourced from version-controlled repositories and stores the generated static content in a configurable storage backend. In the affected versions, the @backstage/plugin-techdocs-backend package handles requests for TechDocs static content and, when the Azure Blob Storage provider is configured, fails to properly validate input used to resolve the requested content.
This weakness maps to CWE-22 (Improper Limitation of a Pathname to a Restricted Directory, i.e., path traversal), meaning the flaw class allows an attacker to influence the resource path used to retrieve stored documentation objects. Because entity-level permissions are a Backstage feature intended to restrict which users can view which entities' documentation, a validation gap in how static content requests are resolved can cause those permission boundaries to be bypassed. The result is unauthorized read access to TechDocs content that the requesting user should not be permitted to view.
The CVSS v3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N) reflects a network-reachable issue that is low in complexity, requires low privileges (an authenticated user), needs no user interaction, and impacts only confidentiality at a high level. There is no integrity or availability impact, and the scope remains unchanged.
The CNA description also notes that deployments which intentionally disable the default backend authentication policy may have broader exposure. This means that in such configurations, the population of potential attackers may extend beyond authenticated users, widening the attack surface considerably.
No public proof-of-concept, Nuclei template, or exploit code has been identified for this CVE as of this report. Publication and exploitation status remain limited to the advisory. Specific implementation details — such as the exact parameter names, internal function names, or precise normalization routines involved — are not provided in the available NVD description, and this report does not fabricate them.
Exploitation Scenarios
No public PoC is available; the attack chain below is inferred strictly from the vulnerability class (CWE-22, improper input validation on a path used to fetch TechDocs static content) and the affected component context.
Reconnaissance / target identification: The attacker identifies a Backstage deployment that exposes the TechDocs plugin and is configured with the Azure Blob Storage provider. Such portals are typically internal developer platforms, making them reachable to employees, contractors, or any account provisioned in the identity provider backing the deployment. The attacker confirms that entity-level permissions are in use — meaning some TechDocs content is intended to be restricted to specific users or groups.
Triggering the flaw: As an authenticated user, the attacker issues requests to the TechDocs static content endpoints of the portal. Because the backend fails to properly validate the input used to resolve the static content path, the attacker can manipulate the requested content reference so that it resolves outside the intended, permission-scoped set of documentation objects. This is the path traversal / improper input validation class in action: the attacker supplies crafted input rather than a legitimate, authorized content reference.
Payload / execution method: At the vulnerability-class level, the attacker crafts the static content request so that the resolution logic targets TechDocs content belonging to a different entity — one the attacker's entity-level permissions do not grant access to. No code execution is involved; the "payload" is the malformed content reference itself, and success is measured by the backend returning restricted documentation content.
Post-exploitation impact: The attacker gains read access to restricted TechDocs content. Depending on what organizations store in TechDocs — architecture diagrams, internal service documentation, credential-adjacent runbooks, or security-sensitive operational details — the exposed material can materially aid further reconnaissance and lateral movement planning. In deployments where the default backend authentication policy has been intentionally disabled, unauthenticated parties may reach the same code path, broadening exposure. There is no confidentiality impact beyond read access, and no integrity or availability effect.
Impact Assessment
The vulnerability's CVSS base score of 6.5 (Medium) is driven primarily by the high confidentiality impact (C:H) combined with the low-privilege requirement (PR:L) and network reachability (AV:N). Because no user interaction is required (UI:N) and attack complexity is low (AC:L), a compromised or low-privileged legitimate account is sufficient to attempt exploitation, provided the deployment meets the prerequisite configuration (Azure Blob Storage provider plus entity-level permissions).
The blast radius is organization-specific. The affected asset is the Backstage developer portal and the TechDocs content it serves; the sensitivity of that content determines the true business impact. In many enterprises, developer portals aggregate documentation across dozens or hundreds of teams, so a permission-bypass read primitive can expose a broad cross-section of internal technical knowledge from a single foothold. Where the default backend authentication policy has been intentionally disabled, the exposure widens to parties who would not otherwise be authenticated, further increasing risk. There is no integrity or availability dimension to this issue — the flaw is purely an unauthorized-read primitive.
Detection Guidance
Sigma Rule
title: Backstage TechDocs Static Content Path Traversal Attempt (CVE-2026-106490)
id: 6c1f9a2e-3d4b-4f7a-9e21-0a8b5c7d1f33
status: experimental
description: Detects suspicious requests to Backstage TechDocs static content endpoints containing traversal sequences, indicative of exploitation attempts against CVE-2026-106490.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-106490
author: Valters IT Threat Intelligence
date: 2026-01-01
logsource:
category: web
product: backstage
detection:
selection_path:
cs-uri-stem|contains:
- '/techdocs/static/'
selection_traversal:
cs-uri-query|contains:
- '../'
- '..%2f'
- '%2e%2e%2f'
- '..%5c'
condition: selection_path and selection_traversal
fields:
- c-ip
- cs-uri-stem
- cs-uri-query
- sc-status
falsepositives:
- Legitimate tooling that references relative paths in documentation URLs
level: medium
tags:
- attack.t1213
- cve.2026.106490
YARA Rule
rule CVE_2026_106490_Backstage_TechDocs_Traversal
{
meta:
description = "Detects path traversal sequences in Backstage TechDocs static content requests (CVE-2026-106490)"
author = "Valters IT Threat Intelligence"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-106490"
date = "2026-01-01"
severity = "medium"
strings:
$tdoc = "/techdocs/static/" ascii nocase
$trav1 = "../" ascii
$trav2 = "..%2f" ascii nocase
$trav3 = "..%5c" ascii nocase
$trav4 = "%2e%2e%2f" ascii nocase
condition:
$tdoc and any of ($trav*)
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-106490 Backstage TechDocs Static Content Path Traversal Attempt"; flow:established,to_server; http.uri; content:"/techdocs/static/"; http.uri; content:"../"; distance:0; sid:2026106490; rev:1; metadata:affected_product Backstage, cve CVE-2026-106490, attack_target Web_Server, deployment Perimeter, signature_severity Major, created_at 2026_01_01; classtype:attempted-recon;)
Elastic Detection
sequence by source.ip with maxspan=5s
[any where http.request.method == "GET" and wildcard(http.request.path, "/techdocs/static/*")]
[any where http.request.method == "GET" and
(wildcard(http.request.path, "*../*") or wildcard(http.request.path, "*..%2f*") or wildcard(http.request.path, "*%2e%2e%2f*"))]
Splunk SPL Query
index=web sourcetype=access_combined
| where match(uri_path, "(?i)/techdocs/static/")
| where match(uri_path, "(?i)(\.\./|\.\.%2f|%2e%2e%2f|\.\.%5c)")
| stats count min(_time) as first_seen max(_time) as last_seen values(status) as status_codes by src_ip, uri_path, user_agent
| where count > 0
| sort - count
Wazuh OSSEC Rule
<group name="web,backstage,cve-2026-106490,">
<rule id="202610649" level="10">
<decoded_as>web-accesslog</decoded_as>
<url>\/techdocs\/static\/.*(\.\.\/|\.\.%2f|%2e%2e%2f|\.\.%5c)</url>
<description>CVE-2026-106490: Possible Backstage TechDocs static content path traversal attempt</description>
<mitre>
<id>T1213</id>
</mitre>
<group>cve_2026_106490,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source). The CNA description states the issue is fixed in version 2.2.4, but no patch artifact has been confirmed from any tracked source. Treat any available update with verification.
Immediate mitigations:
- Upgrade
@backstage/plugin-techdocs-backendto version 2.2.4 or later as stated in the advisory. - If upgrade is not immediately possible, review whether the Azure Blob Storage provider for TechDocs is in use; if it is not required, avoid or disable that provider to remove the affected code path.
- Do not intentionally disable the default backend authentication policy. Where this has been disabled, restore it so that only authenticated users can reach TechDocs static content endpoints.
- Enforce entity-level permissions consistently and audit which documentation is reachable by lower-privileged accounts.
- Restrict network access to the Backstage portal to trusted networks or identity-provider–gated access where feasible.
- Upgrade
Patch / upgrade steps:
- Update the
@backstage/plugin-techdocs-backenddependency to 2.2.4 or later in the Backstage application's package manifest. - Rebuild and redeploy the Backstage backend.
- Verify the deployed version and confirm the fix is present before considering the deployment remediated.
- Update the
Long-term hardening:
- Apply input validation and strict path normalization on all backend endpoints that resolve storage object paths, particularly those backed by cloud blob storage.
- Maintain entity-level permission enforcement as a non-optional control, and test it against traversal-style requests.
- Monitor upstream Backstage releases and advisories for follow-up fixes.
- Limit which documentation content is published into the portal so that a permission bypass yields limited sensitive data.
References
- NVD — CVE-2026-106490: https://nvd.nist.gov/vuln/detail/CVE-2026-106490
- Backstage project documentation and release notes (TechDocs backend package)
- CWE-22: Improper Limitation of a Pathname to a Restricted Directory: https://cwe.mitre.org/data/definitions/22.html
- FIRST EPSS: not yet scored for this CVE at the time of writing
- CISA Known Exploited Vulnerabilities catalog: this CVE is NOT listed as of this report
No public proof-of-concept, exploit code, or threat actor campaign has been identified for CVE-2026-106490 at the time of writing.
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.