{"id":"CVE-2026-126303","kind":"vulnerability","aliases":["CVE-2026-126303"],"related":[],"title":"NLTK: parser has no time limit, so crafted grammars can pin CPU","description":"NLTK before 3.10.4 contains an uncontrolled resource consumption vulnerability in SteppingRecursiveDescentParser.parse() that lacks any max_time deadline or step limit. Attackers influencing the grammar can supply an ambiguous self-embedding grammar and short token input to force unbounded top-down search, pinning CPU cores and exhausting worker pools.","summary":"NLTK's SteppingRecursiveDescentParser.parse() has no deadline or step limit, so it can run without bound on certain inputs. An attacker who can influence the grammar and token input can pin CPU cores and exhaust worker pools, causing denial of service.","severity":"high","cvss":8.7,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"nltk","fixed":[],"affected":"","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["nltk","package","python"],"not_affected_if":["no-untrusted-grammars","parser-not-used"],"how_to_check":"- Check the installed NLTK version with `pip show nltk` and compare it against the fixed release.\n- Search your code for calls to `SteppingRecursiveDescentParser` or `parse()` on grammars that come from users or other untrusted input.","fix":"- NLTK: move to `3.10.4` or later, per the advisory description (before 3.10.4 is affected).","status":"open","published_at":"2026-11-13T10:17:35+00:00","first_seen_at":"2026-11-13T10:47:15+00:00","triaged_at":"2026-11-13T10:50:27+00:00","updated_at":"2026-11-13T10:50:27+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-13T10:50:27Z","model":"claude-haiku-5-5","output":{"fix":"- NLTK: move to `3.10.4` or later, per the advisory description (before 3.10.4 is affected).","reach":"network","title":"NLTK: parser has no time limit, so crafted grammars can pin CPU","impact":"medium","summary":"NLTK's SteppingRecursiveDescentParser.parse() has no deadline or step limit, so it can run without bound on certain inputs. An attacker who can influence the grammar and token input can pin CPU cores and exhaust worker pools, causing denial of service.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","nltk"],"confidence":0.6,"fix_status":"available","needs_auth":"unknown","worst_case":"Service workers stall and CPU cores are pinned by parsing","analyst_note":"","how_to_check":"- Check the installed NLTK version with `pip show nltk` and compare it against the fixed release.\n- Search your code for calls to `SteppingRecursiveDescentParser` or `parse()` on grammars that come from users or other untrusted input.","plain_action":"","product_name":"nltk","needs_analyst":false,"not_affected_if":["no-untrusted-grammars","parser-not-used"],"who_is_affected":"Applications that use NLTK's SteppingRecursiveDescentParser and let outside users or data supply the grammar or token input are exposed. Code that only parses grammars the team writes itself, or that never uses this parser, can skip it.","user_interaction":"no","product_ecosystem":"pypi","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000736,"input_tokens":4614,"output_tokens":550,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-126303':15A,18A '-2026':14A,17A '3.10.4':65C 'ambigu':90C 'attack':42B,83C 'bound':37B 'caus':59B 'certain':39B 'consumpt':70C 'contain':66C 'core':54B,108C 'cpu':12A,53B,107C 'craft':8A 'cve':13A,16A 'deadlin':28B,79C 'denial':60B 'embed':93C 'exhaust':56B,110C 'forc':100C 'grammar':9A,47B,86C,94C 'influenc':45B,84C 'input':40B,50B,98C 'lack':75C 'limit':6A,31B,82C 'max':77C 'nltk':1A,19A,20B,23B,63C 'packag':21B 'parser':2A 'pin':11A,52B,106C 'pool':58B,112C 'python':22B 'resourc':69C 'run':35B 'search':105C 'self':92C 'self-embed':91C 'servic':62B 'short':96C 'step':30B,81C 'steppingrecursivedescentparser.parse':25B,73C 'suppli':88C 'time':5A,78C 'token':49B,97C 'top':103C 'top-down':102C 'unbound':101C 'uncontrol':68C 'vulner':71C 'without':36B 'worker':57B,111C","nicknames":[],"mitigations":[],"who_affected":"Applications that use NLTK's SteppingRecursiveDescentParser and let outside users or data supply the grammar or token input are exposed. Code that only parses grammars the team writes itself, or that never uses this parser, can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":["nltk"],"ptokens":["nltk"],"labels":["high","nltk","package","pypi","python"],"campaign_type":null,"search_a":"'-126303':15A,18A '-2026':14A,17A 'cpu':12A 'craft':8A 'cve':13A,16A 'grammar':9A 'limit':6A 'nltk':1A,19A 'parser':2A 'pin':11A 'time':5A","search_b":"'attack':42B 'bound':37B 'caus':59B 'certain':39B 'core':54B 'cpu':53B 'deadlin':28B 'denial':60B 'exhaust':56B 'grammar':47B 'influenc':45B 'input':40B,50B 'limit':31B 'nltk':20B,23B 'packag':21B 'pin':52B 'pool':58B 'python':22B 'run':35B 'servic':62B 'step':30B 'steppingrecursivedescentparser.parse':25B 'token':49B 'without':36B 'worker':57B","search_c":"'3.10.4':65C 'ambigu':90C 'attack':83C 'consumpt':70C 'contain':66C 'core':108C 'cpu':107C 'deadlin':79C 'embed':93C 'exhaust':110C 'forc':100C 'grammar':86C,94C 'influenc':84C 'input':98C 'lack':75C 'limit':82C 'max':77C 'nltk':63C 'pin':106C 'pool':112C 'resourc':69C 'search':105C 'self':92C 'self-embed':91C 'short':96C 'step':81C 'steppingrecursivedescentparser.parse':73C 'suppli':88C 'time':78C 'token':97C 'top':103C 'top-down':102C 'unbound':101C 'uncontrol':68C 'vulner':71C 'worker':111C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-10-26T14:15:37+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-126303","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-126303","severity":null,"published_at":"2026-11-13T10:17:35+00:00","modified_at":"2026-11-13T10:17:35+00:00","first_seen_at":"2026-11-13T10:47:15+00:00","fetched_at":"2026-11-13T10:47:15+00:00","note":null}],"documents":[{"id":144935,"url":"https://github.com/nltk/nltk/security/advisories/GHSA-8fx7-8jr8-84rv","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-26T14:15:37+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":144936,"url":"https://www.vulncheck.com/advisories/nltk-before-3.10.4-denial-of-service-via-steppingrecursivedescentparser-parse","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}