VYPR
Moderate severityOSV Advisory· Published Feb 2, 2026· Updated Feb 3, 2026

jsPDF has a Shared State Race Condition in addJS Plugin

CVE-2026-24040

Description

jsPDF is a library to generate PDFs in JavaScript. Prior to 4.1.0, the addJS method in the jspdf Node.js build utilizes a shared module-scoped variable (text) to store JavaScript content. When used in a concurrent environment (e.g., a Node.js web server), this variable is shared across all requests. If multiple requests generate PDFs simultaneously, the JavaScript content intended for one user may be overwritten by a subsequent request before the document is generated. This results in Cross-User Data Leakage, where the PDF generated for User A contains the JavaScript payload (and any embedded sensitive data) intended for User B. Typically, this only affects server-side environments, although the same race conditions might occur if jsPDF runs client-side. The vulnerability has been fixed in jsPDF@4.1.0.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
jspdfnpm
< 4.1.04.1.0

Affected products

1

Patches

1
2863e5c26afe

Merge commit from fork

https://github.com/parallax/jsPDFKarimTantaweyFeb 2, 2026via ghsa
1 file changed · +6 2
  • src/modules/javascript.js+6 2 modified
    @@ -34,15 +34,19 @@ import { jsPDF } from "../jspdf.js";
      */
     (function(jsPDFAPI) {
       "use strict";
    -  var jsNamesObj, jsJsObj, text;
       /**
        * @name addJS
        * @function
        * @param {string} javascript The javascript to be embedded into the PDF-file.
        * @returns {jsPDF}
        */
       jsPDFAPI.addJS = function(javascript) {
    -    text = javascript;
    +    // FIX: Move variables inside function scope to prevent shared state
    +    // between multiple jsPDF instances
    +    var jsNamesObj;
    +    var jsJsObj;
    +    var text = javascript;
    +    
         this.internal.events.subscribe("postPutResources", function() {
           jsNamesObj = this.internal.newObject();
           this.internal.out("<<");
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

5

News mentions

0

No linked articles in our index yet.