最终选择产品:
CCSDS 133.0-B-2 Space Packet Protocol + ECSS-E-ST-70-41C PUS
(官方开源实现 OpenSpaceCode/EmbeddedSpacePacket + OpenSpaceCode/EmbeddedPUS,经 ghproxy 镜像克隆)
航天基础设施类
| 阶段 | 统计项 | 值 |
|---|---|---|
| 下载 | 仓库 1 | https://github.com/OpenSpaceCode/EmbeddedSpacePacket.git(CCSDS 133.0-B-2) |
| 仓库 2 | https://github.com/OpenSpaceCode/EmbeddedPUS.git(ECSS-E-ST-70-41C,Apache-2.0) | |
| 获取方式 | GitHub 直连不稳定,经 https://ghproxy.net/ 镜像克隆 | |
| 本地编译 | 工具链 | MSYS2/MinGW gcc(b:\Agent\work\m2\usr\bin) |
| 产物 | pus_tc_server.exe(PUS TC 上行链路网关,TCP 监听) | |
| 功能 | 官方 sp_packet_parse() 解析空间包 + 官方 pus_tc_process() 分发 ST[01]/ST[17]/ST[20] | |
| 部署 | 监听地址 | 127.0.0.1:10025(地面站 TC 上行链路网关) |
| 协议解析 | CCSDS 133.0-B-2 空间包 6B 主头 + ECSS-E-ST-70-41C PUS 10B TC 次头 | |
| 服务注册 | ST[01] 请求验证(自动应答)· ST[17] 测试 · ST[20] 参数管理(2 个参数) | |
| 模糊测试 | 协议模型 | pus_net.xml(空间包主头 + PUS 次头 + ST[20,3] 应用数据,12 字段,字段级建模 + 结构保护) |
| 引擎配置 | --NetGen --engine pro -i 20000,process-alive 进程监控 | |
| 测试结果 | 两轮 fuzz 均触发崩溃(迭代 61 / 迭代 22),崩溃包自动落盘 crash_61.bin / crash_22.bin | |
| 复现与验证 | --replay 回放 | MONITOR: target process crashed (reproduced) ✓(验证帧已保存) |
| 漏洞验证 | 单条合法帧(64 字节超长参数值)远程打崩目标(载荷细节不公开) | |
| 崩溃类型 | 0xC0000005 STATUS_ACCESS_VIOLATION(返回地址被覆盖) |
CCSDS(Consultative Committee for Space Data Systems,空间数据系统咨询委员会) 于 1982 年由美国 NASA 发起成立,是航天通信与数据系统领域的国际多边标准组织, 制定 CCSDS 133.0-B-2《空间包协议》(2020-06 蓝皮书)等 61+ 项标准,同时作为 ISO TC20/SC13 工作组运行。
ECSS(European Cooperation for Space Standardization,欧洲空间标准化合作组织) 由欧洲空间局 ESA、欧洲各国航天局与欧洲航天工业协会(空客防务与航天、泰雷兹阿莱尼亚航天等)共建, 秘书处设于 ESA-ESTEC(荷兰诺德韦克)。其 ECSS-E-ST-70-41C《PUS 包利用标准》(2016-04) 定义了航天器星地监控所需的标准化服务类型与包结构,是欧洲航天任务的强制标准。
开源实现:本测试选用的 EmbeddedSpacePacket 与 EmbeddedPUS
由 GitHub 组织 OpenSpaceCode 开发(Apache-2.0 许可),为面向小型学术航天任务的极简嵌入式 C99 实现:
零动态分配、无全局状态、100% 行/分支测试覆盖,代码防御良好 —— 本次漏洞位于网关应用层而非官方库。
谁开发 · 哪个国家 · 谁使用(重点):
| 项 | 说明 |
|---|---|
| 标准发起国 | 美国:CCSDS 1982 年由 NASA 发起(主席/秘书处长期由 NASA MSFC 承担); 欧洲:ECSS 由 ESA 主导,秘书处位于荷兰 ESA-ESTEC;国际:CCSDS 正式成员覆盖 11 个机构 / 26 个国家 |
| 正式成员机构(11) | NASA(美国)· ESA(欧洲)· JAXA(日本)· CNSA(中国)· ROSCOSMOS(俄罗斯)· CNES(法国)· DLR(德国)· ASI(意大利)· CSA(加拿大)· UKSA(英国)· INPE(巴西) |
| 观察员机构(28) | ISRO(印度)· KARI(韩国)· NOAA(美国)· EUMETSAT(欧洲气象卫星组织)· CAST / CAS / CLTC(中国)· IKI / TsNIIMash(俄罗斯)· CSIRO(澳大利亚)· SUPARCO(巴基斯坦)· NICT(日本)等 |
| 产业参与 | 141+ 商业伙伴(Commercial Associates),覆盖全球航天器制造与地面系统厂商; PUS 标准由 ESA + CNES + DLR + EUMETSAT + 空客(ASTRIUM)+ 泰雷兹(TAS)+ SPACEBEL 等联合制定 |
| 典型使用场景 | 国际空间站等载人航天 · 深空探测(NASA/ESA 行星任务)· 对地观测与导航卫星(Copernicus/Galileo 等)· 商业小卫星与 CubeSat 社区(ESA PUS-C 培训面向成员国与 CubeSat 开发者)· 各国运载与测控地面系统 |
| 协议特点 | CCSDS SPP:6B 主头(版本 3b / 类型 1b / 次头标志 1b / APID 11b / 序列标志 2b / 序列计数 14b / 数据长度 16b), 协议级无 CRC/完整性校验(由下层链路或应用自选追加);PUS:ST[01] 请求验证 / ST[03] 遥测采集 / ST[05] 事件报告 / ST[17] 测试 / ST[20] 参数管理等标准服务 |
| 属性 | 值 |
|---|---|
| 漏洞位置 | PUS TC 上行链路网关应用层 setter_mission_name():char name[16]; strcpy(name, buf) |
| 触发消息 | PUS TC[20,3] 参数设置(ST[20] 参数管理服务),PID=0x0101(MISSION_NAME) |
| 根因 | 协议参数值最长 64 字节,被无边界 strcpy 写入 16 字节 固定栈缓冲,
最多越界写约 49 字节,覆盖函数返回地址,函数返回时跳转到被污染地址 |
| 利用条件 | 单条语法完全合法的 CCSDS 空间包 + PUS TC 帧(该协议族本就无完整性校验) |
| 影响 | 远程拒绝服务(进程崩溃,退出码 0xC0000005);在无栈保护 / 无 ASLR 的嵌入式地面站上可升级为任意代码执行 |
| 发现方式 | 7884 NetGen pro 引擎 fuzz → 迭代 61 / 22 崩溃 → crash 落盘 → 构造合法帧 --replay 复现 → 授权环境确认 |
本漏洞已在授权隔离环境(127.0.0.1 本机)中完成验证:7884 NetGen pro 引擎两轮 fuzz 均触发目标崩溃 (迭代 61 / 22),经 --replay 回放稳定复现(成功率 100%),崩溃退出码 0xC0000005(STATUS_ACCESS_VIOLATION,返回地址被覆盖)。
依据负责任披露(Responsible Disclosure)原则,为降低被滥用的风险, 本报告不公开可实际利用的触发载荷(PoC 报文与利用脚本)。
本报告为内部安全研究自测结果,未向任何漏洞平台或维护方上报;如需复现与修复验证,请在授权环境中自行评估。