В ядре Linux устранена следующая уязвимость:
ip: потерянные предварительно выбранные skbs перед многоадресной пересылкой
Входные данные IPv4 и IPv6 сохраняют связь skb->sk, установленную
bpf_sk_assign(), чтобы локальная доставка могла использовать выбранный сокет в разделе
РКУ. Оба семейства адресов также могут предварительно выбирать сокет в раннем демультиплексировании UDP. В обоих путях (BPF и ранний демультиплексирование UDP) не гарантируется, что ссылка будет
держаться на розетке.
Если многоадресный пакет не доставляется локально, IPv6 передает
исходный skb для ip6_mr_input(). Функция ip_mr_input() IPv4 аналогичным образом сохраняет
оригинальный скб, когда местная доставка не нужна. Любой путь может положить
skb в очереди неразрешенного многоадресного маршрута или переслать его после
Секция RCU принимающей стороны заканчивается.
После того, как предварительно загруженный сокет уничтожен, более поздний skb free вызывает
sock_pfree() и разыменовывает устаревший skb->sk. Сирота скб раньше
каждый нелокальный путь многоадресной пересылки. Местная доставка сохраняет
оригинальный скб; существующие вызовы skb_clone() обеспечивают многоадресную пересылку
с клоном без сокетов.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ip: orphan prefetched skbs before multicast forwarding IPv4 and IPv6 input preserve an skb->sk association installed by bpf_sk_assign() so that local delivery can use the selected socket under RCU. Both address families can also prefetch a socket in UDP early demux. In both paths (BPF and UDP early demux) a reference is not guaranteed to be held on the socket. When a multicast packet is not locally deliverable, IPv6 hands the original skb to ip6_mr_input(). IPv4's ip_mr_input() similarly keeps the original skb when local delivery is not needed. Either path can put the skb on an unresolved multicast route queue or forward it after the receive-side RCU section ends. After the prefetched socket is destroyed, a later skb free invokes sock_pfree() and dereferences the stale skb->sk. Orphan the skb before each non-local multicast forwarding path. Local delivery retains the original skb; the existing skb_clone() calls provide multicast forwarding with a socket-free clone.
Характеристики атаки
Последствия
Строка CVSS v3.1