{"schemaVersion":3,"id":"CVE-2026-88064","aliases":[],"status":"published","duplicateOf":null,"title":null,"description":"Backstage is an open framework for building developer portals. Prior to 1.14.6 and from 1.15.0 until 1.15.4, the @backstage/plugin-techdocs-node package insufficiently validates mkdocs.yml supplied by an authenticated user who can register or modify a TechDocs source. Unsafe Python YAML tags, markdown_extensions names and configuration, theme options, and extra_templates values can reach the documentation generator and cause unintended code execution. The resulting impact is limited to the files, credentials, network access, and other resources available to the TechDocs backend or build container. This issue is fixed in versions 1.14.6 and 1.15.4.","dates":{"published":"2026-09-16T14:13:26.950Z","modified":"2026-09-16T15:46:46.830Z","reserved":null,"kevAdded":[],"kevDue":[]},"cvss":{"headline":{"score":8.8,"severity":"high","version":"3.1","versionLabel":"v3.1","source":"CVE.org","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","computed":false,"selection":"backend-summary"},"metrics":[{"version":"3.1","versionLabel":"v3.1","source":"CVE.org","score":8.8,"severity":"high","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"NVD","score":8.8,"severity":"high","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","exploitability":null,"impact":null,"computed":false}]},"epss":{"probability":0.0118,"percentile":0.67212,"severity":"low","asOf":"2026-10-19T00:00:00.000Z","change":{"pp":0.547,"baselineDate":"2026-09-19T00:00:00.000Z","baselineScore":0.00633},"history":[{"date":"2026-09-17T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-18T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-19T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-20T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-21T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.0118,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.0118,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.0118,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.0118,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.0118,"percentile":0.67212}],"last30":[{"date":"2026-09-19T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-20T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-21T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.00633,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.00875,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.01154,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.0118,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.0118,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.0118,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.0118,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.0118,"percentile":0.67212}]},"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-20","name":"Improper Input Validation","description":"The product receives input or data, but it does\n        not validate or incorrectly validates that the input has the\n        properties that are required to process the data safely and\n        correctly.","type":"weakness","status":"Stable","abstraction":"Class","likelihoodOfExploit":"High","url":"https://cwe.mitre.org/data/definitions/20.html"},{"id":"CWE-1336","name":"Improper Neutralization of Special Elements Used in a Template Engine","description":"The product uses a template engine to insert or process externally-influenced input, but it does not neutralize or incorrectly neutralizes special elements or syntax that can be interpreted as template expressions or other code directives when processed by the engine.","type":"weakness","status":"Incomplete","abstraction":"Base","likelihoodOfExploit":null,"url":"https://cwe.mitre.org/data/definitions/1336.html"}],"affected":[{"vendor":"backstage","product":"backstage","name":"backstage","label":"backstage","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/backstage"},{"vendor":"linuxfoundation","product":"backstage","name":"backstage","label":"backstage","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/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.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/linuxfoundation/backstage_plugin-techdocs-node"}],"affectedCount":3,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/backstage/backstage/security/advisories/GHSA-292q-8mf5-h6g3","label":"github.com/backstage/backstage/security/advisories/GHSA-292q-8mf5-h6g3","hostname":"github.com","tags":["X Refsource CONFIRM","Mitigation","Vendor Advisory"]},{"url":"https://github.com/backstage/backstage/commit/017ace52d9b327ededc6704cf17799c875ae0f29","label":"github.com/backstage/backstage/commit/017ace52d9b327ededc6704cf17799c875ae0f29","hostname":"github.com","tags":["X Refsource MISC","Patch"]},{"url":"https://github.com/backstage/backstage/commit/02cd7cdbb18b687446277b5602adaee7f1d53cbb","label":"github.com/backstage/backstage/commit/02cd7cdbb18b687446277b5602adaee7f1d53cbb","hostname":"github.com","tags":["X Refsource MISC","Patch"]},{"url":"https://github.com/backstage/backstage/commit/25125ee727a3de3418a8fa6a9e458cd5b73ecf26","label":"github.com/backstage/backstage/commit/25125ee727a3de3418a8fa6a9e458cd5b73ecf26","hostname":"github.com","tags":["X Refsource MISC","Patch"]},{"url":"https://github.com/backstage/backstage/commit/a7d995f11a5d27f0efbdbe8bb6c21b06988c79c9","label":"github.com/backstage/backstage/commit/a7d995f11a5d27f0efbdbe8bb6c21b06988c79c9","hostname":"github.com","tags":["X Refsource MISC","Patch"]},{"url":"https://github.com/backstage/backstage/commit/a900a9953c8f7ad3ba1906d1d257725a9996cc9d","label":"github.com/backstage/backstage/commit/a900a9953c8f7ad3ba1906d1d257725a9996cc9d","hostname":"github.com","tags":["X Refsource MISC","Patch"]},{"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","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","Patch","Release Notes"]}],"lineage":{"upstream":[],"downstream":[],"duplicates":[],"related":[]},"timeline":[{"kind":"published","date":"2026-09-16T14:13:26.950Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2026-09-16T15:46:46.830Z","label":"Last modified","detail":"Vulnerability information updated.","source":null}],"risk":{"score":35,"level":"medium","profile":"Default","thresholds":{"critical":75,"high":50,"medium":25,"low":10}},"meta":{"dataAsOf":"2026-10-19T19:32:05.209Z","stale":false,"partial":false}}