Skip to main content

multidict CVE-2026-104874

| EUVDEUVD-2026-91800 MEDIUM
Memory Leak (CWE-401)
2026-10-02 GitHub_M GHSA-54p9-h82j-f925
5.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify endpoint running vulnerable items-view set operation on untrusted input
  2. Exploit
    Submit large attacker-controlled operand sequence
  3. Execution
    Leak two strong references per element (unreclaimable by GC)
  4. Impact
    Repeat 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

multidict 6.7.0, < 6.9.1

Affected Packages

pypi multidict fix: 6.9.1

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

Vendor (GitHub_M) PRIMARY 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Red Hat 5.3 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
Low

Lifecycle Timeline

2
Patch available
Oct 02, 2026 - 21:03 EUVD
CVE Published
Oct 02, 2026 - 20:21 cve.org
MEDIUM 5.3

DescriptionCVE.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.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 41 pypi packages depend on multidict (35 direct, 6 indirect)

Ecosystem-wide dependent count for version 6.7.0.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
High
multidict is a core dependency of aiohttp, extremely widely deployed in Python async apps
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
High
Technical Impact
Partial

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy