CVE-2026-24046: @backstage/backend defaults Path Traversal Vulnerability

HIGH
Advisory Identifier: GHSA-rq6q-wr2q-7pgp
CVSS 7.1
CWE-59 CWE-22
Published
Advisory Summary

CVE-2026-24046 is a HIGH (CVSS 7.1) path traversal vulnerability (CWE-59: Improper Link Resolution Before File Access ('Link Following')) affecting @backstage/backend defaults libraries in the npm ecosystem. The issue involves backstage has a possible symlink path traversal in scaffolder actions. Remediation is available by upgrading affected packages to version 0.12.2, 0.13.2, 0.14.1, 2.2.2, 3.0.2, 3.1.1, 0.11.2, 0.12.3.

CVE-2026-24046 at a Glance

CVE Identifier CVE-2026-24046
GHSA Identifier GHSA-rq6q-wr2q-7pgp
Severity HIGH
CVSS v3.1 Base Score 7.1
CWE Classification CWE-59: Improper Link Resolution Before File Access ('Link Following')
Affected Product @backstage/backend defaults
Package Ecosystem npm
Published Date
Last Updated

Security Impact

CVSS: 7.1

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:L).

Attack Vector Network (AV:N)
Attack Complexity High (AC:H)
Privileges Required Low (PR:L)
User Interaction None (UI:N)
Scope Changed (S:C)
Confidentiality High (C:H)
Integrity None (I:N)
Availability Low (A:L)

How to Fix CVE-2026-24046

To remediate this vulnerability, upgrade all affected @backstage/backend defaults dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

@backstage/backend-defaults fixed: 0.12.2
npm install @backstage/backend-defaults@0.12.2
@backstage/backend-defaults fixed: 0.13.2
npm install @backstage/backend-defaults@0.13.2
@backstage/backend-defaults fixed: 0.14.1
npm install @backstage/backend-defaults@0.14.1
@backstage/plugin-scaffolder-backend fixed: 2.2.2
npm install @backstage/plugin-scaffolder-backend@2.2.2
@backstage/plugin-scaffolder-backend fixed: 3.0.2
npm install @backstage/plugin-scaffolder-backend@3.0.2
@backstage/plugin-scaffolder-backend fixed: 3.1.1
npm install @backstage/plugin-scaffolder-backend@3.1.1
@backstage/plugin-scaffolder-node fixed: 0.11.2
npm install @backstage/plugin-scaffolder-node@0.11.2
@backstage/plugin-scaffolder-node fixed: 0.12.3
npm install @backstage/plugin-scaffolder-node@0.12.3
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

npm ls @backstage/backend-defaults

How to Check if You Are Affected

To determine whether your Node.js application is affected by CVE-2026-24046, inspect your project dependencies using npm:

npm ls @backstage/backend-defaults

Analyze the terminal output to locate any version of @backstage/backend defaults in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.12.2), your application is affected.

Note: The npm ls @backstage/backend-defaults command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-59: Improper Link Resolution Before File Access ('Link Following'), where the product attempts to access a file based on the filename, but it does not properly prevent that filename from identifying a link or shortcut that resolves to an unintended resource. In @backstage/backend defaults, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Impact Multiple Scaffolder actions and archive extraction utilities were vulnerable to symlink-based path traversal attacks. An attacker with access to create and execute Scaffolder templates could exploit symlinks to: 1. **Read arbitrary files** via the `debug:log` action by creating a symlink pointing to sensitive files (e.g., `/etc/passwd`, configuration files, secrets) 2. **Delete arbitrary files** via the `fs:delete` action by creating symlinks pointing outside the workspace 3. **Write files outside the workspace** via archive extraction (tar/zip) containing malicious symlinks This affects any Backstage deployment where users can create or execute Scaffolder templates. ### Patches This vulnerability is fixed in the following package versions: - `@backstage/backend-defaults` version 0.12.2, 0.13.2, 0.14.1, 0.15.0 - `@backstage/plugin-scaffolder-backend` version 2.2.2, 3.0.2, 3.1.1 - `@backstage/plugin-scaffolder-node` version 0.11.2, 0.12.3 Users should upgrade to these versions or later. ### Workarounds - Follow the recommendation in the [Backstage Threat Model](https://backstage.io/docs/overview/threat-model#scaffolder) to limit access to creating and updating templates - Restrict who can create and execute Scaffolder templates using the permissions framework - Audit existing templates for symlink usage - Run Backstage in a containerized environment with limited filesystem access ### References - [CWE-59: Improper Link Resolution Before File Access](https://cwe.mitre.org/data/definitions/59.html) - [OWASP Path Traversal](https://owasp.org/www-community/attacks/Path_Traversal)

CVE-2026-24046 Affected @backstage/backend defaults Versions

8 component(s)
Fixed Versions:
0.12.20.13.20.14.12.2.23.0.23.1.10.11.20.12.3
Product / Package Ecosystem Affected Versions Fixed Version
@backstage/backend-defaults
npm
< 0.12.2
0.12.2
@backstage/backend-defaults
npm
≥ 0.13.0
< 0.13.2
0.13.2
@backstage/backend-defaults
npm
≥ 0.14.0
< 0.14.1
0.14.1
@backstage/plugin-scaffolder-backend
npm
< 2.2.2
2.2.2
@backstage/plugin-scaffolder-backend
npm
≥ 3.0.0
< 3.0.2
3.0.2
@backstage/plugin-scaffolder-backend
npm
≥ 3.1.0
< 3.1.1
3.1.1
@backstage/plugin-scaffolder-node
npm
< 0.11.2
0.11.2
@backstage/plugin-scaffolder-node
npm
≥ 0.12.0
< 0.12.3
0.12.3

References

Frequently Asked Questions

What is CVE-2026-24046?
CVE-2026-24046 is a security vulnerability in @backstage/backend defaults involving Backstage has a Possible Symlink Path Traversal in Scaffolder Actions under CWE-59: Improper Link Resolution Before File Access ('Link Following').
Which @backstage/backend defaults versions are affected?
Affected versions include releases prior to 0.12.2, 0.13.2, 0.14.1, 2.2.2, 3.0.2, 3.1.1, 0.11.2, 0.12.3 across affected packages: @backstage/backend-defaults, @backstage/plugin-scaffolder-backend, @backstage/plugin-scaffolder-node.
What version fixes CVE-2026-24046?
Upgrading to 0.12.2, 0.13.2, 0.14.1, 2.2.2, 3.0.2, 3.1.1, 0.11.2, 0.12.3 (or the latest patched release for your respective branch) resolves the vulnerability.
Is @backstage/backend-defaults affected?
Yes, @backstage/backend-defaults is affected in releases prior to 0.12.2, 0.13.2, 0.14.1. Upgrade your dependency to 0.12.2, 0.13.2, 0.14.1 or later.
Is @backstage/plugin-scaffolder-backend affected?
Yes, @backstage/plugin-scaffolder-backend is affected in releases prior to 2.2.2, 3.0.2, 3.1.1. Upgrade your dependency to 2.2.2, 3.0.2, 3.1.1 or later.
What is the CVSS score of CVE-2026-24046?
CVE-2026-24046 has a CVSS v3.1 base score of 7.1 (HIGH) with vector string CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:L.
What CWE is associated with CVE-2026-24046?
CVE-2026-24046 is classified under CWE-59: Improper Link Resolution Before File Access ('Link Following') (The product attempts to access a file based on the filename, but it does not properly prevent that filename from identifying a link or shortcut that resolves to an unintended resource.).
How can I check npm dependencies for CVE-2026-24046?
Run the dependency tree command: 'npm ls @backstage/backend-defaults'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-rq6q-wr2q-7pgp",
  "modified" : "2026-01-22T15:41:18Z",
  "published" : "2026-01-21T22:36:36Z",
  "aliases" : [ "CVE-2026-24046" ],
  "summary" : "Backstage has a Possible Symlink Path Traversal in Scaffolder Actions",
  "details" : "### Impact\n\nMultiple Scaffolder actions and archive extraction utilities were vulnerable to symlink-based path traversal attacks. An attacker with access to create and execute Scaffolder templates could exploit symlinks to:\n\n1. **Read arbitrary files** via the `debug:log` action by creating a symlink pointing to sensitive files (e.g., `/etc/passwd`, configuration files, secrets)\n2. **Delete arbitrary files** via the `fs:delete` action by creating symlinks pointing outside the workspace\n3. **Write files outside the workspace** via archive extraction (tar/zip) containing malicious symlinks\n\nThis affects any Backstage deployment where users can create or execute Scaffolder templates.\n\n### Patches\n\nThis vulnerability is fixed in the following package versions:\n\n- `@backstage/backend-defaults` version 0.12.2, 0.13.2, 0.14.1, 0.15.0\n- `@backstage/plugin-scaffolder-backend` version 2.2.2, 3.0.2, 3.1.1\n- `@backstage/plugin-scaffolder-node` version 0.11.2, 0.12.3\n\nUsers should upgrade to these versions or later.\n\n### Workarounds\n\n- Follow the recommendation in the [Backstage Threat Model](https://backstage.io/docs/overview/threat-model#scaffolder) to limit access to creating and updating templates\n- Restrict who can create and execute Scaffolder templates using the permissions framework\n- Audit existing templates for symlink usage\n- Run Backstage in a containerized environment with limited filesystem access\n\n### References\n\n- [CWE-59: Improper Link Resolution Before File Access](https://cwe.mitre.org/data/definitions/59.html)\n- [OWASP Path Traversal](https://owasp.org/www-community/attacks/Path_Traversal)",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:L"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@backstage/backend-defaults"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "0.12.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@backstage/backend-defaults"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0.13.0"
      }, {
        "fixed" : "0.13.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@backstage/backend-defaults"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0.14.0"
      }, {
        "fixed" : "0.14.1"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@backstage/plugin-scaffolder-backend"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "2.2.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@backstage/plugin-scaffolder-backend"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "3.0.0"
      }, {
        "fixed" : "3.0.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@backstage/plugin-scaffolder-backend"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "3.1.0"
      }, {
        "fixed" : "3.1.1"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@backstage/plugin-scaffolder-node"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "0.11.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@backstage/plugin-scaffolder-node"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0.12.0"
      }, {
        "fixed" : "0.12.3"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/backstage/backstage/security/advisories/GHSA-rq6q-wr2q-7pgp"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-24046"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/backstage/backstage/commit/c641c147ab371a9a8a2f5f67fdb7cb9c97ef345d"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/backstage/backstage"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-22", "CWE-59" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-01-21T22:36:36Z",
    "nvd_published_at" : "2026-01-21T23:15:53Z"
  }
}