{"schemaVersion":3,"id":"CVE-2026-106557","aliases":["GHSA-f7v3-xhm6-w245"],"status":"published","duplicateOf":null,"title":null,"description":"Backstage is an open framework for building developer portals. Prior to 1.14.6 and 1.15.4, the @backstage/plugin-techdocs-node package did not sufficiently validate TechDocs Markdown extension configuration. An authenticated user who can register or modify documentation sources may cause a TechDocs build to access resources outside the intended documentation boundary, potentially exposing backend-host data or internal network resources. This issue is fixed in versions 1.14.6 and 1.15.4 when pymdown-extensions 10.21.3 or later is also used, normally through mkdocs-techdocs-core 1.7.0 or later.","dates":{"published":"2026-10-07T16:22:53.320Z","modified":"2026-10-07T17:47:16.631Z","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.00297,"percentile":0.21106,"severity":"low","asOf":"2026-10-20T00:00:00.000Z","change":{"pp":null,"baselineDate":null,"baselineScore":null},"history":[{"date":"2026-10-08T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00297,"percentile":0.21106}],"last30":[{"date":"2026-10-08T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00297,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00297,"percentile":0.21106}]},"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-22","name":"Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')","description":"The product uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.","type":"weakness","status":"Stable","abstraction":"Base","likelihoodOfExploit":"High","url":"https://cwe.mitre.org/data/definitions/22.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.50.5","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.51.0-next.0, < 1.54.6","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.50.5 | ≥ 1.51.0-next.0, < 1.54.6","eol":null,"hubHref":"/vendor/backstage/backstage"},{"vendor":"@backstage","product":"plugin-techdocs-node","name":"plugin-techdocs-node","label":"plugin-techdocs-node","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 1.14.6","noFixRecorded":false,"fixedIn":null},{"text":"≥ 1.15.0, < 1.15.4","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.14.6 | ≥ 1.15.0, < 1.15.4","eol":null,"hubHref":"/vendor/backstage/plugin-techdocs-node"},{"vendor":"@backstage","product":"plugin-techdocs-node","name":"@backstage/plugin-techdocs-node","label":"plugin-techdocs-node","ecosystem":"Npm","cpePart":null,"purl":"pkg:npm/@backstage/plugin-techdocs-node","purlType":"npm","versions":[{"text":"< 1.15.4","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.15.4","eol":null,"hubHref":null}],"affectedCount":3,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/backstage/backstage/security/advisories/GHSA-f7v3-xhm6-w245","label":"github.com/backstage/backstage/security/advisories/GHSA-f7v3-xhm6-w245","hostname":"github.com","tags":["X Refsource CONFIRM","WEB"]},{"url":"https://github.com/backstage/backstage/commit/017ace52d9b327ededc6704cf17799c875ae0f29","label":"github.com/backstage/backstage/commit/017ace52d9b327ededc6704cf17799c875ae0f29","hostname":"github.com","tags":["X Refsource MISC","WEB"]},{"url":"https://github.com/backstage/backstage/commit/2d9de4ca117a529de4b6ed7dfb7aa507ca7b3f91","label":"github.com/backstage/backstage/commit/2d9de4ca117a529de4b6ed7dfb7aa507ca7b3f91","hostname":"github.com","tags":["X Refsource MISC","WEB"]},{"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"]},{"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"]},{"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-07T16:22:53.320Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2026-10-07T17:47:16.631Z","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-20T16:24:48.660Z","stale":false,"partial":false}}