Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Unauthenticated JSON-RPC input reaching a shell yields network vector, low complexity, no privileges/UI, and full C/I/A on the host; scope unchanged as the OS is the same authorization context, assuming the interface is network-exposed.
Primary rating from NVD.
CVSS VectorNVD
Lifecycle Timeline
8DescriptionCVE.org
radare2-mcp version 1.6.0 and earlier contains an os command injection vulnerability that allows remote attackers to execute arbitrary commands by bypassing the command filter through shell metacharacters in user-controlled input passed to r2_cmd_str(). Attackers can inject shell metacharacters through the jsonrpc interface parameters to achieve remote code execution on the host running radare2-mcp without requiring authentication.
AnalysisAI
OS command injection in radare2-mcp (the Model Context Protocol server that bridges the radare2 reverse-engineering framework to LLM agents) versions 1.6.0 and earlier lets remote, unauthenticated attackers achieve full remote code execution on the host. Attacker-controlled JSON-RPC parameters flow into r2_cmd_str() where shell metacharacters bypass the command filter, and because the fix re-enables radare2's exec/socket sandbox, the flaw effectively granted attackers direct shell access. Publicly available exploit code exists (reported by VulnCheck, POC referenced in issue #45); it is not listed in CISA KEV and EPSS is modest at 0.27% (51st percentile).
Technical ContextAI
radare2-mcp exposes radare2's command interpreter over a JSON-RPC/MCP interface so AI agents can drive binary analysis. The radare2 command language itself can spawn OS processes (e.g. the '!' shell-escape and related primitives), so any path that lets untrusted input reach the radare2 command string is effectively a shell. The root cause is CWE-78 (OS Command Injection): user-supplied JSON-RPC parameters are concatenated into a command passed to r2_cmd_str(), and the application-level 'command filter' meant to block dangerous commands is defeated by shell metacharacters. The vendor fix in commit 482cde6 does not tighten the string filter alone - it introduces a sandbox_grain setting that enables radare2's native cfg.sandbox with a default grain of 'exec,socket', so process execution and socket creation are blocked at the engine level unless an operator explicitly passes '-g all' to disable the sandbox. The CPE provided (cpe:2.3:a:radareorg:radare2:*) names the radare2 core package, but the actual vulnerable component is the radare2-mcp connector.
RemediationAI
Upgrade radare2-mcp to the patched release corresponding to fix commit 482cde6500009112a8bc0b3fa8d2ef6180581ec0; the EUVD range (0 < 1.6.0) indicates the fix landed in version 1.6.0, but because the reference is a commit rather than an independently confirmed tagged release and the CVE text calls 1.6.0 'and earlier' vulnerable, confirm the exact patched tag with the vendor before relying on a version number. After upgrading, do NOT disable the sandbox: the fix enables radare2's cfg.sandbox with grain 'exec,socket' by default, so avoid passing the new '-g all' flag, which turns the protection off and reintroduces the exposure. As compensating controls where patching is not yet possible, bind the MCP/JSON-RPC interface to localhost or a Unix socket rather than a routable address, place it behind an authenticating proxy, and firewall the listening port so only trusted AI-agent hosts can reach it; the trade-off is that remote agent integrations that legitimately need network access will break. See the VulnCheck advisory (https://www.vulncheck.com/advisories/radare2-mcp-os-command-injection-via-shell-metacharacter-bypass) and issue #45 (https://github.com/radareorg/radare2-mcp/issues/45) for details.
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
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
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
In radare2 2.0.1, an integer exception (negative number leading to an invalid memory access) exists in store_versioninfo
Failure to Sanitize Special Elements into a Different Plane (Special Element Injection) in GitHub repository radareorg/r
Same weakness CWE-78 – OS Command Injection
View allSame technique Command Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-25314
GHSA-g65f-grqm-9jg5