VxWorks 高危漏洞 CVE-2019-12256 漏洞分析
字数 1439 2025-08-27 12:33:42
VxWorks 高危漏洞 CVE-2019-12256 技术分析文档
漏洞概述
CVE-2019-12256 是 "URGENT/11" 漏洞系列中的一个高危漏洞,存在于 VxWorks 操作系统的 IPnet 网络堆栈中。该漏洞涉及 IPv4 数据包 IP 选项解析时的栈溢出问题,可能导致远程代码执行。
受影响版本
自 VxWorks 6.9.3 版本起存在此漏洞。
漏洞位置
漏洞位于 VxWorks 的 IPnet 堆栈中,具体在 ipnet2/src/ipnet_ip4.c 文件中的 IPv4 协议实现部分。
漏洞原理
核心问题
漏洞的根本原因是 VxWorks 在处理 IPv4 数据包时,在完全验证传入数据包和 IP 选项之前就可能发送 ICMP 错误响应,导致未经验证的数据被复制到固定大小的栈缓冲区中。
关键函数调用链
ipnet_ip4_input- IPv4 数据包入口点ipnet_dst_cache_get- 根据源/目的IP查找处理程序ipnet_ip4_local_rx- 本地地址匹配时的处理程序ipnet_icmp4_send- 发送 ICMP 错误数据包ipnet_icmp4_copyopts- 复制 IP 选项到 ICMP 响应
漏洞触发路径
存在两种主要的触发路径:
-
目标不可达路径:
- 发送到目标 MAC 地址但目标 IP 地址不是目标单播地址的数据包
- 导致调用
ipnet_ip4_dst_unreachable - 进而调用
ipnet_icmp4_send
-
直接单播路径:
- 发送到目标 MAC 和 IP 地址的普通单播数据包
- 在
ipnet_ip4_multiple_srr_opt_check函数中触发 - 通过
ipnet_ip4_opt_icmp_param_prob发送 ICMP 错误消息
漏洞利用细节
IP 选项构造
攻击者可以构造包含以下特征的恶意 IP 数据包:
- 包含多个 LSRR (Loose Source and Record Route) 或 SSRR (Strict Source and Record Route) 选项
- 每个 LSRR/SSRR 选项长度仅为 3 字节(不包含任何路由条目)
- SRR-Pointer 字段指向选项结束
溢出机制
ipnet_icmp4_copyopts 函数会:
- 将每个输入的 3 字节 LSRR/SSRR 选项转换为 43 字节的输出选项
- 3 字节头部
- 36 字节路由条目
- 4 字节填充
- 将这些选项复制到
ipnet_icmp4_send栈上分配的 40 字节opts数组中 - 由于缺乏对多个 SRR 选项的验证,导致栈缓冲区溢出
利用限制
- 由于依赖于发送带有无效 IP 选项的数据包,互联网上的路由器通常会丢弃此类数据包
- 只能在局域网(LAN)环境中利用
- 也可以通过发送包含无效IP选项的广播数据包同时攻击多个设备
漏洞修复建议
- 在发送 ICMP 错误响应前完全验证所有 IP 选项
- 对
ipnet_icmp4_copyopts中的选项复制操作添加边界检查 - 限制单个数据包中 SRR 选项的数量
- 更新到已修复此漏洞的 VxWorks 版本
技术影响
成功利用此漏洞可能导致:
- 远程代码执行
- 系统崩溃
- 拒绝服务
参考
原始技术白皮书: Urgent11 Technical White Paper