{"id":"CVE-2026-39377","aliases":["DEBIAN-CVE-2026-39377","EUVD-2026-24023","GHSA-4c99-qj7h-p3vg","OESA-2026-2195","OESA-2026-2196","OESA-2026-2215","PYSEC-2026-2229","UBUNTU-CVE-2026-39377","openSUSE-SU-2026:10603-1"],"status":"published","title":"nbconvert has an Arbitrary File Write via Path Traversal in Cell Attachment Filenames","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.","severity":{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00266,"percentile":0.18724,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-22","CWE-73"],"published":"2026-04-21T00:14:59Z","modified":"2026-10-28T02:30:44Z","fixes":[{"ecosystem":"PyPI","package":"nbconvert","fixed_in":["7.17.1"],"sources":["ghsa","osv"]},{"ecosystem":"Debian:13","package":"nbconvert","fixed_in":["7.16.6-1+deb13u1"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"nbconvert","fixed_in":["7.17.1-1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.5.0"},{"fixed":"7.17.1"}]}]},{"source":"osv","ecosystem":"Debian:13","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.16.6-1+deb13u1"}]}],"versions":["7.16.6-1"]},{"source":"osv","ecosystem":"Debian:14","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.17.1-1"}]}],"versions":["7.16.6-1","7.17.0-1"]},{"source":"osv","ecosystem":"PyPI","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.5.0"},{"fixed":"7.17.1"}]}],"versions":["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.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":"openEuler:24.03-LTS","package":"python-nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.17.1-1.oe2403"}]}],"bundled":2},{"source":"osv","ecosystem":"openEuler:24.03-LTS-SP3","package":"python-nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.17.1-1.oe2403sp3"}]}],"bundled":2},{"source":"osv","ecosystem":"openEuler:24.03-LTS-SP1","package":"python-nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.17.1-1.oe2403sp1"}]}],"bundled":2},{"source":"osv","ecosystem":"PyPI","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.5.0"},{"fixed":"7.17.1"}]}],"versions":["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.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:25.10","package":"nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["7.16.6-1"]},{"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"]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"python-nbconvert","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.17.1-1.1"}]}],"bundled":3}],"products":[{"vendor":"jupyter","product":"nbconvert"}],"references":[{"url":"https://github.com/jupyter/nbconvert/security/advisories/GHSA-4c99-qj7h-p3vg","tags":["x_refsource_CONFIRM","Mitigation","Vendor Advisory","advisory","web","report"]},{"url":"https://github.com/jupyter/nbconvert/releases/tag/v7.17.1","tags":["x_refsource_MISC","Product","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-39377","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-4c99-qj7h-p3vg"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/39xxx/CVE-2026-39377.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-39377","tags":["advisory"]},{"url":"https://github.com/jupyter/nbconvert","tags":["package"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-2195","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-39378","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-2196","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-2215","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-39377","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-39377","tags":["report"]},{"url":"","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2025-53000","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-39377","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-39378","tags":["web"]}],"sources":{"cve":[{"id":"CVE-2026-39377","title":"nbconvert has an Arbitrary File Write via Path Traversal in Cell Attachment Filenames","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.","status":"published","published":"2026-04-21T00:14:59.937Z","modified":"2026-04-21T19:49:24.475Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium","assessor":"cna"}],"cwes":["CWE-22","CWE-73"],"updated_at":"2026-11-02T14:20:02.290587Z"}],"euvd":[{"id":"EUVD-2026-24023","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.","status":"published","published":"2026-04-21T00:14:59Z","modified":"2026-04-21T19:49:24Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"updated_at":"2026-11-02T19:24:21.512647Z"}],"ghsa":[{"id":"GHSA-4c99-qj7h-p3vg","title":"nbconvert has an Arbitrary File Write via Path Traversal in Cell Attachment Filenames","description":"# Arbitrary File Write via Path Traversal in Cell Attachment Filenames\n\n## Summary\n\nnbconvert allows arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension.\n\n\n## Impact\n\nThis vulnerability allows writing files with arbitrary content to arbitrary filesystem locations, limited only by the permissions of the process running nbconvert. The attacker controls:\n- Full destination path (via `../` traversal)\n- Filename\n- File extension\n- File content\n\n## Patches\n\n- upgrade to nbconvert v7.17.1\n\n## Workarounds\n\ndisable ExtractAttachmentsPreprocessor by setting:\n\n```python\nc. ExtractAttachmentsPreprocessor.enabled = False\n```","status":"published","published":"2026-04-21T17:18:18Z","modified":"2026-04-21T17:18:19Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"cwes":["CWE-22","CWE-73"],"updated_at":"2026-11-02T14:39:55.105822Z"}],"nvd":[{"id":"CVE-2026-39377","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.","status":"published","published":"2026-04-21T01:16:05.937Z","modified":"2026-10-26T22:10:00.163Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium","assessor":"secondary"}],"cwes":["CWE-22","CWE-73"],"updated_at":"2026-11-02T14:12:15.120927Z"}],"osv":[{"id":"CVE-2026-39377","title":"nbconvert has an Arbitrary File Write via Path Traversal in Cell Attachment Filenames","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.","status":"published","published":"2026-04-21T00:14:59.937Z","modified":"2026-10-28T02:30:44.986011454Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"cwes":["CWE-22","CWE-73"],"updated_at":"2026-11-02T15:45:03.040464Z"},{"id":"DEBIAN-CVE-2026-39377","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.","status":"published","published":"2026-04-21T01:16:05.937Z","modified":"2026-10-27T09:47:33.361858872Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"updated_at":"2026-11-02T15:45:54.892385Z"},{"id":"GHSA-4c99-qj7h-p3vg","title":"nbconvert has an Arbitrary File Write via Path Traversal in Cell Attachment Filenames","description":"# Arbitrary File Write via Path Traversal in Cell Attachment Filenames\n\n## Summary\n\nnbconvert allows arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension.\n\n\n## Impact\n\nThis vulnerability allows writing files with arbitrary content to arbitrary filesystem locations, limited only by the permissions of the process running nbconvert. The attacker controls:\n- Full destination path (via `../` traversal)\n- Filename\n- File extension\n- File content\n\n## Patches\n\n- upgrade to nbconvert v7.17.1\n\n## Workarounds\n\ndisable ExtractAttachmentsPreprocessor by setting:\n\n```python\nc. ExtractAttachmentsPreprocessor.enabled = False\n```","status":"published","published":"2026-04-21T17:18:18Z","modified":"2026-09-10T03:51:00.940697146Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"cwes":["CWE-22","CWE-73"],"updated_at":"2026-11-02T15:46:36.782754Z"},{"id":"OESA-2026-2195","title":"python-nbconvert security update","description":"The nbconvert tool, jupyter nbconvert, converts notebooks to various other  formats via Jinja templates. The nbconvert tool allows you to convert an  .ipynb notebook file into various static formats including HTML, LaTeX,  PDF, Reveal JS, Markdown (md), ReStructured Text (rst) and executable script.\r\n\r\nSecurity Fix(es):\n\nThe nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.(CVE-2026-39377)\n\nThe nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. In versions 6.5 through 7.17.0, when `HTMLExporter.embed_images=True`, nbconvert\u0026apos;s markdown renderer allows arbitrary file read via path traversal in image references. A malicious notebook can exfiltrate sensitive files from the conversion host by embedding them as base64 data URIs in the output HTML. nbconvert 7.17.1 contains a fix. As a workaround, do not enable `HTMLExporter.embed_images`; it is not enabled by default.(CVE-2026-39378)","status":"published","published":"2026-05-03T11:11:10Z","modified":"2026-08-18T01:19:51.081258011Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:46.087701Z"},{"id":"OESA-2026-2196","title":"python-nbconvert security update","description":"The nbconvert tool, jupyter nbconvert, converts notebooks to various other  formats via Jinja templates. The nbconvert tool allows you to convert an  .ipynb notebook file into various static formats including HTML, LaTeX,  PDF, Reveal JS, Markdown (md), ReStructured Text (rst) and executable script.\r\n\r\nSecurity Fix(es):\n\nThe nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.(CVE-2026-39377)\n\nThe nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. In versions 6.5 through 7.17.0, when `HTMLExporter.embed_images=True`, nbconvert\u0026apos;s markdown renderer allows arbitrary file read via path traversal in image references. A malicious notebook can exfiltrate sensitive files from the conversion host by embedding them as base64 data URIs in the output HTML. nbconvert 7.17.1 contains a fix. As a workaround, do not enable `HTMLExporter.embed_images`; it is not enabled by default.(CVE-2026-39378)","status":"published","published":"2026-05-03T11:11:10Z","modified":"2026-08-18T01:19:50.947930593Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:46.087701Z"},{"id":"OESA-2026-2215","title":"python-nbconvert security update","description":"The nbconvert tool, jupyter nbconvert, converts notebooks to various other  formats via Jinja templates. The nbconvert tool allows you to convert an  .ipynb notebook file into various static formats including HTML, LaTeX,  PDF, Reveal JS, Markdown (md), ReStructured Text (rst) and executable script.\r\n\r\nSecurity Fix(es):\n\nThe nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.(CVE-2026-39377)\n\nThe nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. In versions 6.5 through 7.17.0, when `HTMLExporter.embed_images=True`, nbconvert\u0026apos;s markdown renderer allows arbitrary file read via path traversal in image references. A malicious notebook can exfiltrate sensitive files from the conversion host by embedding them as base64 data URIs in the output HTML. nbconvert 7.17.1 contains a fix. As a workaround, do not enable `HTMLExporter.embed_images`; it is not enabled by default.(CVE-2026-39378)","status":"published","published":"2026-05-09T11:11:11Z","modified":"2026-08-18T01:19:51.674280541Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:46.087701Z"},{"id":"PYSEC-2026-2229","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.","status":"published","published":"2026-04-21T01:16:05.937Z","modified":"2026-07-13T07:15:37.671269225Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:55.537808Z"},{"id":"UBUNTU-CVE-2026-39377","description":"The nbconvert tool, jupyter nbconvert, converts Jupyter notebooks to various other formats via Jinja templates. Versions 6.5 through 7.17.0 allow arbitrary file writes to locations outside the intended output directory when processing notebooks containing crafted cell attachment filenames. The `ExtractAttachmentsPreprocessor` passes attachment filenames directly to the filesystem without sanitization, enabling path traversal attacks. This vulnerability provides complete control over both the destination path and file extension. Version 7.17.1 contains a patch.","status":"published","published":"2026-04-21T01:16:00Z","modified":"2026-10-17T13:00:02.765405897Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","level":"medium"}],"updated_at":"2026-11-02T16:56:16.686388Z"},{"id":"openSUSE-SU-2026:10603-1","title":"jupyter-nbconvert-7.17.1-1.1 on GA media","description":"These are all security issues fixed in the jupyter-nbconvert-7.17.1-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-04-22T00:00:00Z","modified":"2026-04-23T08:45:15.674585Z","updated_at":"2026-11-02T16:58:38.415593Z"}]}}
