处理未经请求的反向 ARP 回复 (CVE-2019-12262)
发现的最奇怪的漏洞之一是反向 ARP (RARP) 协议中的逻辑错误漏洞。一个处于本地 LAN 上的攻击者可以向目标设备发送未经请求的 RARP 回应数据包(通过其 MAC)。这些反过来又允许他将 IPv4 地址添加到目标设备上接收它们的接口,这可能导致各种拒绝服务攻击。
RARP 是早于 DHCP 的旧协议(从 1984 年开始),用于自动网络地址配置。与 DHCP 类似,客户端会广播其要求分配地址的请求,并侦听包含其分配地址的响应。
实际上,任何现代网络或设备都不应该支持 RARP,因为它已经过时且几乎从未被使用。虽然 IPnet 堆栈确实支持 RARP,但默认情况下它不会尝试发送 RARP 请求。 但是,它仍会处理响应。
RARP 协议通常从设备广播一个 RARP 请求开始,然后等待响应 (类似于DHCP)。但是,在 IPnet 实现的代码中,函数 ipnet_eth_rarp_input 会为每个协议 id 为 0x8035 (RARP 协议 ID)的以太网数据包所调用。
在此函数开始时所做的验证仅仅是检查接收到的 RARP 数据包的字段的有效性。稍后提供的 IP 地址由函数 ipnet_ip4_add_addr 简单的添加。此外,当被添加的地址被检查是否是 D 或 E 类地址以外的类时,并不验证该地址是不是本地子网广播地址 127.0.0.1 或者是其他类似的高度无效的值。最后一点,可被添加的 IP 地址的数量没有限制。
这个漏洞可以被用作 DoS 攻击,通过为目标设备配置多个 IP 地址,以便每个 IP 地址与网络上的其他设备发生冲突,或者在目标设备上创建无效的路由表,以防止其产生任何网络流量。