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 错误响应,导致未经验证的数据被复制到固定大小的栈缓冲区中。

关键函数调用链

  1. ipnet_ip4_input - IPv4 数据包入口点
  2. ipnet_dst_cache_get - 根据源/目的IP查找处理程序
  3. ipnet_ip4_local_rx - 本地地址匹配时的处理程序
  4. ipnet_icmp4_send - 发送 ICMP 错误数据包
  5. ipnet_icmp4_copyopts - 复制 IP 选项到 ICMP 响应

漏洞触发路径

存在两种主要的触发路径:

  1. 目标不可达路径

    • 发送到目标 MAC 地址但目标 IP 地址不是目标单播地址的数据包
    • 导致调用 ipnet_ip4_dst_unreachable
    • 进而调用 ipnet_icmp4_send
  2. 直接单播路径

    • 发送到目标 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 函数会:

  1. 将每个输入的 3 字节 LSRR/SSRR 选项转换为 43 字节的输出选项
    • 3 字节头部
    • 36 字节路由条目
    • 4 字节填充
  2. 将这些选项复制到 ipnet_icmp4_send 栈上分配的 40 字节 opts 数组中
  3. 由于缺乏对多个 SRR 选项的验证,导致栈缓冲区溢出

利用限制

  1. 由于依赖于发送带有无效 IP 选项的数据包,互联网上的路由器通常会丢弃此类数据包
  2. 只能在局域网(LAN)环境中利用
  3. 也可以通过发送包含无效IP选项的广播数据包同时攻击多个设备

漏洞修复建议

  1. 在发送 ICMP 错误响应前完全验证所有 IP 选项
  2. ipnet_icmp4_copyopts 中的选项复制操作添加边界检查
  3. 限制单个数据包中 SRR 选项的数量
  4. 更新到已修复此漏洞的 VxWorks 版本

技术影响

成功利用此漏洞可能导致:

  • 远程代码执行
  • 系统崩溃
  • 拒绝服务

参考

原始技术白皮书: Urgent11 Technical White Paper

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