Register for the AI for Security Summit: Join Figma, Perplexity & Wiz

CVE-2026-64847
Python vulnerability analysis and mitigation

Overview

CVE-2026-64847 is a denial-of-service vulnerability in AnyIO, a high-level asynchronous concurrency and networking framework for Python, titled "AnyIO process-pool workers can block indefinitely on undrained stderr." It affects all versions of the anyio pip package prior to 4.14.2. The vulnerability was originally published on July 7, 2026, and added to the GitHub Advisory Database on September 18, 2026. It carries a CVSS v4.0 base score of 6.8 (Medium) (Github Advisory).

Technical details

The root cause is classified as CWE-770 (Allocation of Resources Without Limits or Throttling). AnyIO's to_process.run_sync() spawns process-pool worker subprocesses with stderr connected to a pipe, but the parent process never drains that pipe. While the worker correctly redirects stdin and stdout to /dev/null to protect its IPC protocol, stderr is left connected to the undrained pipe — contradicting the documented behavior that all three standard streams are redirected. If worker code writes enough data to sys.stderr (e.g., more than the typical 64 KiB OS pipe buffer), the write blocks, preventing the worker from ever sending its stdout protocol response, which causes the awaiting to_process.run_sync() call in the parent to hang indefinitely. The fix, applied in commit f1b7301, adds a single line redirecting sys.stderr to os.devnull within the worker process (Github PR #1207, Github Commit).

Impact

Successful exploitation causes an indefinite deadlock in the affected process-pool worker and the awaiting coroutine, resulting in a denial of service against the application's availability. There is no impact on confidentiality or integrity — the vulnerability is purely an availability issue. Applications that execute untrusted or faulty worker code capable of generating substantial stderr output are most at risk, as a blocked worker can exhaust the process pool and render the application unresponsive (Github Advisory).

Exploitability

No public proof-of-concept exploit code or in-the-wild exploitation has been reported. The EPSS score is 0.0, and the NVD SSVC assessment classifies exploitation as "none" and the vulnerability as not automatable (Github Advisory). The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Exploitation requires local access and low privileges — specifically, the ability to supply or influence worker code that writes large volumes of data to sys.stderr.

Exploitation steps

  1. Identify a target application: Locate an application using AnyIO versions prior to 4.14.2 that calls to_process.run_sync() with worker functions whose stderr output can be influenced by attacker-controlled input.
  2. Craft a stderr-flooding payload: Prepare or influence the worker function to write a large volume of data (well exceeding the OS pipe buffer, typically 64 KiB) to sys.stderr. For example, a payload such as sys.stderr.write('x' * 1024 * 1024); sys.stderr.flush() within the worker function would suffice.
  3. Trigger the worker execution: Cause the application to invoke to_process.run_sync() with the crafted or influenced worker function, either by submitting malicious input or exploiting a code path that passes attacker-influenced data to stderr.
  4. Induce deadlock: The worker's stderr write fills the undrained pipe buffer and blocks. The worker never sends its stdout protocol response, causing the parent's run_sync() awaitable to hang indefinitely, effectively deadlocking that worker slot.
  5. Exhaust the process pool: Repeat the trigger to fill all available worker slots, rendering the application's process pool fully blocked and causing a complete denial of service (Github Advisory, Github PR #1207).

Indicators of compromise

  • Process Behavior: AnyIO worker subprocesses that remain in a blocked/sleeping state indefinitely without completing their assigned task; parent asyncio or Trio event loop tasks stuck awaiting to_process.run_sync() with no timeout.
  • Logs: Application logs showing to_process.run_sync() calls that never return or time out; absence of expected task completion log entries from process-pool workers.
  • System: Elevated number of zombie or hung child processes associated with the Python application; OS-level pipe buffers for the application's worker subprocesses consistently at capacity (observable via /proc/<pid>/fd on Linux).

Mitigation and workarounds

Upgrade the anyio pip package to version 4.14.2 or later, which redirects sys.stderr to os.devnull in worker processes, matching the documented behavior and eliminating the deadlock (Github Release 4.14.2). As a temporary workaround for those unable to upgrade immediately, explicitly closing sys.stderr at the start of the target function passed to to_process.run_sync() will prevent the deadlock by ensuring writes do not block on the pipe (Github Advisory). Additionally, avoid passing untrusted or unvalidated code as worker functions to to_process.run_sync() until the patch is applied.

Additional resources


SourceThis report was generated using AI

Related Python vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2025-66455CRITICAL9.8
  • Python logoPython
  • lmdeploy
NoYesSep 18, 2026
CVE-2026-63374CRITICAL9.3
  • Python logoPython
  • airflow-core-2
NoYesSep 18, 2026
CVE-2026-59163CRITICAL9.1
  • Python logoPython
  • mnemosyne-memory
NoYesSep 18, 2026
CVE-2026-33625HIGH8.8
  • Python logoPython
  • lmdeploy
NoYesSep 18, 2026
CVE-2026-64847MEDIUM6.8
  • Python logoPython
  • airflow-3
NoYesSep 18, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management