CVE-2026-98158: уязвимость в ppp_async ядра Linux приводит к панике ядра
В ядре Linux устранена уязвимость в драйвере ppp_async, позволяющая удалённому узлу PPP вызвать панику ядра (DoS). Проблема связана с некорректным управлением headroom у skb при обработке кадра с ошибкой. Уязвимость затрагивает системы, использующие PPP, и требует обновления ядра.
Подробности
Функция ppp_receive_nonmp_frame() добавляет двухбайтовый тег направления в начало skb перед запуском BPF-фильтров pass/active: *(__be16 *)skb_push(skb, 2) = htons(PPP_FILTER_INBOUND_TAG); Однако на пути приёма никто не гарантирует наличие этих двух байт headroom. Обработчик ошибок кадра в process_input_packet() модуля ppp_async сбрасывает headroom переиспользуемого skb в ноль, хотя должен был восстановить его до состояния свежевыделенного буфера. Свежий skb из dev_alloc_skb() содержит NET_SKB_PAD, но при сбросе через skb_reserve(skb, -skb_headroom(skb)) этот запас обнуляется. Указатель ap->rpkt продолжает ссылаться на этот skb, поэтому следующий кадр собирается в буфер без headroom. Если узел отправляет кадр с неверной FCS, а затем кадр, начинающийся с байтов ff 03, к моменту добавления тега фильтра остаётся всего один байт headroom, и запись выходит за пределы skb->head. Это приводит к срабатыванию skb_under_panic и панике ядра (kernel BUG в net/core/skbuff.c). Аналогичная проблема возникает при включённой CCP-компрессии: ppp_decompress_frame() передаёт skb->data - 2 в ->decompress()/->incomp(), что вызывает чтение за границей буфера. Уязвимость обнаружена при фаззинге пути приёма PPP с мутирующим узлом на pty. Воспроизведение (repro-ppp-skb.c) вызывает панику примерно за секунду. Для эксплуатации требуется, чтобы root настроил PPP, а удалённый узел отправил два специально сформированных кадра, поэтому речь идёт об удалённом DoS.Что делать
Исправление уже включено в основную ветку ядра Linux. Рекомендуется обновить ядро до версии, содержащей данный патч. Вместо восстановления headroom исправление отбрасывает ошибочный кадр — по аналогии с тем, как это уже сделано в ppp_synctty, — и очищает ap->rpkt, чтобы следующий кадр собирался в новый skb с корректным headroom. Это устраняет и панику фильтра, и чтение за границей при CCP. Если обновление невозможно, следует рассмотреть ограничение доступа к PPP-интерфейсам и минимизацию круга доверенных узлов, способных отправлять кадры. Однако надёжной митигации без патча нет, поэтому приоритет — установка обновления. Итог: CVE-2026-98158 — это удалённая DoS-уязвимость в ppp_async, эксплуатируемая двумя кадрами от узла PPP. Исправление доступно в ядре Linux; администраторам рекомендуется как можно скорее обновить систему.Источник: CVE Project (cvelistV5)
