CryptoLib 提供了一种纯软件解决方案,使用 CCSDS 空间数据链路安全协议 - 扩展规程(SDLS-EP)来保护运行核心飞行系统(cFS)的航天器与地面站之间的通信安全。在 1.3.3 及之前版本中,Crypto_TM_ProcessSecurity 函数(crypto_tm.c:1735:8)存在堆溢出漏洞。在处理 TM 协议数据包的次级头长度时,如果次级头长度超过数据包的总长度,则在将数据包数据复制到动态分配的缓冲区 p_new_dec_frame 的 memcpy 操作期间会触发堆溢出。这使攻击者能够覆盖相邻的堆内存,可能导致任意代码执行或系统不稳定。
影响:精心构造的数据包可能在向 p_new_dec_frame 缓冲区执行 memcpy 操作期间触发堆内存破坏,可能导致:
已修补版本: 810fd66d592c883125272fef123c3240db2f170f
poc.py - 双模式 Python 脚本:
./poc.py generate [overflow_amount]
参数:
overflow_amount:要溢出的字节数(默认:1024)示例:
# Generate packet with 2048-byte overflow
./poc.py generate 2048 > evil_packet.hex
./poc.py check <hex_packet>
参数:
<hex_packet>:TM 数据包的十六进制字符串示例:
# Analyze generated packet
./poc.py check $(cat evil_packet.hex)
[6-byte Primary Header][2-byte Secondary Header Length][Payload]
该脚本创建具有以下特征的数据包:
Secondary Header Length > (Total Packet Length - Header Offset)memcpy 操作尝试复制的字节数超过可用字节数available_space = total_length - (offset + length_field_size)
if claimed_length > available_space:
trigger_alert()
本软件仅供以下用途使用:
请勿在生产系统上或未经明确授权的情况下使用。维护者不对滥用此工具承担任何责任。