Description
In the Linux kernel, the following vulnerability has been resolved: netfilter: ip6t_rt: fix zero-address non-strict match out-of-bounds read rt_mt6_check() permits rules to be configured with rtinfo->addrnr == 0 even when address matching (IP6T_RT_FST_MASK) is requested. In the IP6T_RT_FST_NSTRICT path, rt_mt6() evaluates packet routing addresses against rtinfo->addrs[i] and terminates backwards at the bottom of the loop: if (ipv6_addr_equal(ap, &rtinfo->addrs[i])) { i++; } if (i == rtinfo->addrnr) break; When addrnr is 0, if the first packet address matches rtinfo->addrs[0], i is incremented to 1. Because i is now strictly greater than addrnr (0), the loop termination condition (i == rtinfo->addrnr) is bypassed and will never be satisfied. If a crafted IPv6 packet contains matching routing addresses, i will advance past IP6T_RT_HOPS (16). The subsequent call to ipv6_addr_equal() reads beyond struct ip6t_rt, triggering UBSAN/KASAN out-of-bounds warnings or kernel panics. Fix this by: 1. Rejecting rules in rt_mt6_check() where IP6T_RT_FST_MASK is set but rtinfo->addrnr is zero. 2. In rt_mt6(), moving the termination condition (i < rtinfo->addrnr) into the for-loop header condition and removing the backwards break at the end of the loop body.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 959d1829d1ce8b91b435b24a923b51bcc8897090affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < fe336bab13834394320997de8b16ca4a913b4f13affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 5a54f8b7f7fe207a5c14713015a5820588faf1adaffected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < b89249819a7d6698bed152feafd3bc6c08489d15affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < dd55c0ea87bf70e4e4b3b683acd29ef981335b26affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 191239b0939692e92459d8d32cad14247fa93f89affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < d9cf4ac6f326330e1fe4d95671d36a6ff3593f64affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 82313c169eddc02b1bf5ba6b427803e272d3ec42affected
Linux Linux
Default version status: affected
2.6.12affected0 to < 2.6.12unaffected5.10.271 to ≤ 5.10.*unaffected5.15.222 to ≤ 5.15.*unaffected6.1.189 to ≤ 6.1.*unaffected6.6.158 to ≤ 6.6.*unaffected6.12.112 to ≤ 6.12.*unaffected6.18.55 to ≤ 6.18.*unaffected7.2.9 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/959d1829d1ce8b91b435b24a923b51bcc8897090 ↗
- https://git.kernel.org/stable/c/fe336bab13834394320997de8b16ca4a913b4f13 ↗
- https://git.kernel.org/stable/c/5a54f8b7f7fe207a5c14713015a5820588faf1ad ↗
- https://git.kernel.org/stable/c/b89249819a7d6698bed152feafd3bc6c08489d15 ↗
- https://git.kernel.org/stable/c/dd55c0ea87bf70e4e4b3b683acd29ef981335b26 ↗
- https://git.kernel.org/stable/c/191239b0939692e92459d8d32cad14247fa93f89 ↗
- https://git.kernel.org/stable/c/d9cf4ac6f326330e1fe4d95671d36a6ff3593f64 ↗
- https://git.kernel.org/stable/c/82313c169eddc02b1bf5ba6b427803e272d3ec42 ↗