В ядре Linux устранена следующая уязвимость:
netfilter: nf_tables: исправлено использование после освобождения в nf_tables_addchain()
nf_tables_addchain() публикует цепочку в table->chains через
list_add_tail_rcu() (в nft_chain_add()) перед регистрацией перехватчиков. Если nf_tables_register_hook() завершается неудачно, путь к ошибке вызывает
nft_chain_del() (list_del_rcu()), за которым следует nf_tables_chain_destroy()
без промежуточного периода RCU. Это создает два условия использования после освобождения:
1) Плоскость управления: nf_tables_dump_chains() пересекает таблицу->цепочки
под rcu_read_lock().
Параллельный дамп все еще может ходить
цепочку, когда путь ошибки освобождает ее.
2) Путь пакета: для NFPROTO_INET кратко nf_register_net_hook()
устанавливает перехватчик IPv4 до сбоя регистрации IPv6. Пакеты
вход в nft_do_chain() через временный перехват IPv4 все еще может быть
разыменование цепочки->blob_gen_X, когда путь ошибки освобождает
цепь. Добавьте синхронизацию_rcu() между nft_chain_del() и уничтожением цепочки.
так что все читатели RCU - как потоки дампа, так и пакеты в полете
оценка - завершена до освобождения цепочки.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_tables: fix use-after-free in nf_tables_addchain() nf_tables_addchain() publishes the chain to table->chains via list_add_tail_rcu() (in nft_chain_add()) before registering hooks. If nf_tables_register_hook() then fails, the error path calls nft_chain_del() (list_del_rcu()) followed by nf_tables_chain_destroy() with no RCU grace period in between. This creates two use-after-free conditions: 1) Control-plane: nf_tables_dump_chains() traverses table->chains under rcu_read_lock(). A concurrent dump can still be walking the chain when the error path frees it. 2) Packet path: for NFPROTO_INET, nf_register_net_hook() briefly installs the IPv4 hook before IPv6 registration fails. Packets entering nft_do_chain() via the transient IPv4 hook can still be dereferencing chain->blob_gen_X when the error path frees the chain. Add synchronize_rcu() between nft_chain_del() and the chain destroy so that all RCU readers -- both dump threads and in-flight packet evaluation -- have finished before the chain is freed.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 5
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16
|
6.1.165
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.2
|
6.6.128
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.7
|
6.12.75
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.13
|
6.18.14
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.19
|
6.19.4
|