{"schemaVersion":3,"id":"CVE-2021-32661","aliases":["GHSA-gg96-f8wr-p89f"],"status":"published","duplicateOf":null,"title":null,"description":"Backstage is an open platform for building developer portals. In versions of Backstage's Techdocs Plugin (`@backstage/plugin-techdocs`) prior to 0.9.5, a malicious internal actor can potentially upload documentation content with malicious scripts by embedding the script within an `object` element. This may give access to sensitive data when other users visit that same documentation page. The ability to upload malicious content may be limited by internal code review processes, unless the chosen TechDocs deployment method is to use an object store and the actor has access to upload files directly to that store. The vulnerability is patched in the `0.9.5` release of `@backstage/plugin-techdocs`.","dates":{"published":"2021-06-03T17:25:10.000Z","modified":"2024-08-03T23:25:31.127Z","reserved":null,"kevAdded":[],"kevDue":[]},"cvss":{"headline":{"score":7.3,"severity":"high","version":"3.1","versionLabel":"v3.1","source":"NVD","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N","computed":false,"selection":"backend-summary"},"metrics":[{"version":"3.1","versionLabel":"v3.1","source":"CVE.org","score":6.8,"severity":"medium","vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:H/I:H/A:H","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"OSV · Npm","score":6.8,"severity":"medium","vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:H/I:H/A:H","exploitability":2.3,"impact":9.8,"computed":true},{"version":"3.1","versionLabel":"v3.1","source":"NVD","score":7.3,"severity":"high","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N","exploitability":null,"impact":null,"computed":false},{"version":"2.0","versionLabel":"v2.0","source":"NVD","score":4.9,"severity":"medium","vector":"AV:N/AC:M/Au:S/C:P/I:P/A:N","exploitability":null,"impact":null,"computed":false}]},"epss":{"probability":0.01209,"percentile":0.68004,"severity":"low","asOf":"2026-10-20T00:00:00.000Z","change":{"pp":0,"baselineDate":"2026-09-20T00:00:00.000Z","baselineScore":0.01209},"history":[{"date":"2026-09-14T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-15T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-16T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-17T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-18T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-19T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-20T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-21T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.01209,"percentile":0.68004}],"last30":[{"date":"2026-09-20T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-21T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.01209,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.01209,"percentile":0.68004}]},"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-77","name":"Improper Neutralization of Special Elements used in a Command ('Command Injection')","description":"The product constructs all or part of a command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended command when it is sent to a downstream component.","type":"weakness","status":"Draft","abstraction":"Class","likelihoodOfExploit":"High","url":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-434","name":"Unrestricted Upload of File with Dangerous Type","description":"The product allows the upload or transfer of dangerous file types that are automatically processed within its environment.","type":"weakness","status":"Draft","abstraction":"Base","likelihoodOfExploit":"Medium","url":"https://cwe.mitre.org/data/definitions/434.html"}],"affected":[{"vendor":"backstage","product":"backstage","name":"backstage","label":"backstage","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 0.9.5","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 0.9.5","eol":null,"hubHref":"/vendor/backstage/backstage"},{"vendor":"linuxfoundation","product":"\\@backstage\\/plugin-techdocs","name":"\\@backstage\\/plugin-techdocs","label":"\\@backstage\\/plugin-techdocs","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 0.9.5","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 0.9.5","eol":null,"hubHref":"/vendor/linuxfoundation/backstageplugin-techdocs"},{"vendor":"@backstage","product":"plugin-techdocs","name":"@backstage/plugin-techdocs","label":"plugin-techdocs","ecosystem":"Npm","cpePart":null,"purl":"pkg:npm/@backstage/plugin-techdocs","purlType":"npm","versions":[{"text":"< 0.9.5","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 0.9.5","eol":null,"hubHref":null}],"affectedCount":3,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/backstage/backstage/commit/aad98c544e59369901fe9e0a85f6357644dceb5c","label":"github.com/backstage/backstage/commit/aad98c544e59369901fe9e0a85f6357644dceb5c","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch","Third Party Advisory"]},{"url":"https://github.com/backstage/backstage/releases/tag/release-2021-06-03","label":"github.com/backstage/backstage/releases/tag/release-2021-06-03","hostname":"github.com","tags":["X Refsource MISC","WEB","Third Party Advisory"]},{"url":"https://github.com/backstage/backstage/security/advisories/GHSA-gg96-f8wr-p89f","label":"github.com/backstage/backstage/security/advisories/GHSA-gg96-f8wr-p89f","hostname":"github.com","tags":["X Refsource CONFIRM","WEB","Third Party Advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2021-32661","label":"nvd.nist.gov/vuln/detail/CVE-2021-32661","hostname":"nvd.nist.gov","tags":["Advisory"]}],"lineage":{"upstream":[],"downstream":[],"duplicates":[],"related":[]},"timeline":[{"kind":"published","date":"2021-06-03T17:25:10.000Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2024-08-03T23:25:31.127Z","label":"Last modified","detail":"Vulnerability information updated.","source":null}],"risk":{"score":29,"level":"medium","profile":"Default","thresholds":{"critical":75,"high":50,"medium":25,"low":10}},"meta":{"dataAsOf":"2026-10-21T10:13:12.341Z","stale":false,"partial":false}}