{"schemaVersion":3,"id":"CVE-2026-106500","aliases":["GHSA-xvgh-hmx8-9xxf"],"status":"published","duplicateOf":null,"title":null,"description":"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 improper task state validation in scaffolder backend. An authenticated user with permission to create and access Scaffolder tasks may, under specific timing and deployment conditions, affect files accessible to the Backstage backend. If backend application files are writable, the confidentiality, integrity, and availability of the backend may be compromised. This issue is fixed in versions 3.3.1, 3.4.1, 4.0.3 and 4.1.0.","dates":{"published":"2026-10-06T21:29:10.626Z","modified":"2026-10-07T15:48:01.118Z","reserved":null,"kevAdded":[],"kevDue":[]},"cvss":{"headline":{"score":8.5,"severity":"high","version":"3.1","versionLabel":"v3.1","source":"CVE.org","vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","computed":false,"selection":"backend-summary"},"metrics":[{"version":"3.1","versionLabel":"v3.1","source":"CVE.org","score":8.5,"severity":"high","vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"OSV · Npm","score":8.5,"severity":"high","vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","exploitability":4.6,"impact":10,"computed":true},{"version":"3.1","versionLabel":"v3.1","source":"NVD","score":8.5,"severity":"high","vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","exploitability":null,"impact":null,"computed":false}]},"epss":{"probability":0.00336,"percentile":0.25422,"severity":"low","asOf":"2026-10-18T00:00:00.000Z","change":{"pp":null,"baselineDate":null,"baselineScore":null},"history":[{"date":"2026-10-07T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00336,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00336,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00336,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00336,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00336,"percentile":0.25422}],"last30":[{"date":"2026-10-07T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00328,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00336,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00336,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00336,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00336,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00336,"percentile":0.25422}]},"kev":{"state":"not-listed","entries":[],"listedCount":0,"totalCatalogs":3,"catalogs":[{"source":"cisa","label":"CISA","listed":false,"entry":null},{"source":"enisa","label":"ENISA","listed":false,"entry":null},{"source":"circl","label":"CIRCL","listed":false,"entry":null}]},"ransomware":{"state":"none-recorded","sources":[]},"exploits":[],"exploitCount":0,"weaknesses":[{"id":"CWE-59","name":"Improper Link Resolution Before File Access ('Link Following')","description":"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.","type":"weakness","status":"Draft","abstraction":"Base","likelihoodOfExploit":"Medium","url":"https://cwe.mitre.org/data/definitions/59.html"},{"id":"CWE-362","name":"Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')","description":"The product contains a concurrent code sequence that requires temporary, exclusive access to a shared resource, but a timing window exists in which the shared resource can be modified by another code sequence operating concurrently.","type":"weakness","status":"Draft","abstraction":"Class","likelihoodOfExploit":"Medium","url":"https://cwe.mitre.org/data/definitions/362.html"}],"affected":[{"vendor":"backstage","product":"backstage","name":"backstage","label":"backstage","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 1.49.6","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.50.0-next.0, < 1.50.5","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.51.0-next.0, < 1.54.6","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.49.6 | ≥ 1.50.0-next.0, < 1.50.5 | ≥ 1.51.0-next.0, < 1.54.6","eol":null,"hubHref":"/vendor/backstage/backstage"},{"vendor":"@backstage","product":"plugin-scaffolder-backend","name":"plugin-scaffolder-backend","label":"plugin-scaffolder-backend","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 3.3.1","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.4.0, < 3.4.1","noFixRecorded":false,"fixedIn":null},{"text":"≥ 4.0.0, < 4.0.3","noFixRecorded":false,"fixedIn":null},{"text":"≥ 4.0.4, < 4.1.0","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 3.3.1 | ≥ 3.4.0, < 3.4.1 | ≥ 4.0.0, < 4.0.3 | ≥ 4.0.4, < 4.1.0","eol":null,"hubHref":"/vendor/backstage/plugin-scaffolder-backend"},{"vendor":"linuxfoundation","product":"backstage","name":"backstage","label":"backstage","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 1.49.6","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.50.0, < 1.50.5","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.51.0, < 1.54.6","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.49.6 | ≥ 1.50.0, < 1.50.5 | ≥ 1.51.0, < 1.54.6","eol":null,"hubHref":"/vendor/linuxfoundation/backstage"},{"vendor":"linuxfoundation","product":"backstage\\/plugin-scaffolder-backend","name":"backstage\\/plugin-scaffolder-backend","label":"backstage\\/plugin-scaffolder-backend","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 3.3.1","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.4.0, < 3.4.1","noFixRecorded":false,"fixedIn":null},{"text":"≥ 4.0.0, < 4.0.3","noFixRecorded":false,"fixedIn":null},{"text":"≥ 4.0.4, < 4.1.0","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 3.3.1 | ≥ 3.4.0, < 3.4.1 | ≥ 4.0.0, < 4.0.3 | ≥ 4.0.4, < 4.1.0","eol":null,"hubHref":"/vendor/linuxfoundation/backstageplugin-scaffolder-backend"},{"vendor":"@backstage","product":"plugin-scaffolder-backend","name":"@backstage/plugin-scaffolder-backend","label":"plugin-scaffolder-backend","ecosystem":"Npm","cpePart":null,"purl":"pkg:npm/@backstage/plugin-scaffolder-backend","purlType":"npm","versions":[{"text":"< 4.1.0","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 4.1.0","eol":null,"hubHref":null}],"affectedCount":5,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/backstage/backstage/security/advisories/GHSA-xvgh-hmx8-9xxf","label":"github.com/backstage/backstage/security/advisories/GHSA-xvgh-hmx8-9xxf","hostname":"github.com","tags":["X Refsource CONFIRM","WEB","Mitigation","Vendor Advisory"]},{"url":"https://github.com/backstage/backstage/commit/0d24f1b8701f3dde6cd597f81997c1ea873a43ae","label":"github.com/backstage/backstage/commit/0d24f1b8701f3dde6cd597f81997c1ea873a43ae","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch"]},{"url":"https://github.com/backstage/backstage/commit/56be299dd3ef6706e13e76ea2f8a9b0dd0b6413d","label":"github.com/backstage/backstage/commit/56be299dd3ef6706e13e76ea2f8a9b0dd0b6413d","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch"]},{"url":"https://github.com/backstage/backstage/commit/9e86c95a1a3ddfd54db03731cd8678aa63495175","label":"github.com/backstage/backstage/commit/9e86c95a1a3ddfd54db03731cd8678aa63495175","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch"]},{"url":"https://github.com/backstage/backstage/releases/tag/v1.49.6","label":"github.com/backstage/backstage/releases/tag/v1.49.6","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch","Release Notes"]},{"url":"https://github.com/backstage/backstage/releases/tag/v1.50.5","label":"github.com/backstage/backstage/releases/tag/v1.50.5","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch","Release Notes"]},{"url":"https://github.com/backstage/backstage/releases/tag/v1.54.6","label":"github.com/backstage/backstage/releases/tag/v1.54.6","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch","Release Notes"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-106500","label":"nvd.nist.gov/vuln/detail/CVE-2026-106500","hostname":"nvd.nist.gov","tags":["Advisory"]},{"url":"https://github.com/backstage/backstage","label":"github.com/backstage/backstage","hostname":"github.com","tags":["PACKAGE"]}],"lineage":{"upstream":[],"downstream":[],"duplicates":[],"related":[]},"timeline":[{"kind":"published","date":"2026-10-06T21:29:10.626Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2026-10-07T15:48:01.118Z","label":"Last modified","detail":"Vulnerability information updated.","source":null}],"risk":{"score":34,"level":"medium","profile":"Default","thresholds":{"critical":75,"high":50,"medium":25,"low":10}},"meta":{"dataAsOf":"2026-10-19T12:39:36.371Z","stale":false,"partial":false}}