{"schemaVersion":3,"id":"CVE-2026-106507","aliases":[],"status":"published","duplicateOf":null,"title":null,"description":"Backstage is an open framework for building developer portals. Prior to 1.15.4, the @backstage/plugin-techdocs-node package is affected by techdocs arbitrary file read via mkdocs snippets. Unsafe path resolution in TechDocs source tree handling allows an authenticated user who can register documentation sources to include content from outside the intended documentation boundary. Depending on deployment, this may expose files readable by the build process. This issue is fixed in version 1.15.4.","dates":{"published":"2026-10-06T21:46:08.014Z","modified":"2026-10-07T15:03:20.623Z","reserved":null,"kevAdded":[],"kevDue":[]},"cvss":{"headline":{"score":6.5,"severity":"medium","version":"3.1","versionLabel":"v3.1","source":"NVD","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","computed":false,"selection":"backend-summary"},"metrics":[{"version":"3.1","versionLabel":"v3.1","source":"CVE.org","score":5.3,"severity":"medium","vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"NVD","score":6.5,"severity":"medium","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","exploitability":null,"impact":null,"computed":false}]},"epss":{"probability":0.00308,"percentile":0.2227,"severity":"low","asOf":"2026-10-20T00:00:00.000Z","change":{"pp":null,"baselineDate":null,"baselineScore":null},"history":[{"date":"2026-10-07T00:00:00.000Z","score":0.00283,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00283,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00283,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00308,"percentile":0.2227}],"last30":[{"date":"2026-10-07T00:00:00.000Z","score":0.00283,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00283,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00283,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00308,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00308,"percentile":0.2227}]},"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-61","name":"UNIX Symbolic Link (Symlink) Following","description":"The product, when opening a file or directory, does not sufficiently account for when the file is a symbolic link that resolves to a target outside of the intended control sphere. This could allow an attacker to cause the product to operate on unauthorized files.","type":"weakness","status":"Incomplete","abstraction":"Compound","likelihoodOfExploit":"High","url":"https://cwe.mitre.org/data/definitions/61.html"}],"affected":[{"vendor":"backstage","product":"backstage","name":"backstage","label":"backstage","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 1.54.6","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.54.6","eol":null,"hubHref":"/vendor/backstage/backstage"},{"vendor":"@backstage/plugin-techdocs-node","product":"plugin-techdocs-node","name":"plugin-techdocs-node","label":"plugin-techdocs-node","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 1.15.4","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.15.4","eol":null,"hubHref":"/vendor/backstageplugin-techdocs-node/plugin-techdocs-node"},{"vendor":"linuxfoundation","product":"backstage","name":"backstage","label":"backstage","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 1.54.6","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.54.6","eol":null,"hubHref":"/vendor/linuxfoundation/backstage"},{"vendor":"linuxfoundation","product":"backstage_plugin-techdocs-node","name":"backstage plugin-techdocs-node","label":"backstage_plugin-techdocs-node","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 1.15.4","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 1.15.4","eol":null,"hubHref":"/vendor/linuxfoundation/backstage_plugin-techdocs-node"}],"affectedCount":4,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/backstage/backstage/security/advisories/GHSA-vmqh-7cj9-mvcj","label":"github.com/backstage/backstage/security/advisories/GHSA-vmqh-7cj9-mvcj","hostname":"github.com","tags":["X Refsource CONFIRM","Mitigation","Vendor Advisory"]},{"url":"https://github.com/backstage/backstage/commit/911ca36f10e654c5517da029129230fc05a4f580","label":"github.com/backstage/backstage/commit/911ca36f10e654c5517da029129230fc05a4f580","hostname":"github.com","tags":["X Refsource MISC","Patch"]},{"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","Patch","Release Notes"]}],"lineage":{"upstream":[],"downstream":[],"duplicates":[],"related":[]},"timeline":[{"kind":"published","date":"2026-10-06T21:46:08.014Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2026-10-07T15:03:20.623Z","label":"Last modified","detail":"Vulnerability information updated.","source":null}],"risk":{"score":26,"level":"medium","profile":"Default","thresholds":{"critical":75,"high":50,"medium":25,"low":10}},"meta":{"dataAsOf":"2026-10-20T16:24:08.624Z","stale":false,"partial":false}}