CVE-2026-62384: NLTK FramenetCorpusReader symlink sandbox bypass

CVE-2026-62384 · Severity: high · CVSS 7.5 · Published 2026-08-22

NLTK's FramenetCorpusReader is a library component for parsing linguistic corpus data. An attacker who can place a symlink inside a shared or multi-tenant corpus directory can exploit a gap in the path validation logic to read arbitrary XML files outside the intended corpus root, exposing sensitive data to other users or applications on the system.

Technologies: nltk (PyPI). Vendors: PyPI.

Quick answers

Is CVE-2026-62384 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-62384 being exploited in the wild.
How severe is CVE-2026-62384?
High severity, with a CVSS score of 7.5, published 22 August 2026.
Which products and versions are affected?
nltk (PyPI) >= 3.10.0, < 3.10.2, ECOSYSTEM:introduced=3.10.0,fixed=3.10.2.
Is there a fix for CVE-2026-62384?
Yes. nltk (PyPI): upgrade to 3.10.2 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-62384 attacked?
It is attacked with local access or from the adjacent network, in a software library.
Am I affected by CVE-2026-62384?
Check whether you run 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.2 or later
    pip install "nltk>=3.10.2"

Technical details

The vulnerability is a symlink-based sandbox bypass in the FramenetCorpusReader class (nltk/corpus/reader/framenet.py). The underlying issue is that a prior fix (for CVE-2026-54292) added _reject_unsafe_path_component() to block path traversal patterns (/, \, .., drive letters), but the three vulnerable call sites (frame_by_name, _lu_file, doc) still use self.abspath() for lexical path joining rather than the symlink-resolving, scope-checked CorpusReader.open() method used elsewhere. A symlink placed in a corpus subdirectory with a name containing no separators passes the guard and allows reading arbitrary files when followed. No user interaction or special preconditions are required beyond access to place a symlink in a shared corpus directory—a scenario explicitly named in NLTK's threat model. The fix is to route these three call sites through CorpusReader.open() or pass required_root to validate_path() directly, as the related NKJPCorpusReader already does.

Affected products

  • NLTK NLTK >= 3.10.0, < 3.10.2

Identifiers

  • CVE-2026-62384
  • GHSA-f833-7jw8-xwrv
  • PYSEC-2026-3789

Timeline

  • 2026-09-08: disclosed: GHSA-f833-7jw8-xwrv published
  • 2026-09-08: patched: Fixed in NLTK 3.10.2 (commit 736d3212a47de2005b85b785dde6720556d3925d)

References

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