Jupyter nbconvert on Windows executes arbitrary batch scripts when converting SVG-containing notebooks to PDF, via an uncontrolled search path that picks up any inkscape.bat in the working directory. Any AI/ML team using Jupyter in shared or CI/CD environments on Windows is exposed. Patch to nbconvert 7.17.0 immediately and audit shared directories for unexpected .bat files.
Affected Systems
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| nbconvert | pip | < 7.17.0 | 7.17.0 |
Do you use nbconvert? You're affected.
Severity & Risk
Recommended Action
- 1. PATCH: Upgrade nbconvert to >= 7.17.0 immediately on all Windows systems (`pip install --upgrade nbconvert`). 2. AUDIT: Scan shared directories, project folders, and CI/CD artifact directories for unexpected .bat files, especially named after common executables (inkscape.bat, python.bat, etc.). 3. HARDEN: Run nbconvert via absolute paths and restrict the working directory for PDF exports to a controlled, write-protected location. 4. DETECT: Add file integrity monitoring alerts for .bat file creation in ML project directories and nbconvert working directories. 5. WORKAROUND (pre-patch): Use `--output-dir` to control the working directory, or convert notebooks in isolated, ephemeral containers. 6. PRINCIPLE: Enforce least-privilege on service accounts running automated notebook conversions.
Classification
Compliance Impact
This CVE is relevant to:
Technical Details
NVD Description
### Summary On Windows, converting a notebook containing SVG output to a PDF results in unauthorized code execution. Specifically, a third party can create a `inkscape.bat` file that defines a [Windows batch script](https://en.wikipedia.org/wiki/Batch_file), capable of arbitrary code execution. When a user runs `jupyter nbconvert --to pdf` on a notebook containing SVG output to a PDF on a Windows platform from this directory, the `inkscape.bat` file is run unexpectedly. ### Details _Give all details on the vulnerability. Pointing to the incriminated source code is very helpful for the maintainer._ `nbconvert` searches for an `inkscape` executable when converting notebooks to PDFs here: https://github.com/jupyter/nbconvert/blob/4f61702f5c7524d8a3c4ac0d5fc33a6ac2fa36a7/nbconvert/preprocessors/svg2pdf.py#L104 The MITRE page on [CWE-427 (Uncontrolled Search Path Element)](https://cwe.mitre.org/data/definitions/427.html) summarizes the root cause succinctly: > In Windows-based systems, when the `LoadLibrary` or `LoadLibraryEx` function is called with a DLL name that does not contain a fully qualified path, the function follows a search order that includes two path elements that might be uncontrolled: > - the directory from which the program has been loaded > - the current working directory ### PoC _Complete instructions, including specific configuration details, to reproduce the vulnerability._ 1. Create a directory containing: - A hidden bat file called `inkscape.bat` containing `msg * "You've been hacked!"` - A dummy ipynb file called `Machine_Learning.ipynb` 2. Run the command `jupyter nbconvert --to pdf Machine_Learning.ipynb`. 3. Wait a few seconds, and you should see a popup showing the message "You've been hacked!" ### Impact All Windows users.
Exploitation Scenario
An adversary with write access to a shared project directory on a Windows-based Jupyter or MLOps platform plants a file named inkscape.bat containing a reverse shell payload or credential harvester. When a data scientist or CI/CD job runs `jupyter nbconvert --to pdf` on any notebook with SVG output from that directory, Windows' uncontrolled search path resolution finds inkscape.bat before the legitimate inkscape binary. The batch script executes with full user privileges, enabling lateral movement to cloud storage buckets, model registries, or secrets managers accessible to the data science environment. The attack is entirely silent from the notebook author's perspective — the PDF may even still generate normally depending on the payload.
Weaknesses (CWE)
References
- github.com/advisories/GHSA-xm59-rqc7-hhvf
- github.com/jupyter/nbconvert/blob/4f61702f5c7524d8a3c4ac0d5fc33a6ac2fa36a7/nbconvert/preprocessors/svg2pdf.py
- github.com/jupyter/nbconvert/commit/c9ac1d1040459ed1ff9eb34e9918ce5a87cf9d71
- github.com/jupyter/nbconvert/issues/2258
- github.com/jupyter/nbconvert/releases/tag/v7.17.0
- github.com/jupyter/nbconvert/security/advisories/GHSA-xm59-rqc7-hhvf
- nvd.nist.gov/vuln/detail/CVE-2025-53000
- imperva.com/blog/code-execution-in-jupyter-notebook-exports