{"id":"CVE-2026-114140","aliases":["DEBIAN-CVE-2026-114140","EUVD-2026-107551","GHSA-pjvx-prjx-h659","UBUNTU-CVE-2026-114140"],"status":"published","title":"nbconvert: File write via path traversal in cell output filenames","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. From 5.4.0 until 7.17.2, ExtractOutputPreprocessor in nbconvert/preprocessors/extractoutput.py joins the attacker-controlled cell output metadata filename to output_files_dir without limiting the result to the intended directory. When a victim converts a malicious notebook with the markdown, LaTeX, reStructuredText, or AsciiDoc exporter, path traversal in the output filename can write attacker-controlled output data to arbitrary locations accessible to the victim. Running the notebook cell again replaces the malicious output metadata, but merely converting the supplied notebook does not. This issue is fixed in version 7.17.2.","severity":{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00455,"percentile":0.39926,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":true},"cwes":["CWE-22"],"published":"2026-10-21T20:19:50Z","modified":"2026-11-11T06:00:13Z","exploits":[{"source":"pocgithub","id":"federiconbaez/cortex9-nbconvert-output-filename-traversal-model","title":"federiconbaez/cortex9-nbconvert-output-filename-traversal-model","date":"2026-11-09","url":"https://github.com/federiconbaez/cortex9-nbconvert-output-filename-traversal-model"}],"fixes":[{"ecosystem":"PyPI","package":"nbconvert","fixed_in":["7.17.2"],"sources":["ghsa","osv"]},{"ecosystem":"Debian:14","package":"nbconvert","fixed_in":["7.17.2-1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.4.0"},{"last_affected":"7.17.1"},{"fixed":"7.17.2"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["6.5.3-3","6.5.3-4","6.5.3-5","7.16.4-1","7.16.4-2","7.16.5-1","7.16.6-1","7.17.0-1","7.17.1-1","7.17.1-2","7.17.2-1"]},{"source":"osv","ecosystem":"Debian:13","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["7.16.6-1","7.16.6-1+deb13u1","7.17.0-1","7.17.1-1","7.17.1-2","7.17.2-1"]},{"source":"osv","ecosystem":"Debian:14","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.17.2-1"}]}],"versions":["7.16.6-1","7.17.0-1","7.17.1-1","7.17.1-2"]},{"source":"osv","ecosystem":"PyPI","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.4.0"},{"fixed":"7.17.2"}]}],"versions":["5.4.0","5.4.1","5.4.1.dev0","5.5.0","5.6.0","5.6.1","6.0.0","6.0.0a0","6.0.0a1","6.0.0a2","6.0.0a3","6.0.0a4","6.0.0a5","6.0.0a6","6.0.0b7","6.0.0rc0","6.0.1","6.0.2","6.0.3","6.0.4","6.0.5","6.0.6","6.0.7","6.1.0","6.1.0rc0","6.1.1b0","6.2.0","6.2.0rc0","6.2.0rc1","6.2.0rc2","6.3.0","6.3.0b0","6.4.0","6.4.1","6.4.2","6.4.3","6.4.4","6.4.5","6.5.0","6.5.1","6.5.2","6.5.3","6.5.4","7.0.0","7.0.0rc0","7.0.0rc1","7.0.0rc2","7.0.0rc3","7.1.0","7.10.0","7.11.0","7.12.0","7.13.0","7.13.1","7.14.0","7.14.1","7.14.2","7.15.0","7.16.0","7.16.1","7.16.2","7.16.3","7.16.4","7.16.5","7.16.6","7.17.0","7.17.1","7.2.0","7.2.1","7.2.10","7.2.2","7.2.3","7.2.4","7.2.5","7.2.6","7.2.7","7.2.8","7.2.9","7.3.0","7.3.1","7.4.0","7.5.0","7.6.0","7.7.0","7.7.1","7.7.2","7.7.3","7.7.4","7.8.0","7.9.0","7.9.1","7.9.2"]},{"source":"osv","ecosystem":"Ubuntu:18.04:LTS","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["4.2.0-4","5.3.1-1"]},{"source":"osv","ecosystem":"Ubuntu:20.04:LTS","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.4-2ubuntu2","5.6.0-1","5.6.0-2","5.6.1-1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.6.1-3","6.1.0-1","6.3.0-1","6.4.0-1"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["6.5.3-4","6.5.3-5"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["7.17.0-1","7.17.1-2"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["7.16.6-1","7.17.0-1"]}],"products":[{"vendor":"jupyter","product":"nbconvert"}],"references":[{"url":"https://github.com/jupyter/nbconvert/security/advisories/GHSA-pjvx-prjx-h659","tags":["x_refsource_CONFIRM","exploit","advisory","web","report"]},{"url":"https://github.com/jupyter/nbconvert/commit/ce4bd99aec31d81d759fa8eeb8643179392ec66f","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/jupyter/nbconvert/releases/tag/v7.17.2","tags":["x_refsource_MISC","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-114140","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-pjvx-prjx-h659"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/114xxx/CVE-2026-114140.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-114140","tags":["advisory"]},{"url":"https://github.com/jupyter/nbconvert","tags":["package"]},{"url":"https://ubuntu.com/security/CVE-2026-114140","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-114140","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-114140","title":"nbconvert: File write via path traversal in cell output filenames","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. From 5.4.0 until 7.17.2, ExtractOutputPreprocessor in nbconvert/preprocessors/extractoutput.py joins the attacker-controlled cell output metadata filename to output_files_dir without limiting the result to the intended directory. When a victim converts a malicious notebook with the markdown, LaTeX, reStructuredText, or AsciiDoc exporter, path traversal in the output filename can write attacker-controlled output data to arbitrary locations accessible to the victim. Running the notebook cell again replaces the malicious output metadata, but merely converting the supplied notebook does not. This issue is fixed in version 7.17.2.","status":"published","published":"2026-10-21T20:19:50.116Z","modified":"2026-10-30T15:01:54.17Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"high","assessor":"cna"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T13:40:01.309549Z"}],"euvd":[{"id":"EUVD-2026-107551","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. From 5.4.0 until 7.17.2, ExtractOutputPreprocessor in nbconvert/preprocessors/extractoutput.py joins the attacker-controlled cell output metadata filename to output_files_dir without limiting the result to the intended directory. When a victim converts a malicious notebook with the markdown, LaTeX, reStructuredText, or AsciiDoc exporter, path traversal in the output filename can write attacker-controlled output data to arbitrary locations accessible to the victim. Running the notebook cell again replaces the malicious output metadata, but merely converting the supplied notebook does not. This issue is fixed in version 7.17.2.","status":"published","published":"2026-10-21T20:19:50Z","modified":"2026-10-30T15:01:54Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"high"}],"updated_at":"2026-11-02T16:59:06.268136Z"}],"ghsa":[{"id":"GHSA-pjvx-prjx-h659","title":"nbconvert: Arbitrary file write through path traversal in cell output filenames when exporting to md, latex, rst and asciidoc","description":"### Summary\n\nnbconvert \u003c= v7.17.1 has an arbitrary file write vulnerability due to a path traversal in ipynb cell output metadata, more specifically on the filename attribute.\n\nVulnerable converters : `--to markdown`, `--to latex`, `--to rst`, `--to asciidoc`.\n\nIn `ExtractOutputPreprocessor`, `extractoutput.py:116-119` joins attacker-controlled  `path` to `output_files_dir` with no canonicalization check, enabling arbitrary file write.\n\nThis is a sibling vulnerability of https://github.com/advisories/GHSA-4c99-qj7h-p3vg.\n\n### Impact\n\nIf a victim runs nbconvert on a malicious ipynb file, it can create some files with arbitrary data in arbitrary locations, i.e. override authorized_keys.\n\nNote that running the cell with jupyter overrides the output, so it would \"clean up\" malicious cells.\n\n### PoC\n\nIn a ipynb file:\n\n```json\n\n\"cells\": [{\n        \"cell_type\": \"code\", \"id\": \"abc123\", \"execution_count\": 1,\n        \"metadata\": {}, \"source\": \"# PoC\",\n        \"outputs\": [{\n            \"output_type\": \"display_data\",\n            \"metadata\": {\n                \"filename\": \"../../../tmp/PWNED.png\"  # ← traverses outside output_dir\n            },\n            \"data\": {\n                # minimal valid PNG (1×1 pixel)\n                \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\"\n            }\n        }]\n    }]\n\n```\n\n\n### Patches\n\nFixed in \n- https://github.com/jupyter/nbconvert/commit/ce4bd99aec31d81d759fa8eeb8643179392ec66f\n- [7.17.2](https://github.com/jupyter/nbconvert/releases/tag/v7.17.2)","status":"published","published":"2026-10-22T16:23:28Z","modified":"2026-10-22T16:23:29Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"high"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:41:34.690842Z"}],"nvd":[{"id":"CVE-2026-114140","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. From 5.4.0 until 7.17.2, ExtractOutputPreprocessor in nbconvert/preprocessors/extractoutput.py joins the attacker-controlled cell output metadata filename to output_files_dir without limiting the result to the intended directory. When a victim converts a malicious notebook with the markdown, LaTeX, reStructuredText, or AsciiDoc exporter, path traversal in the output filename can write attacker-controlled output data to arbitrary locations accessible to the victim. Running the notebook cell again replaces the malicious output metadata, but merely converting the supplied notebook does not. This issue is fixed in version 7.17.2.","status":"published","published":"2026-10-21T21:17:56.52Z","modified":"2026-10-30T15:16:45.34Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"high","assessor":"secondary"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:13:02.371082Z"}],"osv":[{"id":"CVE-2026-114140","title":"nbconvert: File write via path traversal in cell output filenames","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. From 5.4.0 until 7.17.2, ExtractOutputPreprocessor in nbconvert/preprocessors/extractoutput.py joins the attacker-controlled cell output metadata filename to output_files_dir without limiting the result to the intended directory. When a victim converts a malicious notebook with the markdown, LaTeX, reStructuredText, or AsciiDoc exporter, path traversal in the output filename can write attacker-controlled output data to arbitrary locations accessible to the victim. Running the notebook cell again replaces the malicious output metadata, but merely converting the supplied notebook does not. This issue is fixed in version 7.17.2.","status":"published","published":"2026-10-21T20:19:50.116Z","modified":"2026-11-01T02:31:01.155983803Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"high"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:44:56.310988Z"},{"id":"DEBIAN-CVE-2026-114140","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. From 5.4.0 until 7.17.2, ExtractOutputPreprocessor in nbconvert/preprocessors/extractoutput.py joins the attacker-controlled cell output metadata filename to output_files_dir without limiting the result to the intended directory. When a victim converts a malicious notebook with the markdown, LaTeX, reStructuredText, or AsciiDoc exporter, path traversal in the output filename can write attacker-controlled output data to arbitrary locations accessible to the victim. Running the notebook cell again replaces the malicious output metadata, but merely converting the supplied notebook does not. This issue is fixed in version 7.17.2.","status":"published","published":"2026-10-21T21:17:56.52Z","modified":"2026-11-11T06:00:13.640120639Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"high"}],"updated_at":"2026-11-11T06:24:57.738571Z"},{"id":"GHSA-pjvx-prjx-h659","title":"nbconvert: Arbitrary file write through path traversal in cell output filenames when exporting to md, latex, rst and asciidoc","description":"### Summary\n\nnbconvert \u003c= v7.17.1 has an arbitrary file write vulnerability due to a path traversal in ipynb cell output metadata, more specifically on the filename attribute.\n\nVulnerable converters : `--to markdown`, `--to latex`, `--to rst`, `--to asciidoc`.\n\nIn `ExtractOutputPreprocessor`, `extractoutput.py:116-119` joins attacker-controlled  `path` to `output_files_dir` with no canonicalization check, enabling arbitrary file write.\n\nThis is a sibling vulnerability of https://github.com/advisories/GHSA-4c99-qj7h-p3vg.\n\n### Impact\n\nIf a victim runs nbconvert on a malicious ipynb file, it can create some files with arbitrary data in arbitrary locations, i.e. override authorized_keys.\n\nNote that running the cell with jupyter overrides the output, so it would \"clean up\" malicious cells.\n\n### PoC\n\nIn a ipynb file:\n\n```json\n\n\"cells\": [{\n        \"cell_type\": \"code\", \"id\": \"abc123\", \"execution_count\": 1,\n        \"metadata\": {}, \"source\": \"# PoC\",\n        \"outputs\": [{\n            \"output_type\": \"display_data\",\n            \"metadata\": {\n                \"filename\": \"../../../tmp/PWNED.png\"  # ← traverses outside output_dir\n            },\n            \"data\": {\n                # minimal valid PNG (1×1 pixel)\n                \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\"\n            }\n        }]\n    }]\n\n```\n\n\n### Patches\n\nFixed in \n- https://github.com/jupyter/nbconvert/commit/ce4bd99aec31d81d759fa8eeb8643179392ec66f\n- [7.17.2](https://github.com/jupyter/nbconvert/releases/tag/v7.17.2)","status":"published","published":"2026-10-22T16:23:28Z","modified":"2026-10-22T16:30:41.002101482Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"high"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:46:53.244788Z"},{"id":"UBUNTU-CVE-2026-114140","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. From 5.4.0 until 7.17.2, ExtractOutputPreprocessor in nbconvert/preprocessors/extractoutput.py joins the attacker-controlled cell output metadata filename to output_files_dir without limiting the result to the intended directory. When a victim converts a malicious notebook with the markdown, LaTeX, reStructuredText, or AsciiDoc exporter, path traversal in the output filename can write attacker-controlled output data to arbitrary locations accessible to the victim. Running the notebook cell again replaces the malicious output metadata, but merely converting the supplied notebook does not. This issue is fixed in version 7.17.2.","status":"published","published":"2026-10-21T21:17:00Z","modified":"2026-10-28T20:17:45.398049722Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"high"}],"updated_at":"2026-11-02T16:55:59.591851Z"}]}}
