В ядре Linux устранена следующая уязвимость:
хм: вектор: исправлено использование после освобождения в Vector_mmsg_rx()
Когда Vector_mmsg_rx() отбрасывает пакет, наложение заголовка которого не удалось
verify_header() освобождает skb и продолжает цикл:
если (header_check <0) {
dev_kfree_skb_irq (скб);
vp->estats.rx_encaps_errors++;
продолжать;
}
Обычные пути и пути коротких пакетов проходят в нижнюю часть
тело цикла, которое очищает занятый слот и перемещает курсоры:
(*skbuff_vector) = NULL;
ммсг_вектор++;
skbuff_vector++;
Путь Verified_header() < 0 пропускает этот путь через continue, поэтому освобожденный skb
остается в skbuff_vector[] и курсоры не перемещаются. Следующий
итерация считывает тот же слот, получает освобожденный skb и освобождает его снова,
создание потери счетчика ссылок/использования после освобождения в пути RX. Прежде чем продолжить, выбросьте слот так же, как и другие пути.
Это затрагивает только те транспорты, у которыхverify_header() может возвращать отрицательное значение:
GRE и L2TPv3 делают это при несовпадении идентификатора файла cookie/сеанса (raw/tap — нет),
поэтому любой узел на таком транспорте может запустить его без аутентификации.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: um: vector: fix use-after-free in vector_mmsg_rx() When vector_mmsg_rx() discards a packet whose overlay header fails verify_header(), it frees the skb and continues the loop: if (header_check < 0) { dev_kfree_skb_irq(skb); vp->estats.rx_encaps_errors++; continue; } The normal and short-packet paths fall through to the bottom of the loop body, which clears the consumed slot and advances the cursors: (*skbuff_vector) = NULL; mmsg_vector++; skbuff_vector++; The verify_header() < 0 path skips that via continue, so the freed skb is left in skbuff_vector[] and the cursors do not advance. The next iteration reads the same slot, gets the freed skb, and frees it again, producing a refcount underflow / use-after-free in the RX path. Discard the slot the same way the other paths do before continuing. Only transports whose verify_header() can return negative are affected: GRE and L2TPv3 do so on a cookie/session-id mismatch (raw/tap do not), so any peer on such a transport can trigger it without authentication.
Характеристики атаки
Последствия
Строка CVSS v3.1