NLTK has a Zip Slip Vulnerability
Critical10.0CVE-2025-14009 · Published Feb 18, 2026 · updated Sep 10, 2026
A critical vulnerability exists in the NLTK downloader component of nltk/nltk, affecting all versions. The _unzip_iter function in nltk/downloader.py uses zipfile.extractall() without performing path validation or security checks. This allows attackers to craft malicious zip packages that, when downloaded and extracted by NLTK, can execute arbitrary code. The vulnerability arises because NLTK assumes all downloaded packages are trusted and extracts them without validation. If a malicious package contains Python files, such as __init__.py, these files are executed automatically upon import, leading to remote code execution. This issue can result in full system compromise, including file system access, network access, and potential persistence mechanisms.
Affected versions
| Package | Affected | Fixed in |
|---|---|---|
| nltk PyPI | < 3.9.3 | 3.9.3 |
Details and references
- CVSS 3.0
- CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
- Severity from
- GitHub (reviewed advisory)
- Weakness
- CWE-94
- Also known as
- CVE-2025-14009, PYSEC-2026-96
- nvd.nist.gov/vuln/detail/CVE-2025-14009
- github.com/nltk/nltk/pull/3468
- github.com/nltk/nltk/commit/1056b323af6462455571302e766b67cf300aea18
- github.com/nltk/nltk
- github.com/nltk/nltk/blob/4154eb85e832f266660a09286c7e37e308292284/ChangeLog#L1
- github.com/pypa/advisory-database/tree/main/vulns/nltk/PYSEC-2026-96.yaml
- huntr.com/bounties/49ecbc02-054e-4470-b2e0-b267936cc4e4
More NLTK advisories
All NLTK| Date | Advisory | Severity | Fixed in |
|---|---|---|---|
| Mar 19 | Unauthenticated remote shutdown in nltk.app.wordnet_app | High7.5 | 3.9.4 |
| Mar 18 | Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') in nltk | Medium6.1 | 3.9.4 |
| Mar 18 | Natural Language Toolkit (NLTK) has unbounded recursion in JSONTaggedDecoder.decode_obj() may cause DoS | Medium | 3.9.4 |
| Mar 9 | NLTK has Arbitrary File Read via Absolute Path Input in nltk.util.filestring() | High8.6 | 3.9.3 |
| Mar 5 | NLTK: code execution | Critical10.0 | 3.9.3 |
| Mar 4 | NLTK has a Path Traversal issue | High8.6 | No fix yet |