Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to Backstage with Scaffolder template access
-
DeliveryInvoke restricted scaffolder action
-
ExploitSupply restricted input with altered case or numeric type
-
ExecutionBypass HAS_STRING_PROPERTY permission check
-
PersistAction runs with integration credentials
-
ImpactUnauthorized access to source-control repositories
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Case sensitivity handling
|
| Exploitation Conditions | Exploitation requires an authenticated Backstage user who already has access to the affected Scaffolder templates AND an administrator-configured Scaffolder permission policy that restricts actions by input value using rules such as HAS_STRING_PROPERTY/HAS_ACTION_ID (e.g., 'custom:gitlab:group:access', 'github:group:access', 'bitbucketCloud:group:access', or 'publish:github:pull-request'). The bypass works by supplying the restricted input value with different letter casing or as a different JSON type (string vs number). Limiting factors: the attacker must be authenticated and authorized to reach the templates; the impact is bounded by the privileges of the backend integration credentials attached to the scaffolder actions; and deployments that do not use input-value-based permission restrictions have no restriction to bypass. Running an affected version prior to 3.3.1 / 3.4.1 / 4.0.3 / 4.1.0 is required. |
| Impact | This is a credible, moderately high-priority issue for organizations running Backstage with Scaffolder permission policies, but it is not a mass-exploitation threat. The CVSS 8.1 vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N) indicates a network-reachable, low-complexity flaw requiring low privileges - consistent with the description, which states an *authenticated* user who already has access to affected Scaffolder templates can bypass configured action restrictions. The PR:L in the vector aligns with the 'authenticated user' language, so this is an authorization bypass, not an unauthenticated takeover. The root cause is confirmed by the source code evidence as a CWE-178 case-sensitivity / type-coercion matching flaw: the HAS_STRING_PROPERTY permission rule matched 'example/team' but not 'ExAmPlE/TeAm' or numeric equivalents, letting a user evade input-value restrictions by altering case or type. No EPSS score, KEV listing, or public POC was provided in the input; exploitation requires insider-level access to templates and depends on how impactful the integration credentials (e.g., GitHub/GitLab/Bitbucket tokens) wired into the actions are, so real-world risk is organization-specific and tilts toward privilege escalation by trusted-but-restricted internal users rather than widespread external attack. A:N correctly reflects no availability impact; the danger is unauthorized read/write to source-control resources. |
| Exploit ScenarioDerived | An authenticated Backstage user who is restricted by a Scaffolder permission policy (e.g., allowed to run a group-access or publish action only against 'example/team') crafts a template execution that supplies the restricted value with altered casing ('ExAmPlE/TeAm') or as a different type (numeric 42 vs string '42'), causing the permission rule to fail to match and allowing the otherwise-denied action to run. Because the action executes with the backend's configured integration credentials, this can grant unauthorized access to repositories and source-control resources the user should not reach. No public exploit code was identified in the provided data, though the fix commit and its tests publicly demonstrate the exact bypass patterns. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Authenticated users of Backstage Scaffolder can bypass administrator-configured action restrictions in @backstage/plugin-scaffolder-backend by supplying a restricted input value with different letter casing or as a different JSON type (for example a number instead of a string), causing permission checks to fail to match and letting the action execute with the backend integration's credentials. This can grant unauthorized access to repositories and related source-control resources, bounded by the privileges of the integration tokens attached to the affected actions. The issue affects versions before 3.3.1, 3.4.1, 4.0.3, and 4.1.0, and only matters in deployments that actually use input-value-based permission rules; no public exploit code has been identified at time of analysis.
RemediationAI
Upgrade @backstage/plugin-scaffolder-backend to one of the fixed versions for your release line: 3.3.1, 3.4.1, 4.0.3, or 4.1.0; the patched Backstage monorepo releases are v1.49.6, v1.50.5, and v1.54.6, and the fix commits are 11c1384c0649b8ab26391c6a4e4f34b80ab0d188, a91ed72d540e80b62a73b39bb1563ff5018d52d1, and e307e4f487103d815e484291b3fda778ab9983bf, with details in GHSA-hmp2-4m7g-22cv. If patching must be delayed, reduce exposure by restricting which users and groups can access templates that invoke the sensitive actions (gitlab:group:access, github:group:access, bitbucketCloud:group:access, publish:github:pull-request), accepting the trade-off of reduced self-service for developers; by downgrading the privileges of the SCM integration credentials bound to those actions to least-privilege, scoped tokens, which limits the blast radius of a bypass but may break legitimate automated repository operations; and by auditing permission policies for any condition that relies on exact string or numeric equality of action input, since these are the rules the bypass defeats, whereas deployments that do not use input-value-based restrictions are unaffected and need only apply the upgrade for defense in depth.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 5 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 Scaffolder backend executes template steps through its Nunjucks workflow runner, which consults the Backstage permission framework before invoking a registered template action. When an administrator writes a conditional permission policy on the scaffolder-action resource type (RESOURCE_TYPE_SCAFFOLDER_ACTION) using rules such as HAS_ACTION_ID combined with HAS_STRING_PROPERTY or HAS_NUMBER_PROPERTY, the runner is expected to reject any action whose input does not satisfy the policy. The root cause maps to CWE-178 (Improper Handling of Case Sensitivity): the value-comparison logic did not normalize case, and it also conflated string and numeric representations of the same value, so inputs like 'ExAmPlE/TeAm', 42, or '42' slipped past conditions that pinned the value to 'example/team' or the number 42. The upstream fix, delivered in the @backstage/plugin-scaffolder-backend package and reflected in commits 11c1384c, a91ed72d, and e307e4f4, tightens matching of action input values in scaffolder permission policies and adds regression tests covering path-style keys, bracket/quoted variants such as [path] and ["path"], and action IDs including gitlab:group:access, github:group:access, bitbucketCloud:group:access, and publish:github:pull-request.
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:L/UI:N/S:U/C:H/I:H/A:N
Network-reachable scaffolder API with low complexity; PR:L because an authenticated user with template access is required; C:H/I:H for unauthorized repo read/write, A:N as no availability impact.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
Backstage is an open framework for building developer portals. Prior to 3.3.1, 3.4.1, 4.0.3 and 4.1.0, the @backstage/plugin-scaffolder-backend package is affected by scaffolder action input authorization bypass. An authenticated user with access to affected Scaffolder templates could bypass configured action restrictions. Depending on integration credentials, this could grant unauthorized access to repositories and related source-control resources. This issue is fixed in versions 3.3.1, 3.4.1, 4.0.3 and 4.1.0.
Technical POC Analysis
Bug class: CWE-178 (Improper Handling of Case Sensitivity), with CWE-284 (Improper Access Control) as the impact class.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Backstage Scaffolder deployments that use input-value-based action restrictions are affected by CVE-2026-106503, a high-severity permission-bypass issue in @backstage/plugin-scaffolder-backend. A user with Scaffolder access could craft restricted inputs with altered casing or non-string JSON types to execute actions using backend integration credentials, potentially exposing repositories and source-control resources up to the integration token’s privileges. No public exploit identified at time of analysis, and no vendor-released patch identified at time of analysis, so leadership should prioritize inventory, compensating controls, and repository-access monitoring.
No vendor-released patch identified at time of analysis; restrict Scaffolder action permissions, avoid or tightly control input-value-based permission rules, enforce case- and type-normalization of restricted inputs, reduce integration token privileges to least privilege, and monitor and audit Scaffolder action executions and repository access.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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
Improper authentication in the Backstage @backstage/plugin-auth-backend-module-oidc-provider package prior to 0.4.20 let
EUVD-2026-94068
GHSA-hmp2-4m7g-22cv
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB