Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify endpoint running vulnerable items-view set operation on untrusted input
-
ExploitSubmit large attacker-controlled operand sequence
-
ExecutionLeak two strong references per element (unreclaimable by GC)
-
ImpactRepeat to exhaust worker memory and crash process (DoS)
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Resource cleanup, leak prevention
|
| Exploitation Conditions | Exploitation requires ALL of the following: (1) the compiled C extension build of multidict (pure-Python builds are explicitly NOT affected); (2) an affected version from 6.7.0 up to but excluding 6.9.1; (3) the application must actually invoke one of two specific operations - the reflected items-view union 'operand | md.items()' or the items-view subtraction 'md.items() - operand'; (4) the operand must contain non-tuple elements (tuple operand elements, forward union 'md.items() | operand', and intersection are NOT affected); and (5) the operand contents must be attacker-influenced and repeatable at volume. Limiting factors that reduce real-world risk: these exact operation patterns are uncommon in typical application code, impact is confined to memory/availability (no code execution or data exposure), and the vulnerable path is one-directional (only the reflected union and subtraction leak). |
| Impact | This is a medium-severity, availability-only issue (CVSS 5.3, AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L) with no confidentiality or integrity impact - it is strictly a memory-leak denial-of-service (CWE-401). No EPSS score was provided in the input, the CVE is NOT on the CISA KEV list, and no public exploit or POC is referenced (only a maintainer regression test accompanies the fix). SSVC-style reasoning: exploitation status is 'none observed,' technical impact is partial (A:L - degraded availability via unbounded memory growth, not full takeover), and automatability is limited because triggering requires the target application to actually perform the specific vulnerable operations. The network attack vector (AV:N) is realistic ONLY insofar as attacker-influenced data reaches one of two narrow code paths - reflected union 'operand | md.items()' or subtraction 'md.items() - operand' - against the C-extension build with non-tuple operand elements. The CVSS PR:N/AC:L signals a low barrier for the attacker once such a code path exists, but the real-world gate is whether any application exposes these exact operations to untrusted input, which sharply narrows exploitability. Net: this is a genuine but low-urgency DoS that warrants routine dependency patching rather than emergency response; it is a case where a plausible network vector overstates practical risk because the vulnerable operation pattern is uncommon in real applications. |
| Exploit ScenarioDerived | A Python service using multidict's C extension (6.7.0-6.9.0) performs 'operand | md.items()' or 'md.items() - operand' where 'operand' is built from attacker-supplied, non-tuple-backed data (e.g., derived from request parameters). An attacker repeatedly submits large sequences; each element leaks two strong references (key-identity and value) that garbage collection cannot reclaim, driving the worker's memory upward until it is OOM-killed. No public exploit is identified at time of analysis, though the vendor's fix commit includes a regression test demonstrating the leak. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 02, 2026
Unbounded process memory growth in the multidict C extension (versions 6.7.0 up to but excluding 6.9.1) lets unauthenticated remote attackers drive a denial of service by repeatedly invoking two items-view set operations. The reflected union 'operand | md.items()' and the subtraction 'md.items() - operand' each fail to release one key-identity reference and one value reference per operand element, and because these are strong references the garbage collector cannot reclaim them, so memory grows without bound as operations repeat. The issue is availability-only (CVSS 5.3: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L), patches only reachable in compiled C-extension builds with non-tuple, attacker-influenced operands, and there is no public exploit identified at time of analysis; the vendor-released fix is multidict 6.9.1.
RemediationAI
Vendor-released patch: upgrade to multidict 6.9.1 or later (release tag v6.9.1), which adds the missing Py_CLEAR(identity) and Py_CLEAR(value) calls in multidict_itemsview_or2_impl and multidict_itemsview_sub1_impl; see the advisory https://github.com/aio-libs/multidict/security/advisories/GHSA-54p9-h82j-f925 and the fixing commit https://github.com/aio-libs/multidict/commit/350b4a07bf8ff851b6d7544e81b1c748bdc74c40. If an immediate upgrade is not possible, audit application code and bundled dependencies for the two affected patterns - 'operand | md.items()' and 'md.items() - operand' - and rewrite them using the forward union 'md.items() | operand' or an intersection, which do not leak; the trade-off is that this requires source changes and gives no protection for vulnerable code inside third-party libraries. Alternatively, ensure the operand supplied to these operations is either tuple-based or not attacker-influenced, since tuple operand elements do not trigger the leak - this reduces exposure for known call sites but does not repair the direct leak for non-tuple elements and is fragile if operand provenance changes. Running a pure-Python build of multidict removes the vulnerable C code path entirely at a measurable throughput cost, which is a reasonable interim option for high-exposure services. As defense in depth, enforce per-process memory limits (cgroup/RLIMIT_AS or equivalent) and rate-limit the endpoints that can drive high-volume repeated items-view set operations, since every leaked element adds two permanently unreclaimable strong references and a restart remains the only way to reclaim accumulated memory.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
multidict is a Python library implementing a multi-value dictionary data structure, used widely in asyncio/aiohttp-adjacent stacks for HTTP headers and query parameters. It ships an optional C extension under multidict/_multilib/ (here views.h) that accelerates items-view operations. Two functions, multidict_itemsview_or2_impl (reflected union, operand | md.items()) and multidict_itemsview_sub1_impl (subtraction, md.items() - operand), iterate over operand elements, obtaining a new key-identity reference and a value reference for each element, but return without decrementing them - a classic CWE-401 'Missing Release of Memory after Effective Lifetime' reference leak. Two strong references per element accumulate and are invisible to Python's cyclic garbage collector, so repeated operations produce monotonically growing RSS. The upstream fix adds Py_CLEAR(identity) and Py_CLEAR(value) in both implementations (plus an arg/ret cleanup correction in the subtraction path) and is accompanied by isolated regression tests asserting that operand wrapper objects are collected by GC. The vulnerable path is one-directional: forward union (md.items() | operand), intersection, tuple-element operands, and pure-Python (non-C-extension) builds are explicitly unaffected. No confidentiality or integrity impact exists - the flaw cannot be leveraged for code execution or data exposure, only for memory exhaustion.
Know when Multidict gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Attacker-influenced network data triggers unbounded memory growth without authentication or interaction; impact is availability-only (A:L), with no confidentiality or integrity effect and no scope change.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Multidict is an implementation of a multidict data structure. From 6.7.0 until 6.9.1, the C extension's items-view reflected union operation, operand | d.items(), in multidict_itemsview_or2_impl and subtraction operation, d.items() - operand, in multidict_itemsview_sub1_impl fail to release new key-identity and value references returned for each operand element. Applications that perform these operations over attacker-influenced sequences can leak two strong references per element, and garbage collection cannot reclaim them, so repeated operations can cause unbounded process memory growth and denial of service. Forward union, intersection, non-tuple operand elements, and pure-Python builds are not affected by this reference leak. This issue is fixed in version 6.9.1.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
EUVD-2026-91800
GHSA-54p9-h82j-f925
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB