CVE-2026-33231
High · 7.5CVSS
7.5
EPSS
1.5%
Published
Mar 20, 2026
CISA due date
—
Cloudanix analysis
An unsecured language-toolkit web helper can be turned off by anyone who can reach it on the network, interrupting research or development work until someone restarts it.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Trivial
- Impact
- Denial Of Service
- Component
- Library
- Class
- Authentication Bypass
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
In NLTK 3.9.3 and earlier, the WordNet Browser HTTP server started via nltk.app.wordnet_app accepts an unauthenticated HTTP GET that immediately terminates the process with os._exit(0). Confidentiality and integrity of data are not affected; the impact is complete loss of availability of that local browser process. The service has no authentication in its default mode, so any network-reachable instance can be shut down without credentials.
Why it matters to the business
Teams that run the WordNet Browser as a shared or network-reachable helper for NLP research, teaching, or development can lose that service instantly, interrupting workflows until it is restarted. This is not listed in CISA KEV and is not associated with ransomware campaigns; exploit maturity is none. EPSS is modest (~0.015) but rose about 67% over 30 days, so exposure should still be treated as an availability risk for any host that binds the browser beyond localhost. Downstream use of NLTK is common in Python NLP stacks, so unpatched developer and lab environments remain the primary operational concern rather than typical internet-facing production apps.
How an attack unfolds
An attacker who can reach the WordNet Browser HTTP port sends a single unauthenticated request that the application treats as a privileged shutdown command. Because default mode does not require authentication or a confirmed local operator, the server process exits immediately. The result is a remote denial of service of the browser only; the attacker does not gain code execution, data access, or persistence. No named threat actors are reported as exploiting this CVE.
How to fix it
Upgrade NLTK past 3.9.3 so that it includes commit bbaae83db86a0f49e00f5b0db44a7254c268de9b (or a later release that contains that fix). Until packages are updated, do not start nltk.app.wordnet_app in default network-exposed mode; bind it only to loopback if it must run, restrict access with host firewalls, and treat the shutdown control as an authenticated, local-only operation. Inventory Python environments, notebooks, and teaching images that pin nltk<=3.9.3 and replace those pins.
How to confirm the fix worked
Confirm installed nltk is newer than 3.9.3 and that the WordNet Browser code matches the patched commit. Verify the service, if still used, is not listening on non-loopback interfaces. After upgrade, confirm unauthenticated shutdown requests no longer terminate the process and that only intended local operators can stop the server. Search estate-wide for running wordnet_app processes and outdated nltk wheels in virtualenvs, containers, and CI images.
Typical attack path
- Identify a host running the NLTK WordNet Browser HTTP server in default (unauthenticated) mode and reachable on the network.
- Send an unauthenticated HTTP request to the server's documented shutdown path.
- The process calls os._exit(0) and terminates, denying service until an operator restarts it.
- Optionally repeat after restart to keep the helper unavailable.
How to detect it
This issue causes process death, not malware implant, so look for availability artifacts rather than post-exploitation implants. Review HTTP access logs and reverse-proxy logs for requests to the WordNet Browser whose path or query indicates a shutdown command, especially from non-local clients. Correlate with unexpected exit of Python processes running nltk.app.wordnet_app, systemd/journal or container restart events, and brief listeners on the WordNet Browser port disappearing. There are no reported APT campaigns; treat matching logs as likely opportunistic or accidental DoS. Network captures showing a single unauthenticated GET followed by TCP close and process termination are consistent with abuse.
- GET /SHUTDOWN%20THE%20SERVER
- SHUTDOWN THE SERVER
- nltk.app.wordnet_app
- os._exit(0)
What your security team should do
- Patch or upgrade NLTK above 3.9.3 in all developer, lab, and CI images that include the toolkit.
- Ensure WordNet Browser is not reachable from untrusted networks; restrict to localhost or disable it if unused.
- Hunt for historical unauthenticated shutdown requests against WordNet Browser listeners even though KEV and ransomware flags are false.
- Add nltk version and wordnet_app process checks to vulnerability and software-composition scans given NLTK's prevalence in NLP ecosystems.
- Reassess exposure if EPSS continues to rise, but do not treat this as a production remote-code-execution emergency.
The record
NLTK (Natural Language Toolkit) is a suite of open source Python modules, data sets, and tutorials supporting research and development in Natural Language Processing. In versions 3.9.3 and prior, `nltk.app.wordnet_app` allows unauthenticated remote shutdown of the local WordNet Browser HTTP server when it is started in its default mode. A simple `GET /SHUTDOWN%20THE%20SERVER` request causes the process to terminate immediately via `os._exit(0)`, resulting in a denial of service. Commit bbaae83db86a0f49e00f5b0db44a7254c268de9b patches the issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Chainguard | apache-beam-python-3.11-sdk | 0 | 2.71.0-r8 |
| Chainguard | apache-beam-python-3.12-sdk | 0 | 2.71.0-r2 |
| Chainguard | apache-beam-python-3.13-sdk | 0 | 2.71.0-r2 |
| Chainguard | kubeflow-pipelines-visualization-server | 0 | 2.16.0-r3 |
| Chainguard | label-studio | 0 | 1.23.0-r1 |
| Chainguard | open-webui | 0 | 0.8.12-r2 |
| Chainguard | py3-nltk | 0 | 3.9.4-r0 |
| Chainguard | py3.11-nltk | 0 | 3.9.4-r0 |
| Chainguard | py3.12-nltk | 0 | 3.9.4-r0 |
| Chainguard | py3.13-nltk | 0 | 3.9.4-r0 |
| Wolfi | kubeflow-pipelines-visualization-server | 0 | 2.16.0-r3 |
| Wolfi | open-webui | 0 | 0.8.12-r2 |
| Wolfi | py3-nltk | 0 | 3.9.4-r0 |
| Wolfi | py3.11-nltk | 0 | 3.9.4-r0 |
| Wolfi | py3.12-nltk | 0 | 3.9.4-r0 |
| Wolfi | py3.13-nltk | 0 | 3.9.4-r0 |
Related vulnerabilities
- CVE-2026-34073 cryptography is a package designed to expose cryptographic primitives and recipes to… Also affects apache-beam-python-3.11-sdk
- CVE-2026-25645 Requests is a HTTP library. Also affects apache-beam-python-3.11-sdk
- CVE-2026-4539 A security flaw has been discovered in pygments up to 2.19.2. Also affects apache-beam-python-3.11-sdk
- CVE-2026-33230 NLTK (Natural Language Toolkit) is a suite of open source Python modules, data sets, and… Also affects apache-beam-python-3.11-sdk
- CVE-2026-33186 gRPC-Go is the Go language implementation of gRPC. Also affects apache-beam-python-3.11-sdk
- CVE-2026-26007 cryptography is a package designed to expose cryptographic primitives and recipes to… Also affects apache-beam-python-3.11-sdk
- CVE-2026-0994 A denial-of-service (DoS) vulnerability exists in google.protobuf.json_format.ParseDict()… Also affects apache-beam-python-3.11-sdk
- CVE-2026-24049 wheel is a command line tool for manipulating Python wheel files, as defined in PEP 427. Also affects apache-beam-python-3.11-sdk