Компания Netflix выявила несколько критических уязвимостей в TCP-стеках Linux и FreeBSD, которые позволяют удалённо инициировать крах ядра или вызвать чрезмерное потребление ресурсов при обработке специально оформленных TCP-пакетов (packet-of-death). Проблемы вызваны ошибками в обработчиках максимального размера блока данных в TCP-пакете (MSS, Maximum segment size) и механизма выборочного подтверждения соединений (SACK, TCP Selective Acknowledgement).

CVE-2019-11477 (SACK Panic) - проблема проявляется в ядрах Linux начиная с 2.6.29 и позволяет вызвать крах (panic) ядра через отправку серии SACK-пакетов из-за возникновения целочисленного переполнения в обработчике. Для атаки достаточно выставить для TCP-соединения значение MSS в 48 байт и отправить последовательность определённым образом скомпонованных SACK-пакетов.

Суть проблемы в том, что структура tcp_skb_cb (Socket Buffer) рассчитана на хранение 17 фрагментов ("define MAX_SKB_FRAGS (65536/PAGE_SIZE + 1) => 17"). В процессе отправки пакета он размещается в очереди на отправку, а в tcp_skb_cb сохраняются детали о пакете, такие как номер последовательности, флаги, а также поля "tcp_gso_segs" и "tcp_gso_size", которые применяются для передачи драйверу информации о сегментировании (TSO, TCP Segmentation Offload) для обработки сегментов на стороне сетевой карты.