DirtyFrag: nauja Linux branduolio spraga ir ką daryti dabar pat
Įsivaizduok: tavo serveris veikia normaliai. nginx tiekia puslapius, fail2ban blokuoja botus, Cloudflare filtruoja šiukšles. Sukonfigūravai ModSecurity, įdiegei WAF, uždarei nereikalingus prievadus. Serveris — tvirtovė.
Tada kažkas suranda SQL injection senam plugin’e, gauna RCE www-data vardu, paleidžia vieną komandą — ir tampa root.
Sveiki atvykę į DirtyFrag.
KAS NUTIKO
2026 m. gegužės 7 d. saugumo tyrėjas Hyunwoo Kim paskelbė techninę informaciją apie Linux branduolio pažeidžiamumą, kurį pavadino DirtyFrag. Embargo buvo pažeistas pašalinio asmens dar prieš tai, kai distribucijos suspėjo paruošti pataisas — todėl veikiantis exploit tapo viešai prieinamas anksčiau nei bet koks pataisymas.
Pažeidžiamumui priskirti du CVE:
— CVE-2026-43284 — xfrm-ESP Page-Cache Write (IPsec, moduliai esp4/esp6)
— CVE-2026-43500 — RxRPC Page-Cache Write (modulis rxrpc)
CVSS 3.1: 8.8 (HIGH) CVE-2026-43284 ir 7.8 (HIGH) CVE-2026-43500.
Paveiktos distribucijos: Ubuntu, Debian, RHEL, AlmaLinux, Fedora, openSUSE, CentOS Stream — praktiškai visos pagrindinės serverinės distribucijos. Pažeidžiamumas egzistuoja Linux branduoliuose nuo maždaug 2017 metų.
KAIP TAI VEIKIA (BE ASSEMBLERO)
Linux branduolys naudoja page cache — tai tarsi operatyvinė atmintis failams, nuskaitytiems iš disko. Kai branduolys skaito /etc/passwd arba /usr/bin/su, jis įrašo turinį į page cache ir toliau dirba su talpykloje esančia versija.
DirtyFrag išnaudoja dvi klaidas IPsec ESP ir rxrpc iššifravimo keliuose. Tam tikromis sąlygomis (duomenų perdavimas per splice(2)/sendfile(2)) branduolys iššifruoja duomenis tiesiai virš puslapių, į kuriuos neprivilegijuotas procesas vis dar turi nuorodą. Rezultatas — rašymas į page cache be autorizacijos.
Ką tai suteikia užpuolikui? Galimybę pakeisti sistemos failo turinį atmintyje. Pavyzdžiui, modifikuoti /usr/bin/su taip, kad vietoj slaptažodžio paprašymo jis iškart atvertų root shell. Failas diske lieka nepakeistas — branduolys tiesiog grąžina naują puslapį iš talpyklos.
Trys savybės, dėl kurių DirtyFrag ypač pavojingas:
— Nėra race condition. Tai deterministinė klaida, o ne laiko atakos tipo išnaudojimas.
— Aukštas sėkmingos eksploatacijos procentas.
— Branduolys nesugriūva net nesėkmingo bandymo atveju — ataką sunku aptikti pagal crashes.
TAČIAU YRA NIUANSAS
DirtyFrag yra LPE (Local Privilege Escalation) — ne nuotolinė ataka. Užpuolikas jau turi turėti galimybę vykdyti kodą serveryje.
Tipinė atakos grandinė:
- RCE per pažeidžiamą WordPress plugin’ą, pasenusį PHP arba atvirą servisą
- Užpuolikas dirba www-data arba kito neprivilegijuoto vartotojo vardu
- Paleidžia DirtyFrag — ir gauna root
Todėl gerai sukonfigūruotas stack’as (Cloudflare + WAF + nftables + fail2ban) sumažina riziką, bet jos visiškai nepanaikina. Jei yra bet kokia spraga pradiniam priėjimui — DirtyFrag paverčia ją visiška serverio kontrole.
KĄ DARYTI DABAR PAT
1 žingsnis. Patikrink, ar įkelti pažeidžiami moduliai
lsmod | grep -E 'esp4|esp6|rxrpc'
Jei išvestis tuščia — jie neįkelti. Tačiau blacklist vis tiek reikalingas: moduliai gali įsikelti po kito perkrovimo arba tam tikrų tinklo operacijų metu.
2 žingsnis. Užblokuok modulius (pagrindinis workaround)
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf"
sudo rmmod esp4 esp6 rxrpc 2>/dev/null
echo "Atlikta"
Tai saugu daugumai serverių. Išimtis: jei naudoji IPsec VPN arba AFS — pirmiausia patikrink, ar tikrai reikalingi šie moduliai.
3 žingsnis. Išvalyk page cache
Jei įtari, kad kas nors jau bandė išnaudoti pažeidžiamumą — išstumk potencialiai pažeistus puslapius iš talpyklos:
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Tai saugu veikiančiame serveryje. Branduolys tiesiog atlaisvins švarią talpyklą, kitas failų skaitymas vyks tiesiai iš disko.
4 žingsnis. Atnaujink branduolį kai tik pasirodys pataisa
Ubuntu/Debian:
sudo apt update && sudo apt upgrade -y
sudo reboot
RHEL/AlmaLinux/Fedora:
sudo dnf clean metadata && sudo dnf upgrade -y
sudo reboot
Po perkrovimo su pataisytu branduoliu pašalink workaround:
sudo rm /etc/modprobe.d/dirtyfrag.conf
5 žingsnis. Izoliuok PHP-FPM per systemd
Jei dar nepadaryta — tai gera bendroji praktika, kuri riboja žalą esant pradiniam RCE:
sudo systemctl edit php8.3-fpm
Pridėk:
[Service]
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
sudo systemctl daemon-reload && sudo systemctl restart php8.3-fpm
NoNewPrivileges=yes — tai pagrindinė direktyva, kuri neleidžia procesui įgyti aukštesnių privilegijų nei turimos paleidimo metu. Net jei www-data paleis DirtyFrag — privilegijų padidinimas bus užblokuotas systemd lygmeniu.
6 žingsnis. Atskiras DB serveris — nepamirški jo
„Mano duomenų bazė privačiame tinkle, niekas nepasiekiamas” — klasikinė klaida. Jei web serveris kompromituotas, užpuolikas jau yra tavo tinklo viduje. Vienas šuolis — ir jis DB serveryje. Toliau DirtyFrag daro savo.
Tie patys du minutės darbo DB serveryje. IPsec ten tikrai nereikalingas — blokuok be abejonių:
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf"
sudo rmmod esp4 esp6 rxrpc 2>/dev/null
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Ir NoNewPrivileges=yes pačiai duomenų bazės paslaugai:
sudo systemctl edit postgresql # arba mysql / mariadb
[Service]
NoNewPrivileges=yes
PrivateTmp=yes
sudo systemctl daemon-reload && sudo systemctl restart postgresql
KUR SEKTI PATAISŲ STATUSĄ
Ubuntu pranešimai apie saugumą: https://ubuntu.com/security/notices
AlmaLinux errata: https://errata.almalinux.org
RHEL saugumo biuletenis: https://access.redhat.com/security/vulnerabilities/RHSB-2026-003
Stebėk branduolio atnaujinimus su žyma „fixes CVE-2026-43284” — kai tik pasirodys, atnaujink ir perkrauk serverį.
JEIGU SERVERIS JAU GALĖJO BŪTI PAŽEISTAS
Požymiai, kuriuos verta patikrinti:
— Netikėti procesai, veikiantys root arba nežinomų vartotojų vardu
— Pakeitimai /etc/passwd, /etc/sudoers, /etc/crontab (net jei failas diske atrodo normaliai — patikrink hash)
— Nauji SSH raktai ~/.ssh/authorized_keys
— Įtartinas išeinantis srautas nftables žurnaluose
# Patikrinti sisteminių dvejetainių failų hash'us
sudo debsums -c 2>/dev/null | head -20 # Debian/Ubuntu
sudo rpm -Va 2>/dev/null | grep -E '^..5' | head -20 # RHEL/AlmaLinux
# Paskutiniai prisijungimai
last -20
lastb -20
# Procesai, veikiantys root vardu
ps aux | grep ^root
IŠVADA
DirtyFrag — ne panika, bet veiksmas. Pažeidžiamumas realus, exploit viešas, o pataisos kai kurių distribucijų dar laukia.
Trys dalykai, kuriuos reikia padaryti šiandien:
- Pridėti modulių blacklist — dvi komandos, penkios minutės.
- Įsitikinti, kad PHP-FPM izoliuotas per systemd su NoNewPrivileges=yes.
- Užsiprenumeruoti savo distribucijos saugumo pranešimus ir atnaujinti branduolį iškart pasirodžius pataisai.
Jei tavo stack’as jau apima Cloudflare + WAF + fail2ban + nftables — esi geroje pozicijoje. DirtyFrag neveikia be pradinio priėjimo, o tavo užduotis — to priėjimo nesuteikti.
Autorius: sysadmin.courses
Kursas „Linux Server Security: nuo pradedančiojo iki profesionalo” — praktinis Linux serverių saugumas tiems, kas nori suprasti, o ne tik kopijuoti komandas.
