В ядре Linux устранена следующая уязвимость:
wifi: mac80211: исправить разыменование NULL в mesh_matches_local()
mesh_matches_local() безоговорочно разыменовывает ie->mesh_config на
сравнить параметры конфигурации сетки. При звонке из
mesh_rx_csa_frame(), проанализированные элементы кадра действия могут не содержать
Mesh Configuration IE, оставляя ie->mesh_config NULL и запуская
Разыменование NULL-указателя ядра. Два других абонента уже в безопасности:
- ieee80211_mesh_rx_bcn_presp() перед этим проверяет !elems->mesh_config
вызов mesh_matches_local()
- mesh_plink_get_event() доступен только через
mesh_process_plink_frame(), который также проверяет !elems->mesh_config
mesh_rx_csa_frame() — единственный вызывающий объект, который передает необработанные проанализированные элементы.
в mesh_matches_local() без защиты mesh_config.
Соседний
злоумышленник может воспользоваться этим, отправив созданный кадр действия CSA, который
включает действительный IE идентификатора сети, но не содержит IE конфигурации сети,
сбой ядра. Записанный журнал сбоев:
Упс: общая ошибка защиты, вероятно, по неканоническому адресу...
KASAN: null-ptr-deref в диапазоне [0x0000000000000000-0x0000000000000007]
Рабочая очередь:events_unbound cfg80211_wiphy_work
[...]
Отслеживание вызова:
<ЗАДАЧА>
? __pfx_mesh_matches_local (net/mac80211/mesh.c:65)
ieee80211_mesh_rx_queued_mgmt (net/mac80211/mesh.c:1686)
[...]
ieee80211_iface_work (net/mac80211/iface.c:1754 net/mac80211/iface.c:1802)
[...]
cfg80211_wiphy_work (net/wireless/core.c:426)
process_one_work (net/kernel/workqueue.c:3280)
? Assign_work (net/kernel/workqueue.c:1219)
рабочий_поток (net/kernel/workqueue.c:3352)
? __pfx_worker_thread (net/kernel/workqueue.c:3385)
kthread (net/kernel/kthread.c:436)
[...]
ret_from_fork_asm (net/arch/x86/entry/entry_64.S:255)
</TASK>
Этот патч добавляет проверку NULL для ie->mesh_config в верхней части
mesh_matches_local() для возврата false раньше, когда конфигурация сетки
ИЕ отсутствует.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: wifi: mac80211: fix NULL deref in mesh_matches_local() mesh_matches_local() unconditionally dereferences ie->mesh_config to compare mesh configuration parameters. When called from mesh_rx_csa_frame(), the parsed action-frame elements may not contain a Mesh Configuration IE, leaving ie->mesh_config NULL and triggering a kernel NULL pointer dereference. The other two callers are already safe: - ieee80211_mesh_rx_bcn_presp() checks !elems->mesh_config before calling mesh_matches_local() - mesh_plink_get_event() is only reached through mesh_process_plink_frame(), which checks !elems->mesh_config, too mesh_rx_csa_frame() is the only caller that passes raw parsed elements to mesh_matches_local() without guarding mesh_config. An adjacent attacker can exploit this by sending a crafted CSA action frame that includes a valid Mesh ID IE but omits the Mesh Configuration IE, crashing the kernel. The captured crash log: Oops: general protection fault, probably for non-canonical address ... KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007] Workqueue: events_unbound cfg80211_wiphy_work [...] Call Trace: <TASK> ? __pfx_mesh_matches_local (net/mac80211/mesh.c:65) ieee80211_mesh_rx_queued_mgmt (net/mac80211/mesh.c:1686) [...] ieee80211_iface_work (net/mac80211/iface.c:1754 net/mac80211/iface.c:1802) [...] cfg80211_wiphy_work (net/wireless/core.c:426) process_one_work (net/kernel/workqueue.c:3280) ? assign_work (net/kernel/workqueue.c:1219) worker_thread (net/kernel/workqueue.c:3352) ? __pfx_worker_thread (net/kernel/workqueue.c:3385) kthread (net/kernel/kthread.c:436) [...] ret_from_fork_asm (net/arch/x86/entry/entry_64.S:255) </TASK> This patch adds a NULL check for ie->mesh_config at the top of mesh_matches_local() to return false early when the Mesh Configuration IE is absent.