{"schemaVersion":3,"id":"CVE-2026-106498","aliases":["GHSA-qgvj-qcf8-xq73"],"status":"published","duplicateOf":null,"title":null,"description":"Backstage is an open framework for building developer portals. Prior to 3.5.1, 3.6.2, 3.7.2, 3.8.2 and 3.9.1, the @backstage/plugin-catalog-backend package is affected by improper url validation in catalog entity placeholder resolution. An authenticated Backstage user could craft a catalog entity with placeholder directives that reference resources outside the entity's source repository. Under certain configurations, this could allow access to data not intended to be available to the user. This issue is fixed in versions 3.5.1, 3.6.2, 3.7.2, 3.8.2 and 3.9.1.","dates":{"published":"2026-10-06T21:23:37.560Z","modified":"2026-10-09T01:55:00.494Z","reserved":null,"kevAdded":[],"kevDue":[]},"cvss":{"headline":{"score":7.7,"severity":"high","version":"3.1","versionLabel":"v3.1","source":"CVE.org","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N","computed":false,"selection":"backend-summary"},"metrics":[{"version":"3.1","versionLabel":"v3.1","source":"CVE.org","score":7.7,"severity":"high","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"OSV · Npm","score":7.7,"severity":"high","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N","exploitability":7.9,"impact":6.7,"computed":true},{"version":"3.1","versionLabel":"v3.1","source":"NVD","score":7.7,"severity":"high","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N","exploitability":null,"impact":null,"computed":false}]},"epss":{"probability":0.00307,"percentile":0.22041,"severity":"low","asOf":"2026-10-19T00:00:00.000Z","change":{"pp":null,"baselineDate":null,"baselineScore":null},"history":[{"date":"2026-10-07T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00307,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00307,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00307,"percentile":0.22041}],"last30":[{"date":"2026-10-07T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00314,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00307,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00307,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00307,"percentile":0.22041}]},"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-863","name":"Incorrect Authorization","description":"The product performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check.","type":"weakness","status":"Incomplete","abstraction":"Class","likelihoodOfExploit":"High","url":"https://cwe.mitre.org/data/definitions/863.html"},{"id":"CWE-918","name":"Server-Side Request Forgery (SSRF)","description":"The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination.","type":"weakness","status":"Incomplete","abstraction":"Base","likelihoodOfExploit":null,"url":"https://cwe.mitre.org/data/definitions/918.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.51.3","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.52.0-next.0, < 1.53.2","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.54.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.51.3 | ≥ 1.52.0-next.0, < 1.53.2 | ≥ 1.54.0-next.0, < 1.54.6","eol":null,"hubHref":"/vendor/backstage/backstage"},{"vendor":"@backstage","product":"plugin-catalog-backend","name":"plugin-catalog-backend","label":"plugin-catalog-backend","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 3.5.1","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.6.0, < 3.6.2","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.7.0, < 3.7.2","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.8.0, < 3.8.2","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.9.0, < 3.9.1","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 3.5.1 | ≥ 3.6.0, < 3.6.2 | ≥ 3.7.0, < 3.7.2 | ≥ 3.8.0, < 3.8.2 | ≥ 3.9.0, < 3.9.1","eol":null,"hubHref":"/vendor/backstage/plugin-catalog-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.51.3","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.52.0, < 1.53.2","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.54.0, < 1.54.6","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.49.6 | ≥ 1.50.0, < 1.50.5 | ≥ 1.51.0, < 1.51.3 | ≥ 1.52.0, < 1.53.2 | ≥ 1.54.0, < 1.54.6","eol":null,"hubHref":"/vendor/linuxfoundation/backstage"},{"vendor":"linuxfoundation","product":"backstage_plugin-catalog-backend","name":"backstage plugin-catalog-backend","label":"backstage_plugin-catalog-backend","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 3.5.1","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.6.0, < 3.6.2","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.7.0, < 3.7.2","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.8.0, < 3.8.2","noFixRecorded":false,"fixedIn":null},{"text":"≥ 3.9.0, < 3.9.1","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 3.5.1 | ≥ 3.6.0, < 3.6.2 | ≥ 3.7.0, < 3.7.2 | ≥ 3.8.0, < 3.8.2 | ≥ 3.9.0, < 3.9.1","eol":null,"hubHref":"/vendor/linuxfoundation/backstage_plugin-catalog-backend"},{"vendor":"@backstage","product":"plugin-catalog-backend","name":"@backstage/plugin-catalog-backend","label":"plugin-catalog-backend","ecosystem":"Npm","cpePart":null,"purl":"pkg:npm/@backstage/plugin-catalog-backend","purlType":"npm","versions":[{"text":"< 3.9.1","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 3.9.1","eol":null,"hubHref":null}],"affectedCount":5,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/backstage/backstage/security/advisories/GHSA-qgvj-qcf8-xq73","label":"github.com/backstage/backstage/security/advisories/GHSA-qgvj-qcf8-xq73","hostname":"github.com","tags":["X Refsource CONFIRM","WEB","Mitigation","Vendor Advisory"]},{"url":"https://github.com/backstage/backstage/commit/0b0f6fc89b4eb4872c76a498abbe1dc65998bb6e","label":"github.com/backstage/backstage/commit/0b0f6fc89b4eb4872c76a498abbe1dc65998bb6e","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch"]},{"url":"https://github.com/backstage/backstage/commit/286bfc1f9cc3608a073b41016be302785be385d1","label":"github.com/backstage/backstage/commit/286bfc1f9cc3608a073b41016be302785be385d1","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch"]},{"url":"https://github.com/backstage/backstage/commit/61a10f19926aeda7f4a32de48d733e6710584634","label":"github.com/backstage/backstage/commit/61a10f19926aeda7f4a32de48d733e6710584634","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch"]},{"url":"https://github.com/backstage/backstage/commit/99729e925fd2bd40ba210022351a0ee6318e6197","label":"github.com/backstage/backstage/commit/99729e925fd2bd40ba210022351a0ee6318e6197","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch"]},{"url":"https://github.com/backstage/backstage/commit/e786ac309ed2d775daf2309393c015c43902d6f6","label":"github.com/backstage/backstage/commit/e786ac309ed2d775daf2309393c015c43902d6f6","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.51.3","label":"github.com/backstage/backstage/releases/tag/v1.51.3","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch","Release Notes"]},{"url":"https://github.com/backstage/backstage/releases/tag/v1.53.2","label":"github.com/backstage/backstage/releases/tag/v1.53.2","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-106498","label":"nvd.nist.gov/vuln/detail/CVE-2026-106498","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:23:37.560Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2026-10-09T01:55:00.494Z","label":"Last modified","detail":"Vulnerability information updated.","source":null}],"risk":{"score":31,"level":"medium","profile":"Default","thresholds":{"critical":75,"high":50,"medium":25,"low":10}},"meta":{"dataAsOf":"2026-10-20T12:03:52.228Z","stale":false,"partial":false}}