Tinklaraštis

DirtyFrag: nauja Linux branduolio spraga ir ką daryti dabar pat

dirtyflag_en
Linux

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ė:

  1. RCE per pažeidžiamą WordPress plugin’ą, pasenusį PHP arba atvirą servisą
  2. Užpuolikas dirba www-data arba kito neprivilegijuoto vartotojo vardu
  3. 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:

  1. Pridėti modulių blacklist — dvi komandos, penkios minutės.
  2. Įsitikinti, kad PHP-FPM izoliuotas per systemd su NoNewPrivileges=yes.
  3. 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.

Leave your thought here

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *