CVE-2025-38248
bridge: mcast: Исправление use-after-free при настройке порта маршрутизатора
- Опубликовано
- 9 июл. 2025 г.
- Обновлено
- 5 авг. 2026 г.
- Назначение CNA
- Linux
- Наблюдены доказательства
- 8 авг. 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 дней
- Процентиль
- 18,5 %
- Дата модели
- 21 сент. 2026 г.
EPSS – это статистическая оценка, а не достоверность или мера воздействия. Объедините это с CVSS, статусом KEV, воздействием и вашей средой.
Резюме
В ядре Linux устранена следующая уязвимость: bridge: mcast: Исправление use-after-free при настройке порта маршрутизатора Мост поддерживает глобальный список портов, за которыми находится многоадресный маршрутизатор. К этому списку обращаются во время пересылки, чтобы гарантировать, что многоадресные пакеты пересылаются на эти порты, даже если порты не являются членами соответствующей записи MDB. Когда включено многоадресное прослушивание (snooping) для каждого VLAN, многоадресный контекст для каждого порта отключается на каждом порту, и порт удаляется из глобального списка портов маршрутизатора: # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 # ip link add name dummy1 up master br1 type dummy # ip link set dev dummy1 type bridge_slave mcast_router 2 $ bridge -d mdb show | grep router router ports on br1: dummy1 # ip link set dev br1 type bridge mcast_vlan_snooping 1 $ bridge -d mdb show | grep router Однако порт может быть повторно добавлен в глобальный список, даже когда многоадресное прослушивание для каждого VLAN включено: # ip link set dev dummy1 type bridge_slave mcast_router 0 # ip link set dev dummy1 type bridge_slave mcast_router 2 $ bridge -d mdb show | grep router router ports on br1: dummy1 Начиная с коммита 4b30ae9adb04 ("net: bridge: mcast: re-implement br_multicast_{enable, disable}_port functions"), когда включено многоадресное прослушивание для каждого VLAN, отключение многоадресной рассылки на порту отключает многоадресные контексты для каждого {порта, VLAN}, а не для каждого порта. В результате порт останется в глобальном списке портов маршрутизатора даже после его удаления. Это приведёт к use-after-free [1] при обходе списка (например, при добавлении нового порта в список): # ip link del dev dummy1 # ip link add name dummy2 up master br1 type dummy # ip link set dev dummy2 type bridge_slave mcast_router 2 Аналогичным образом, устаревшие записи также можно найти в списке портов маршрутизатора для каждого VLAN. Когда многоадресное прослушивание для каждого VLAN отключено, контексты для каждого {порта, VLAN} отключаются на каждом порту, и порт удаляется из списка портов маршрутизатора для каждого VLAN: # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 mcast_vlan_snooping 1 # ip link add name dummy1 up master br1 type dummy # bridge vlan add vid 2 dev dummy1 # bridge vlan global set vid 2 dev br1 mcast_snooping 1 # bridge vlan set vid 2 dev dummy1 mcast_router 2 $ bridge vlan global show dev br1 vid 2 | grep router router ports: dummy1 # ip link set dev br1 type bridge mcast_vlan_snooping 0 $ bridge vlan global show dev br1 vid 2 | grep router Однако порт может быть повторно добавлен в список для каждого VLAN, даже когда многоадресное прослушивание для каждого VLAN отключено: # bridge vlan set vid 2 dev dummy1 mcast_router 0 # bridge vlan set vid 2 dev dummy1 mcast_router 2 $ bridge vlan global show dev br1 vid 2 | grep router router ports: dummy1 Когда VLAN удаляется из порта, многоадресный контекст для каждого {порта, VLAN} не будет отключён, поскольку многоадресное прослушивание не включено на VLAN. В результате порт останется в списке портов маршрутизатора для каждого VLAN, даже если он больше не является членом VLAN. Это приведёт к use-after-free [2] при обходе списка (например, при добавлении нового порта в список): # ip link add name dummy2 up master br1 type dummy # bridge vlan add vid 2 dev dummy2 # bridge vlan del vid 2 dev dummy1 # bridge vlan set vid 2 dev dummy2 mcast_router 2 Исправьте эти проблемы, удалив порт из соответствующего (глобального или для каждого VLAN) списка портов маршрутизатора в br_multicast_port_ctx_deinit(). Эта функция вызывается при удалении порта с многоадресным контекстом для каждого порта и при удалении VLAN с многоадресным контекстом для каждого {порта, VLAN}. Обратите внимание, что удаления таймера многоадресного маршрутизатора недостаточно, поскольку он обрабатывает только временные состояния многоадресного маршрутизатора (1 или 3), а не постоянное (2). [1] BUG: KASAN: slab-out-of-bounds in br_multicast_add_router.part.0+0x3f1/0x560 Write of size 8 at addr ffff888004a67328 by task ip/384 [...] Call Trace: <TASK> dump_stack ---обрезано---
Ответственное использование
Используйте информацию об уязвимостях только в тех системах, которыми вы владеете или имеете право тестировать. Kitploit ссылается на метаданные общедоступных исследований и не хранит код эксплойта или вредоносные полезные данные.