GitHub Advisoryadvisory · npm
GHSA-vm32-vv63-w422 jsPDF Vulnerable to Stored XMP Metadata Injection (Spoofing & Integrity Violation)
MEDIUM
Official page ↗
- Aliases
- CVE-2026-24043
- Ecosystem
- npm
- Packages
- jspdf
- Severity
- Moderate
- CVSS vector
- CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N
- Weaknesses
- CWE-20, CWE-74
- Reviewed
- 2026-02-02
Affected packages
• npm jspdf: < 4.1.0 → fixed in 4.1.0
Description
Impact
User control of the first argument of the `addMetadata` function allows users to inject arbitrary XML.
If given the possibility to pass unsanitized input to the `addMetadata` method, a user can inject arbitrary XMP metadata into the generated PDF. If the generated PDF is signed, stored or otherwise processed after, the integrity of the PDF can no longer be guaranteed.
Example attack vector:
```js
import { jsPDF } from "jspdf"
const doc = new jsPDF()
// Input a string that closes the current XML tag and opens a new one.
// We are injecting a fake "dc:creator" (Author) to spoof the document source.
const maliciousInput = '' +
'' +
'TRUSTED_ADMINISTRATOR' + // ' +
''
// The application innocently adds the user's input to the metadata
doc.addMetadata(maliciousInput, "http://valid.namespace")
doc.save("test.pdf")
```
Patches
The vulnerability has been fixed in [email protected]
Workarounds
Sanitize user input before passing it to the `addMetadata` method: escape XML entities. For example:
```js
let input = "..."
input = input
.replace(/&/g, "&")
.replace(//g, ">")
.replace(/"/g, """)
.replace(/'/g, "'")
doc.addMetadata(input)
```
Related
Alias · CVE (1)
- CVE-2026-24043 jsPDF is a library to generate PDFs in JavaScript. vulnerability
References
- https://github.com/parallax/jsPDF/security/advisories/GHSA-vm32-vv63-w422 web
- https://nvd.nist.gov/vuln/detail/CVE-2026-24043 advisory
- https://github.com/parallax/jsPDF/commit/efe54bf50f3f5e5416b2495e3c24624fc80b6cff web
- https://github.com/parallax/jsPDF package
- https://github.com/parallax/jsPDF/releases/tag/v4.1.0 web