HIGHCVSS v3.1 7.5Vulnerability

CVE-2026-126303

## Summary `nltk.parse.recursivedescent.SteppingRecursiveDescentParser.parse()` performs an unbounded top-down search over ambiguous or self-embedding context-free grammars with no wall-clock or step limit. An actor who can influence the grammar and supply a short input to a caller that uses this parser can force a single `parse()` call to pin a CPU core indefinitely, producing a denial of service. The related base class `RecursiveDescentParser` gained a `max_time` wall-clock deadline, but the stepping subclass drives its own step loop and never arms or consults that deadline, and its constructor does not accept a `max_time` parameter, so the guard cannot be enabled on this path. ## Root Cause `RecursiveDescentParser` bounds its recursive search inside `_parse`: it arms a wall-clock deadline on the first step and raises `TimeoutError` once `max_time` (default 5.0 seconds) is exceeded. `SteppingRecursiveDescentParser` was designed for interactive single-stepping and overrides both `parse()` and `_parse`. Its `parse()` runs `initialize()` followed by a `while self.step() is not None` loop that never enters the guarded base `_parse`. Its `_parse` override is a state-capturing stub that records history and returns a sentinel, and it never references the inherited `self._parse_deadline` or `self._max_time`. Its `__init__` signature omits `max_time` entirely, so a caller cannot enable or tighten a bound. The security invariant that a single parse must terminate within a bounded time is therefore never enforced on this parser. ```text Affected component: nltk.parse.recursivedescent.SteppingRecursiveDescentParser - parse() nltk/parse/recursivedescent.py:428-433 (drives its own step loop, no bound armed or checked) - _parse() nltk/parse/recursivedescent.py:643-668 (stub override; never consults self._parse_deadline / self._max_time) - __init__() nltk/parse/recursivedescent.py:410-418 (signature (self, grammar, trace=0); no max_time parameter) Base guard for

Properties

Severity
high
Summary
NLTK: Unbounded CPU consumption in SteppingRecursiveDescentParser.parse() with ambiguous or self-embedding grammars
Nvd fetched at
2026-11-14T00:40:25.638091+00:00
Epss score
0.00488
Cvss severity
HIGH
Cvss score
7.5
Retrieved at
2026-11-14T00:51:03+00:00
Ghsa published
2026-11-13T21:02:19Z
Source url
https://github.com/advisories/GHSA-8fx7-8jr8-84rv
Ghsa updated
2026-11-13T21:02:20Z
Ghsa id
GHSA-8fx7-8jr8-84rv
Last source
FIRST EPSS
Score
7.5
Cvss version
3.1
Cve id
CVE-2026-126303
Cvss vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
First seen by Signal
2026-11-13T17:31:47+00:00
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Published at
2026-11-13T10:17:35.457

Related Entities (4)

AFFECTS (1)

→[Software]pip/nltk

VULNERABLE_TO (1)

←[Software]pip/nltk

Related research

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-126303 (CVSS v3.1 7.5) — Ninja Signal Threat Intelligence | Ninja Signal