Description
AnyIO is a high level asynchronous concurrency and networking framework that works on top of either Trio or asyncio. In 4.14.0, AnyIO accepts the POSIX extra_groups argument in anyio.run_process() and anyio.open_process(), but open_process() forwards the group argument to the backend instead of extra_groups. A caller that supplies extra_groups=[] to clear inherited supplementary groups can therefore launch a child that retains the parent process groups, undermining a privilege-dropping boundary. If group is also supplied, the integer group value is passed where an iterable of supplementary groups is expected and the launch can fail with TypeError. This issue affects POSIX applications that rely on AnyIO subprocess helpers to launch less-privileged child processes. This issue is fixed in version 4.14.2.
Published: 2026-09-18
Score: 7 High
EPSS: < 1% Very Low
KEV: No
Impact: Privilege Escalation via Retained Supplementary Groups
Action: Immediate Patch
AI Analysis

Impact

The flaw in AnyIO version 4.14.0 to 4.14.1 causes the subprocess helpers anyio.run_process() and anyio.open_process() to ignore the POSIX extra_groups argument that is intended to drop inherited supplementary group memberships. When a caller supplies extra_groups=[] to clear all groups, the child process unexpectedly inherits all of the parent’s supplementary groups, thereby preserving privileged group memberships that should have been removed. This breaks the expected privilege‑dropping boundary and can allow a less‑privileged or untrusted application to retain higher privilege levels. The error can also surface a TypeError if an integer group is passed where an iterable of supplementary groups is expected, potentially halting process creation.

Affected Systems

Any Python application that imports the agronholm anyio package and uses anyio.run_process() or anyio.open_process() on POSIX platforms is impacted when the library version is between 4.14.0 and 4.14.1 inclusive. The issue is resolved in anyio release 4.14.2 and later.

Risk and Exploitability

The CVSS score of 7 reflects a moderate severity. The vulnerability is not listed in the CISA KEV catalog and the EPSS score is not available. Because the flaw demands that the attacker be able to invoke anyio.run_process() or open_process() with a custom extra_groups argument, the most realistic attack surface is a local user or a process with control over the application code. Remote exploitation would require compromising the host or injecting malicious code into the application that uses the AnyIO helpers.

Generated by OpenCVE AI on September 19, 2026 at 12:24 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the anyio library to version 4.14.2 or later to apply the official fix.
  • If an upgrade is not immediately possible, avoid using anyio.run_process() or open_process() with the extra_groups argument; instead, use the standard subprocess module and explicitly clear supplementary groups with os.initgroups or setgroups in a pre‑exec function.
  • Verify that any call to open_process() does not supply an integer in the group parameter; if only a single group ID is needed, pass it as a single‑item iterable or use the older subprocess API to set the group correctly.

Generated by OpenCVE AI on September 19, 2026 at 12:24 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-3w57-8xmc-8v26 AnyIO run_process/open_process ignores extra_groups and can retain parent supplementary groups
History

Fri, 18 Sep 2026 21:30:00 +0000

Type Values Removed Values Added
Description AnyIO is a high level asynchronous concurrency and networking framework that works on top of either Trio or asyncio. In 4.14.0, AnyIO accepts the POSIX extra_groups argument in anyio.run_process() and anyio.open_process(), but open_process() forwards the group argument to the backend instead of extra_groups. A caller that supplies extra_groups=[] to clear inherited supplementary groups can therefore launch a child that retains the parent process groups, undermining a privilege-dropping boundary. If group is also supplied, the integer group value is passed where an iterable of supplementary groups is expected and the launch can fail with TypeError. This issue affects POSIX applications that rely on AnyIO subprocess helpers to launch less-privileged child processes. This issue is fixed in version 4.14.2.
Title AnyIO run_process/open_process ignores extra_groups and can retain parent supplementary groups
Weaknesses CWE-266
CWE-269
References
Metrics cvssV4_0

{'score': 7, 'vector': 'CVSS:4.0/AV:L/AC:H/AT:P/PR:H/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-18T17:02:30.273Z

Reserved: 2026-07-16T14:14:24.386Z

Link: CVE-2026-63349

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-18T17:16:59.317

Modified: 2026-09-18T17:16:59.317

Link: CVE-2026-63349

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-19T12:30:17Z

Weaknesses
  • CWE-266

    Incorrect Privilege Assignment

  • CWE-269

    Improper Privilege Management