Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft .pyc with 0xffffffff marshal string length
-
DeliveryDeliver malicious sample to analyst
-
ExploitAnalyst opens file in r2/rabin2
-
ExecutionInteger overflow wraps malloc to zero
-
PersistOut-of-bounds heap write corrupts memory
-
ImpactTool crash / denial of service
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Integer overflow checks
MITRE ATT&CK
1 technique across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an analyst to open or inspect a crafted CPython bytecode .pyc file through radare2 (r2) or rabin2 on a local system - the vulnerable code path is the pyc marshal parser in libr/bin/format/pyc/marshal.c. The specific trigger is a marshal string-length field of 0xffffffff, which wraps the size-plus-one heap allocation to zero. Limiting factors: attack is LOCAL (AV:L), requires user interaction (UI:R) to load the attacker-supplied file, no authentication is involved, and impact is limited to heap corruption/denial of service against the analysis tool itself; arbitrary code execution is not demonstrated. Only environments where untrusted .pyc samples are opened in radare2/rabin2 (malware analysis, CTF, RE workflows) are realistically at risk. |
| Impact | This is a genuinely low-priority issue despite the alarmist 'RCE' tag. The CVSS 3.1 base score of 5.5 (MEDIUM) is driven entirely by the AV:L/UI:R/A:H combination - the attack vector is LOCAL and requires user interaction: an analyst must actively open or inspect a crafted .pyc file through r2 or rabin2. There is no network exposure, no autonomous exploitation, and the confirmed impact is availability-only (C:N/I:N/A:H). The description explicitly states arbitrary code execution is theoretically possible but has NOT been demonstrated, so the memory-corruption-to-RCE path is speculative. No EPSS score, no CISA KEV listing, and no public POC were provided - this is a vendor/researcher-reported parser hardening fix, not an actively-exploited threat. The signals are internally consistent (local vector matches the file-parsing trigger); no conflicts to flag. Real-world risk is confined to reverse engineers who load untrusted .pyc samples, and even then the worst reliably-achievable outcome is a crash of the analysis tool. |
| Exploit ScenarioDerived | An attacker distributes a malicious Python .pyc sample (e.g. as part of a malware package under analysis) whose CPython marshal string-length field is set to 0xffffffff. When a reverse engineer opens or inspects it with r2 or rabin2, the length-plus-one allocation wraps to zero and the byte reader writes attacker-controlled data past the undersized heap buffer, corrupting the heap and crashing (or potentially, though unproven, executing code within) the analyst's tool. No public exploit code was identified at time of analysis; exploitation requires the analyst to open the file locally (UI:R). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 22, 2026
Heap memory corruption and denial of service in radare2 versions prior to 6.2.0 occur when the CPython .pyc marshal parser processes a crafted bytecode file that declares a string length of 0xffffffff, wrapping the size-plus-one allocation to zero before attacker-controlled data and fill bytes are written past the heap buffer. Exploitation is local and requires user interaction - an analyst must open or inspect the malicious .pyc with r2 or rabin2 - and no privileges are needed per the CVSS vector (AV:L/PR:N/UI:R), with impact confined to corrupting or crashing the analysis process. Arbitrary code execution is possible in principle but has not been demonstrated, no public exploit code has been identified at time of analysis, and the 5.5 CVSS score reflects a genuinely low-priority issue for most environments. Only workflows that routinely open untrusted .pyc files (malware analysis, CTF, reverse-engineering) are realistically at risk.
RemediationAI
Upgrade radare2 to version 6.2.0 or later; this is the vendor-released patch and it is available via the upstream release at https://github.com/radareorg/radare2/releases/tag/6.2.0, with the code change documented in pull request 26177 and commit 6727454b666b28c33837b219a5f91136461357c0, and the security advisory at https://github.com/radareorg/radare2/security/advisories/GHSA-9phv-v2w8-56j3. No vendor workaround is described, so compensating controls are operational: avoid opening or inspecting untrusted .pyc samples with r2 or rabin2 until the update is applied, and when analysis is unavoidable, run the tools inside a sandboxed, low-privilege container or VM with resource limits so heap corruption stays confined to the analysis process - at the cost of reduced visibility if the container is compromised. Environments that do not analyze Python bytecode can simply refrain from feeding .pyc files to radare2, and disabling or skipping the pyc marshal plugin will fully remove exposure but blocks inspection of Python bytecode samples altogether.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
radare2 is a UNIX-like reverse engineering framework whose binary parsing engine lives in libr/bin, and the affected component is the CPython bytecode (.pyc) marshal deserializer in libr/bin/format/pyc/marshal.c. CPython's marshal format encodes objects such as strings with a 32-bit length prefix; the parser read that length and performed malloc(n + 1) to hold the data plus a NUL terminator, without rejecting values that overflow the addition. A supplied length of 0xffffffff wraps the 32-bit allocation size to zero, so the subsequent common byte reader copies attacker-controlled data and fill bytes past the undersized heap buffer, producing heap corruption and crashes - a classic CWE-190 integer overflow feeding an out-of-bounds write. The upstream fix added explicit 'size >= ST32_MAX' rejection in the marshal readers (including the long and complex object paths) and cast the allocation sizes to ut32 so the addition cannot wrap. The CPE cpe:2.3:a:radareorg:radare2:*:*:*:*:*:*:*:* maps the issue to all radare2 releases before 6.2.0, and ENISA EUVD-2026-84503 independently records the same affected range.
Know when Radare2 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:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
Local file-parsing flaw needing an analyst to open a crafted .pyc (AV:L, UI:R), no privileges required; confirmed impact is a heap-corruption crash so A:H with C:N/I:N since code execution is unproven.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
radare2 is a UNIX-like reverse engineering framework and command-line toolset. Prior to 6.2.0, radare2's CPython bytecode .pyc marshal parser was vulnerable because the CPython marshal readers accepted a 32-bit string length without rejecting values that overflow the size-plus-one allocation. The vulnerability is triggered by opening or inspecting a crafted .pyc file through r2 or rabin2. A length of 0xffffffff wrapped the allocation to zero before the common byte reader wrote attacker-controlled data and fill bytes beyond the heap allocation. This can cause heap memory corruption and denial of service; arbitrary code execution is possible but has not been demonstrated. This issue is fixed in version 6.2.0.
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
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
Integer overflow occurs when an arithmetic operation produces a result that exceeds the maximum value a given integer type can store.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
An out-of-bounds read in radare2 v.5.8.9 and before exists in the print_insn32 function of libr/arch/p/nds32/nds32-dis.h
An out-of-bounds read in radare2 v.5.8.9 and before exists in the print_insn32_fpu function of libr/arch/p/nds32/nds32-d
Heap-based Buffer Overflow in GitHub repository radareorg/radare2 prior to 5.9.0. Rated critical severity (CVSS 9.8), th
OS command injection in radare2-mcp (the Model Context Protocol server that bridges the radare2 reverse-engineering fram
Out-of-bounds Read in GitHub repository radareorg/radare2 prior to 5.7.0. Rated critical severity (CVSS 9.1), this vulne
Out-of-bounds Read in r_bin_ne_get_entrypoints function in GitHub repository radareorg/radare2 prior to 5.6.8. Rated cri
Out-of-bounds read in `r_bin_ne_get_relocs` function in GitHub repository radareorg/radare2 prior to 5.6.8. Rated critic
Heap-based Buffer Overflow in GitHub repository radareorg/radare2 prior to 5.9.0. Rated high severity (CVSS 8.8), this v
Command injection in radare2's PDB parser (versions <6.1.4) enables arbitrary command execution when analysts process ma
Command injection in radare2 PDB parser (versions before 6.1.4) enables arbitrary OS command execution when users analyz
In radare 2.0.1, a memory corruption vulnerability exists in store_versioninfo_gnu_verdef() and store_versioninfo_gnu_ve
In radare2 2.0.1, an integer exception (negative number leading to an invalid memory access) exists in store_versioninfo
Same weakness CWE-190 – Integer Overflow or Wraparound
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| openSUSE Leap 16.0 | Fixed |
EUVD-2026-84503
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB