Skip to main content

NLTK EUVDEUVD-2026-67074

| CVE-2026-81724 MEDIUM
Uncontrolled Recursion (CWE-674)
2026-08-27 VulnCheck GHSA-cw6x-m8jw-qmrh GHSA-pf76-q698-37v8 PYSEC-2026-3739
6.9
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify application endpoint accepting feature structure input
  2. Delivery
    Craft payload with deeply nested brackets
  3. Exploit
    Submit payload over network without authentication
  4. Execution
    FeatStructReader recurses without depth check
  5. Persist
    Python recursion limit exceeded
  6. Impact
    Unhandled RecursionError crashes application

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Recursion depth limits
Exploitation Conditions

Exploitation requires that the target application passes user-controlled input directly to nltk.featstruct.FeatStructReader (or a feature grammar parser that internally invokes it) without enforcing a nesting-depth limit. Applications that use NLTK exclusively for tokenization, tagging, stemming, or other components unrelated to feature structures are NOT affected. The CVSS 4.0 vector (PR:N/UI:N) confirms no authentication or user interaction is required once the parsing endpoint is reachable over the network. Limiting factors include: the application must specifically use the FeatStructReader or feature grammar functionality; the input pathway must be reachable by untrusted users; and the application must not already catch RecursionError exceptions. Deployments where feature-structure parsing is only invoked on internally generated or pre-validated input are not exploitable.

Impact

The CVSS 4.0 base score of 6.9 reflects network reachability with no authentication, complexity, or user-interaction barrier, but constrains impact to low vulnerable-system availability (VA:L) with no confidentiality or integrity effect (VC:N/VI:N) and no subsequent-system impact (SC:N/SI:N/SA:N). This scoring is consistent with a purely application-level crash that does not escalate privileges or expose data. No EPSS score was provided in the input data, so exploitation probability cannot be quantified numerically. The absence of a CISA KEV listing and the lack of identified public exploit code further support treating this as a lower-urgency issue compared to actively weaponized CVEs. Real-world exploitability is conditional: only applications that expose NLTK feature-structure parsing to untrusted external input are reachable, which limits the realistic attacker population considerably. The vulnerability is trivially exploitable once the attack surface is confirmed - crafting a deeply nested payload requires no special knowledge - but finding and targeting vulnerable deployments requires identifying NLP-specific endpoints, reducing opportunistic risk. Overall, this warrants prompt patching in any deployment that accepts external feature grammar input, but does not require emergency incident response for offline or authenticated-only pipelines.

Exploit ScenarioDerived

An attacker submits a crafted string such as [f1=[f2=[f3=[...]]]] with hundreds or thousands of nested bracket levels to any HTTP endpoint or input field that passes the value to nltk.featstruct.FeatStructReader. The parser recurses without a depth guard, rapidly exceeding Python's recursion limit, and the resulting unhandled RecursionError terminates the worker process or application thread. If the application does not restart workers automatically, this constitutes persistent denial of service achievable with a single small request.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 27, 2026

Uncontrolled recursion in NLTK's FeatStructReader component (all versions before 3.10.3) enables unauthenticated remote attackers to crash any Python application that parses user-supplied feature structures or feature grammars. Attackers submit trivially crafted payloads containing deeply nested brackets, exhausting Python's call stack and raising an unhandled RecursionError that terminates the application process. No active exploitation has been confirmed by CISA KEV, and no public exploit code has been identified at time of analysis; a vendor patch is available in NLTK 3.10.3.

RemediationAI

The primary fix is to upgrade NLTK to version 3.10.3 or later, as confirmed by the vendor advisory at https://github.com/nltk/nltk/security/advisories/GHSA-cw6x-m8jw-qmrh. Install the patched version via pip: pip install --upgrade nltk>=3.10.3. If an immediate upgrade is not feasible, a compensating control is to reject or pre-validate user-supplied feature-structure input before passing it to FeatStructReader - specifically by enforcing a maximum nesting depth (e.g., counting bracket depth and rejecting input exceeding a safe threshold such as 20 levels) before parsing. Alternatively, wrapping FeatStructReader calls in a try/except block to catch RecursionError prevents application crashes but does not fix the root cause and may mask other recursion-related failures. Disabling user-supplied feature grammar parsing entirely is the most effective workaround where the feature is not required. No side effects of upgrading to 3.10.3 are noted in available references.

Affected VersionsENISA

nltk 0 <3.10.3

Affected Packages

pypi nltk fix: 3.10.3

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

NLTK (Natural Language Toolkit) is a widely used Python library for computational linguistics and NLP tasks. The vulnerable component, nltk.featstruct.FeatStructReader, is responsible for parsing feature structures - typed attribute-value matrices used in unification grammars and formal linguistics. The root cause is CWE-674 (Uncontrolled Recursion): the parser does not enforce a maximum nesting depth on input, so adversarially deep bracket nesting drives recursive calls beyond Python's default stack limit (typically 1000 frames), raising an unhandled RecursionError. The affected CPE is cpe:2.3:a:nltk:nltk:*:*:*:*:*:*:*:* covering all NLTK releases prior to 3.10.3 across all platforms where Python runs.

Know when Nltk gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 6.9 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
vuln.today AI 5.3 MEDIUM

Network-reachable with no authentication or user interaction; impact is limited to low application availability - no confidentiality, integrity, or scope-change effect applies.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
SUSE MEDIUM
Red Hat 7.5 HIGH

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Aug 27, 2026 - 18:02 EUVD

DescriptionCVE.org

NLTK before 3.10.3 contains an uncontrolled recursion vulnerability in nltk.featstruct.FeatStructReader that allows unauthenticated attackers to cause a denial of service by supplying deeply nested feature-structure input. Attackers can craft trivial payloads with nested brackets that exceed Python's recursion limit and raise an unhandled RecursionError, crashing applications that parse user-supplied feature structures or feature grammars.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 6,223 pypi packages depend on nltk (3,096 direct, 3,208 indirect)

Ecosystem-wide dependent count for version 3.10.3.

Threat Intelligence Overview

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Medium
widely used Python NLP library, primarily academic and research deployments
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

54
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Nltk

View all
CVE-2026-79657 CRITICAL POC
9.3 Aug 25

Arbitrary code execution in the Natural Language Toolkit (NLTK) before 3.10.3 allows attackers to bypass the library's p

CVE-2026-78683 CRITICAL POC
9.4 Aug 25

Arbitrary code execution in NLTK (Natural Language Toolkit) through 3.9.4 allows attackers to run Python code when a vic

CVE-2025-14009 HIGH POC
8.8 Feb 18

Arbitrary code execution in the NLTK (Natural Language Toolkit) Python library affects all versions through its data dow

CVE-2026-63312 HIGH POC
8.7 Aug 22

StreamBackedCorpusView in NLTK before 3.10.0 allows arbitrary local file reads by calling Python's builtins.open() direc

CVE-2026-62384 HIGH POC
8.7 Aug 22

Symlink-based path traversal in NLTK's FramenetCorpusReader before version 3.10.2 permits attackers with write access to

CVE-2026-66393 HIGH POC
8.7 Aug 22

Unbounded recursion in NLTK's JSONTaggedDecoder.decode_obj() (nltk/jsontags.py) allows unauthenticated remote attackers

CVE-2026-62388 HIGH POC
8.7 Aug 22

Path traversal and pickle deserialization protections in NLTK before 3.10.0 are effectively disabled by default - pathse

CVE-2026-78681 HIGH POC
8.7 Aug 25

XML Entity Expansion (Billion Laughs) in NLTK before 3.10.3 allows unauthenticated remote attackers to cause denial of s

CVE-2026-78682 HIGH POC
8.7 Aug 25

Server-side request forgery in NLTK before 3.10.3 allows unauthenticated remote attackers to reach internal HTTP service

CVE-2026-70626 HIGH POC
8.6 Aug 22

Symlink escape in NLTK's CorpusReader.open() allows local attackers to read arbitrary files outside the designated corpu

CVE-2026-62385 HIGH POC
8.2 Aug 22

Path traversal in NLTK's FramenetCorpusReader and NKJPCorpusReader (all versions before 3.10.0) enables unauthenticated

CVE-2021-43854 HIGH POC
7.5 Dec 23

NLTK (Natural Language Toolkit) is a suite of open source Python modules, data sets, and tutorials supporting research a

Vendor StatusVendor

SUSE

Severity: Moderate

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy