
Патчи ядра для уязвимости Dirty Frag (CVE-2026-43284, CVE-2026-43500)
Серия патчей для класса уязвимостей Dirty Frag, обнаруженных Hyunwoo Kim (@v4bel).
Dirty Frag позволяет непривилегированному локальному пользователю перезаписывать произвольные байты страничного кэша файлов, доступных только для чтения (например, /usr/bin/su, /etc/passwd), что приводит к локальному повышению привилегий до root во всех основных дистрибутивах Linux.
Патчи в этом репозитории НЕ были написаны сопровождающим этого репозитория.
- CVE-2026-43284 (патч ESP): автор — Hyunwoo Kim (@v4bel) и Kuan-Ting Chen. Включён в основную ветку ядра Linux в коммите
f4c50a4034e6.- CVE-2026-43500 (патч RxRPC): автор — Hyunwoo Kim (@v4bel). Отправлен в список рассылки netdev по адресу
afKV2zGR6rrelPC7@v4bel, ожидает включения.Этот репозиторий — отформатированное зеркало этих патчей, собранных здесь для удобства в формате, готовом для
git am. Все заслуги принадлежат оригинальным авторам. Оригинальное исследование и PoC: https://github.com/V4bel/dirtyfrag
4.10 (коммит cac2661c53f3, 2017-01-17) до 6.x до f4c50a4034e66.4 (коммит 2dc334f1a63a, 2023-06-08) до актуальной версии (патч ещё не включён)git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
# Применить патч 1 (ESP — CVE-2026-43284)
git am 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
# Применить патч 2 (RxRPC — CVE-2026-43500)
git am 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
patch (если git am не сработает из-за расхождения контекста)patch -p1 < 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
patch -p1 < 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
Если вы не можете применить патч немедленно, заблокируйте уязвимые модули:
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
> /etc/modprobe.d/dirtyfrag.conf && \
rmmod esp4 esp6 rxrpc 2>/dev/null; \
echo 3 > /proc/sys/vm/drop_caches"
Предупреждение: Удаление
esp4/esp6отключает IPsec ESP. Оцените последствия перед применением на производственных системах.
Оба варианта имеют одну и ту же корневую причину: путь нулевого копирования splice() в ядре помещает страницу страничного кэша, доступную только для чтения, непосредственно во фрагмент skb без семантики копирования при записи. Последующие криптографические операции на месте записывают в эту страницу страничного кэша, навсегда изменяя содержимое кэшированного файла.
splice(file_fd → pipe → socket)
│
▼
skb->frags[0].page = &page_cache_page_P <- нет CoW!
│
▼
[esp_input / rxkad_verify_packet_1]
расшифровка AEAD/fcrypt на месте src == dst == &P
│
▼
STORE в page_cache_page_P <- произвольная запись в кэш файла, доступного только для чтения
| Файл | CVE | Подсистема | Статус |
|---|
0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch | CVE-2026-43284 | net/ipv4/esp4.c, net/ipv6/esp6.c, net/ipv4/ip_output.c, net/ipv6/ip6_output.c | ✅ Включён в основную ветку (f4c50a4034e6) |
0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch | CVE-2026-43500 | net/rxrpc/call_event.c, net/rxrpc/conn_event.c | ⏳ Отправлен в список рассылки netdev (afKV2zGR6rrelPC7@v4bel), ожидает включения |
| Вариант | Подход |
|---|
| ESP | Пометить фрагменты splice флагом SKBFL_SHARED_FRAG; проверять этот флаг в esp_input()/esp6_input(), чтобы принудительно вызывать skb_cow_data() перед криптографией на месте |
| RxRPC | Расширить проверку skb_cloned() до (skb_cloned(skb) || skb->data_len), чтобы нелинейные skb (которые могут содержать фрагменты splice) всегда копировались перед расшифровкой на месте |