CVE-2020-10749
前置知识
- CAP_NET_RAW 权限:这是 Linux 的一项能力,允许进程构造任意数据包。Docker 默认赋予容器此权限,使得攻击者可以在容器内发送 IPv6 路由器通告。
- IPv4 集群中的 IPv6 流量:虽然集群是 IPv4 的,但如果 DNS 返回了 AAAA(IPv6)记录,许多客户端库会优先尝试 IPv6 连接。
- CNI 插件的错误配置:受影响版本的
ptp和bridge等 CNI 插件,没有在宿主机的 veth 接口上禁用accept_ra(接受路由器通告)。这意味着宿主机信任了攻击者容器发来的伪造通告。
漏洞原理
ptp 和 bridge 等插件在宿主机接口上未禁用 accept_ra,导致拥有 CAP_NET_RAW 权限的恶意容器可以发送伪造的 IPv6 路由器通告,将宿主机流量劫持到自身。即使集群是 IPv4 的,只要客户端优先尝试 IPv6,攻击者就能截获流量
漏洞复现
创建受害 pod 和攻击 pod

受害容器初始化

攻击容器初始化

劫持前对照

攻击准备

发送伪造 RA

验证受害者被"洗脑"

劫持验证
