CVE-2026-109956: NLTK WekaClassifier path traversal in model validation

CVE-2026-109956 · Severity: high · CVSS 7 · Published 2026-10-13

NLTK is a widely-used natural language processing library. The WekaClassifier component fails to validate file paths supplied by callers, allowing attackers to read arbitrary files or write files outside the intended sandbox directory. An attacker controlling the model path parameter can corrupt files on the system or exfiltrate data via a file-existence oracle.

Technologies: nltk (PyPI). Vendors: NLTK Project, PyPI.

Quick answers

Is CVE-2026-109956 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-109956 being exploited in the wild.
How severe is CVE-2026-109956?
High severity, with a CVSS score of 7, published 13 October 2026.
Which products and versions are affected?
NLTK Project NLTK 3.10.3 and earlier; nltk (PyPI) ECOSYSTEM:introduced=0,fixed=3.10.4.
Is there a fix for CVE-2026-109956?
Yes. nltk (PyPI): upgrade to 3.10.4 or later. Until then: When possible, run NLTK with pathsec.ENFORCE=False disabled, though this weakens security boundaries for all path-based operations. Alternatively, restrict calls to WekaClassifier to trusted code paths and avoid exposing model_filename or model parameters to untrusted workflow input. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-109956 attacked?
It is attacked over the network.
Am I affected by CVE-2026-109956?
Check whether you run NLTK Project NLTK or nltk (PyPI) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • nltk (PyPI): upgrade to 3.10.4 or later
    pip install "nltk>=3.10.4"

When possible, run NLTK with pathsec.ENFORCE=False disabled, though this weakens security boundaries for all path-based operations. Alternatively, restrict calls to WekaClassifier to trusted code paths and avoid exposing model_filename or model parameters to untrusted workflow input.

Technical details

WekaClassifier.train() and WekaClassifier._classify_many() pass caller-controlled model file paths directly to the weka Java VM via command-line arguments (-d and -l flags) without using NLTK's pathsec validation functions. This bypasses the path containment enforcement that should restrict file access to allowed NLTK data roots. The vulnerability enables arbitrary file writes (via -d flag) and arbitrary file reads via parse oracles (via -l flag) when pathsec.ENFORCE is True (the default).

Affected products

  • NLTK Project NLTK 3.10.3 and earlier

Identifiers

  • CVE-2026-109956
  • GHSA-j456-xh4h-cpf2

Timeline

  • 2026-09-29: disclosed: GHSA advisory published
  • 2026-10-13: advisory: CVE-2026-109956 published in NVD

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.