Automated Threat Modeling

Brief Summary: CVE-2026-52751 in NSA's Ghidra Enables Unauthenticated RCE via RMI Deserialization

A short review of CVE-2026-52751, a high-severity unsafe deserialization vulnerability in Ghidra's Shared Project RMI client code that allows unauthenticated remote code execution when a user opens a crafted project file. All versions from 9.1 through 12.0.x are affected.

CVE Analysis

8 min read

ZeroPath CVE Analysis
ZeroPath CVE Analysis

2026-06-10

Brief Summary: CVE-2026-52751 in NSA's Ghidra Enables Unauthenticated RCE via RMI Deserialization
Experimental AI-Generated Content

This CVE analysis is an experimental publication that is completely AI-generated. The content may contain errors or inaccuracies and is subject to change as more information becomes available. We are continuously refining our process.

If you have feedback, questions, or notice any errors, please reach out to us.

[email protected]

Introduction

The NSA's Ghidra reverse engineering framework, used daily by malware analysts and security researchers across government and industry, contains an unauthenticated remote code execution vulnerability that opening a shared project file is enough to trigger. CVE-2026-52751, with a CVSS score of 8.8, comes from a missing deserialization filter in Ghidra's client-side RMI connection code. An attacker can use it to execute arbitrary commands on the victim's workstation through a gadget chain built from Ghidra's bundled Jython library.

Technical Information

Root Cause: Asymmetric Deserialization Filtering

The core issue is a trust boundary failure in Ghidra's Shared Project feature. When a Ghidra client connects to a Ghidra Server via RMI, it deserializes returned objects using ObjectInputStream.readObject() with no ObjectInputFilter in effect. The Ghidra Server installs a strict allow-list filter at startup, but the client side never received equivalent protection. Because of this asymmetry, if a client can be tricked into connecting to a malicious RMI endpoint, the attacker controls what gets deserialized.

This is a textbook case of CWE-502 (Deserialization of Untrusted Data), the vulnerability class behind some of the most impactful Java exploits of the past decade.

Silent Connection via ghidra:// URLs in Project Files

The attack starts with Ghidra's project file format. The DefaultProject.restore() method processes the project's projectState XML and silently opens a ghidra:// connection for every <OPEN_REPOSITORY_VIEW URL="..."/> element it encounters. Ghidra shows no confirmation dialog or warning, and the user gets no chance to inspect the URL before the connection is made. The victim performs File, Open Project on what appears to be a normal Ghidra project, and the client connects to the attacker's server automatically.

The Jython 2.7.4 PyMethod Gadget Chain

Ghidra bundles jython-standalone-2.7.4.jar, which provides the classes the exploitation chain needs. The PyMethod class implements java.lang.reflect.InvocationHandler and lacks a readResolve guard, so it works as a deserialization gadget. The chain follows a well-known pattern from Java deserialization research:

StepActionComponent
1Attacker crafts malicious Ghidra project fileprojectState XML with ghidra:// URL
2Victim opens project via File, Open ProjectDefaultProject.restore()
3Client silently connects to attacker-controlled serverRMI connection via ghidra:// URL
4Server returns malicious serialized objectNo ObjectInputFilter on client
5ObjectInputStream.readObject() deserializes payloadJython PyMethod gadget chain
6PriorityQueue.readObject() triggers gadget chainInvocationHandler proxy
7Arbitrary command execution on victim machineRuntime.getRuntime().exec()

The ysoserial project has included a Jython1 gadget exploiting similar classes, and Tenable documented the PyMethod InvocationHandler technique back in 2016. The gadget chain is not new. This vulnerability is significant because of its delivery mechanism and its target audience.

Delivery Vectors and Social Engineering Surface

The advisory names delivery channels that security researchers rely on every day: email attachments, Slack and Teams direct messages, AirDrop, shared cloud drives, git clone operations, and sample sharing forums. Reverse engineers and malware analysts routinely exchange project files and analysis artifacts through these channels, which makes social engineering a highly plausible route to exploiting this vulnerability.

CVSS Scoring

The sources disagree on the score:

SourceCVSS VersionScore
NVDv3.18.8
GHSA Advisoryv3.17.8 (AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H)
VulnCheckv48.6

The GHSA advisory uses an Attack Vector of Local (AV:L), because the victim must open a local file. The NVD score of 8.8 likely uses a Network attack vector. Whatever the specific score, all three assessments rate this High severity, with full impact on confidentiality, integrity, and availability.

Affected Systems and Versions

All Ghidra versions containing the Shared Project feature are vulnerable. That means every release from version 9.1 onward, up to but not including 12.1. The advisory states that the code paths involved are unchanged in every release since the feature was introduced.

Ghidra 12.1, released on May 13, 2026, is the only fixed version. No configuration workaround exists to disable the vulnerable code paths in earlier versions.

Vendor Security History

Ghidra has had at least two High-severity RCE vulnerabilities disclosed in 2026, and both are trust boundary failures:

VulnerabilityCVECVSSCWEAffected VersionsPatched Version
RMI Deserialization RCECVE-2026-527518.8CWE-502< 12.112.1
Annotation Command Injection RCECVE-2026-49468.8CWE-78< 12.0.312.0.3

CVE-2026-4946 abuses annotation directives in auto-extracted binary data to inject commands. Both vulnerabilities come from the same architectural weakness. Ghidra fails to distinguish between trusted and untrusted data at critical processing boundaries.

The Ghidra Team is not currently authorized to generate CVEs directly from security advisories, so CVE-2026-52751 was assigned through VulnCheck's disclosure process. Researcher @jro-calif reported the vulnerability, and the fix was developed jointly with Oceanit's Software and Cybersecurity team.

References

Detect & fix
what others miss

Works with
  • GitHub
  • GitLab
  • Bitbucket
  • Azure DevOps Services
  • Gerrit
  • CVS
  • Jira
  • Linear
  • Slack
  • Security Compass
Explore integrations
Security magnifying glass visualization