CVE-2025-21702
pfifo_tail_enqueue: отбрасывать новый пакет, когда sch->limit == 0
- Опубликовано
- 18 февр. 2025 г.
- Обновлено
- 8 сент. 2026 г.
- Назначение CNA
- Linux
- Наблюдены доказательства
- 14 авг. 2026 г.
Первичный CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HНизкий · следующие 30 дней
- Процентиль
- 19,8 %
- Дата модели
- 21 сент. 2026 г.
EPSS – это статистическая оценка, а не достоверность или мера воздействия. Объедините это с CVSS, статусом KEV, воздействием и вашей средой.
Резюме
В ядре Linux устранена следующая уязвимость: pfifo_tail_enqueue: отбрасывать новый пакет, когда sch->limit == 0 Ожидаемое поведение: если мы достигли лимита планировщика, pfifo_tail_enqueue() отбросит пакет в очереди планировщика и уменьшит qlen планировщика на единицу. Затем pfifo_tail_enqueue() помещает новый пакет в очередь и увеличивает qlen планировщика на единицу. Наконец, pfifo_tail_enqueue() возвращает код состояния `NET_XMIT_CN`. Странное поведение: если мы установим `sch->limit == 0` и вызовем pfifo_tail_enqueue() на планировщике, в котором нет пакетов, шаг «отбросить пакет» ничего не сделает. Это означает, что qlen планировщика по-прежнему равен 0. Затем мы продолжаем помещать новый пакет в очередь и увеличиваем qlen планировщика на единицу. В итоге мы можем использовать pfifo_tail_enqueue(), чтобы увеличить qlen на единицу и вернуть код состояния `NET_XMIT_CN`. Проблема в следующем: допустим, у нас есть два qdisc: Qdisc_A и Qdisc_B. - Тип Qdisc_A должен иметь функцию '->graft()' для создания отношения родитель/потомок. Допустим, тип Qdisc_A — `hfsc`. Помещение пакета в очередь этого qdisc вызовет `hfsc_enqueue`. - Тип Qdisc_B — pfifo_head_drop. Помещение пакета в очередь этого qdisc вызовет `pfifo_tail_enqueue`. - Qdisc_B настроен с `sch->limit == 0`. - Qdisc_A настроен на маршрутизацию помещаемого в очередь пакета в Qdisc_B. Помещение пакета в очередь через Qdisc_A приведёт к следующему: - hfsc_enqueue(Qdisc_A) -> pfifo_tail_enqueue(Qdisc_B) - Qdisc_B->q.qlen += 1 - pfifo_tail_enqueue() возвращает `NET_XMIT_CN` - hfsc_enqueue() проверяет `NET_XMIT_SUCCESS` и видит `NET_XMIT_CN` => hfsc_enqueue() не увеличивает qlen Qdisc_A. Весь процесс приводит к ситуации, когда Qdisc_A->q.qlen == 0 и Qdisc_B->q.qlen == 1. Замена 'hfsc' на другой тип (например, 'drr') по-прежнему приводит к той же проблеме. Это нарушает принцип проектирования, согласно которому qlen родителя должен быть равен сумме qlen его потомков. Влияние ошибки: эта проблема может быть использована для повышения привилегий от пользователя до ядра, когда она достижима.
Источники
1Ответственное использование
Используйте информацию об уязвимостях только в тех системах, которыми вы владеете или имеете право тестировать. Kitploit ссылается на метаданные общедоступных исследований и не хранит код эксплойта или вредоносные полезные данные.