Год назад в подсистеме Linux Netfilter (модуле ядра nf_tables) была выявлена и устранена уязвимость двойного освобождения памяти. Недавно для нее был создан PoC-эксплойт, позволяющий локально повысить привилегии до root.
Причиной появления проблемы CVE-2024-26809 является логическая ошибка, проявляющаяся при выполнении функции nft_pipapo_destroy() на наборах политик с флагом dirty («грязный»). Когда какой-то элемент сдублирован, он из-за перекрытия областей памяти удаляется дважды.
Вызвать ошибку double-free, по словам автора PoC, можно следующим образом:
- Создать pipapo-набор (A).
- Создать в нем элемент B.
- Добавить элемент C, чтобы отмаркировать A как dirty.
- Одновременно подать команду на уничтожение A — nft_pipapo_destroy() удалит B дважды из-за CVE-2024-26809.
Эксплойт требует наличия доступа к nftables (прав CAP_NET_ADMIN, которые можно получить в любом user namespace или network namespace) и выполняется примерно так же, как CVE-2024-1085 — через манипуляцию данными в куче с использованием кеша ядра kmalloc-256. Успешная атака откроет возможность для выполнения любого кода на уровне ядра.
Уязвимости подвержены Linux версий 6.1-rc1 и новее, а также 5.15.54 и выше. Патч опубликован в виде коммита, пользователям настоятельно рекомендуется произвести обновление.
Заметим, уязвимости по памяти всплывают в Linux Netfilter с завидной регулярностью. Такие дыры очень опасны, так как позволяют полностью скомпрометировать систему.