{"id":20374,"date":"2026-06-10T19:47:08","date_gmt":"2026-06-10T16:47:08","guid":{"rendered":"https:\/\/sysadmin.courses\/cve-2026-23111-%d0%be%d0%b4%d0%b8%d0%bd-%d0%b2%d0%be%d1%81%d0%ba%d0%bb%d0%b8%d1%86%d0%b0%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9-%d0%b7%d0%bd%d0%b0%d0%ba-%d0%b8-%d0%bd%d0%b5%d0%bf%d1%80\/"},"modified":"2026-06-11T20:02:35","modified_gmt":"2026-06-11T17:02:35","slug":"cve-2026-23111-vienas-sauktukas-ir-neprivilegijuotas-vartotojas-gauna-root","status":"publish","type":"post","link":"https:\/\/sysadmin.courses\/lt\/cve-2026-23111-vienas-sauktukas-ir-neprivilegijuotas-vartotojas-gauna-root\/","title":{"rendered":"CVE-2026-23111: Vienas \u0161auktukas \u2014 ir neprivilegijuotas vartotojas gauna root"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u012esivaizduokite: j\u016bs\u0173 serveryje dirba paprastas vartotojas. Jokio sudo, joki\u0173 ypating\u0173 teisi\u0173, negali skaityti \/root, negali liesti sistemini\u0173 fail\u0173. Po keli\u0173 sekund\u017ei\u0173 \u2014 jau root. Ne tod\u0117l, kad nulau\u017e\u0117 ka\u017ek\u0105 sud\u0117tingo. Tod\u0117l, kad vienas k\u016br\u0117jas Linux branduolyje atsitiktinai \u012fra\u0161\u0117 \u0161auktuk\u0105 ten, kur jo visi\u0161kai netur\u0117jo b\u016bti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CVE-2026-23111 \u2014 use-after-free tipo pa\u017eeid\u017eiamumas Linux branduolio nf_tables posistemyje, Ubuntu vertinamas CVSS 7.8 (High). Jis leid\u017eia neprivilegijuotam vartotojui gauti root teises Debian ir Ubuntu sistemose. Veikiantis vie\u0161as i\u0161naudojimas jau paskelbtas \u2014 Exodus Intelligence tyr\u0117jo Oliver Sieber, su &gt;99% stabilumu neapkrautoje sistemoje, o FuzzingLabs PoC pasirod\u0117 dar baland\u012f. Patvirtint\u0173 naudojimo realioje aplinkoje (in the wild) atvej\u0173 publikacijos metu n\u0117ra, ta\u010diau pataisymas i\u0161leistas vasar\u012f \u2014 tie, kurie neatnaujino, jau kelis m\u0117nesius gyvena \u0161alia vie\u0161o i\u0161naudojimo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAS YRA NF_TABLES<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nftables \u2014 Linux branduolio posistemis, pakeit\u0119s iptables. Visa \u0161iuolaikin\u0117 Linux ugniasien\u0117 veikia per j\u012f: paket\u0173 filtravimas, NAT, srauto \u017eym\u0117jimas. Naudojate <code>nft<\/code> tiesiogiai, firewalld ar nftables per systemd \u2014 po gaubtu visur tas pats variklis. Daugumoje \u0161iuolaikini\u0173 serveri\u0173 nf_tables veikia pagal nutyl\u0117jim\u0105, net jei niekada nesukonfig\u016bravote ugniasien\u0117s taisykli\u0173 rankiniu b\u016bdu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">nf_tables viduje objektai i\u0161d\u0117styti hierarchi\u0161kai: lentel\u0117s turi grandines (chains), grandin\u0117s turi taisykles, taisykl\u0117s sudarytos i\u0161 i\u0161rai\u0161k\u0173. Svarbiausia strukt\u016bra \u0161iam pa\u017eeid\u017eiamumui suprasti \u2014 verdict map, nuosprend\u017ei\u0173 \u017eem\u0117lapis. Tai atitikmen\u0173 lentel\u0117: paketas \u2192 veiksmas (priimti, atmesti ar per\u0161okti \u012f kit\u0105 grandin\u0119). Galite \u012fsivaizduoti j\u0105 kaip mar\u0161ruto lentel\u0119, tik ne adresams, o sprendimams apie paketo likim\u0105. Verdict map gali tur\u0117ti \u012fprastus elementus su konkre\u010diais raktais ir special\u0173 catchall element\u0105 \u2014 pakaital\u0105, kuris suveikia kai paketas neatitinka nieko kito, savoti\u0161k\u0105 taisykl\u0119 \u201eviskas kita \u2014 daryti \u0161tai taip&#8221;. Klaida ir sl\u0117p\u0117si b\u016btent jame.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kad ruleset pakeitimai b\u016bt\u0173 taikomi atomi\u0161kai \u2014 be lenktyni\u0173 su gyvuoju srautu \u2014 branduolys naudoja kart\u0173 kauki\u0173 (generation mask) mechanizm\u0105. Pakeitimai kaupiami \u201ekitoje kartoje&#8221; ir vienu perjungimu tampa aktyv\u016bs. Jei paketin\u0117 operacija (batch) baigiasi klaida, branduolys paleid\u017eia at\u0161aukimo faz\u0119 (abort phase), kuri turi pilnai visk\u0105 atkurti. Apversta logika sl\u0117p\u0117si b\u016btent tame atk\u016brime.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP VEIKIA KLAIDA<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Klaida \u2014 vienas simbolis: \u0161auktukas s\u0105lygoje funkcijoje <code>nft_map_catchall_activate()<\/code>. \u0160i funkcija vykdoma abort faz\u0117s metu, kad reaktyvuot\u0173 verdict map catchall elementus, deaktyvuotus at\u0161aukiamos transakcijos metu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Teisinga logika: praleisti jau aktyvius elementus, apdoroti neaktyvius. Lygiai taip para\u0161yta analogi\u0161ka funkcija \u012fprastiems elementams \u2014 <code>nft_mapelem_activate()<\/code>. Catchall versijoje s\u0105lyga apversta: funkcija praleisdavo neaktyvius ir apdorodavo aktyvius \u2014 tiksliai prie\u0161ingai nei reikia. Vienas <code>!<\/code> simbolis apvert\u0117 vis\u0105 logik\u0105 auk\u0161tyn kojomis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pasekm\u0117s konkre\u010dios. Kai verdict map su NFT_GOTO tipo catchall elementu (nurodan\u010diu grandin\u0119) i\u0161trinamas, grandin\u0117s nuorod\u0173 skaitliukas (<code>chain-&gt;use<\/code>) suma\u017einamas \u2014 tai normalu, nuoroda pa\u0161alinama. Abort faz\u0117je skaitliukas tur\u0117t\u0173 b\u016bti atkurtas, nes i\u0161trynimas at\u0161aukiamas. D\u0117l apverstos s\u0105lygos atk\u016brimas nevyksta \u2014 kiekvienas abort ciklas visam laikui suma\u017eina <code>chain-&gt;use<\/code>. Kai skaitliukas pasiekia nul\u012f, branduolys mano, kad niekas nebenukreipta \u012f grandin\u0119, DELCHAIN s\u0117kmingai atliekamas ir atlaisvina atmint\u012f \u2014 kol kiti objektai j\u0105 vis dar nurodo. Tai ir yra use-after-free: prieiga prie jau atlaisvintos atminties.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP TAI I\u0160NAUDOJAMA<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Privilegij\u0173 nereikia \u2014 tik prieiga prie user namespaces ir nf_tables, pagal nutyl\u0117jim\u0105 \u012fjungta Debian ir Ubuntu. Ubuntu 24.04 turi papildom\u0173 apribojim\u0173 namespace k\u016brimui, ta\u010diau \u017einomas ap\u0117jimas per <code>aa-exec -p trinity -- unshare -Urmin \/bin\/sh<\/code> \u2014 \u0161i komanda paleid\u017eia shell naujame namespace apeinant AppArmor profil\u012f, kuris paprastai riboja namespace k\u016brim\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ataka sudaryta i\u0161 keturi\u0173 paket\u0173 (batches). 1-as paketas: i\u0161trinti pipapo tipo verdict map su catchall elementu, tada ty\u010dia sukelti klaid\u0105 tame pa\u010diame pakete \u2014 tai paleid\u017eia abort faz\u0119 ir suma\u017eina grandin\u0117s nuorod\u0173 skaitliuk\u0105 jo neatkuriant. 2-as paketas: i\u0161si\u0173sti bet kuri\u0105 s\u0117kming\u0105 operacij\u0105 generation cursor perjungimui \u2014 be \u0161io \u017eingsnio kitas paketas neveiks teisingai. 3-ias paketas: v\u0117l i\u0161trinti verdict map \u2014 dabar catchall elementas aktyvus naujojo kartos at\u017evilgiu, grandin\u0117s nuorod\u0173 skaitliukas pasiekia nul\u012f. 4-as paketas: i\u0161trinti grandin\u0119 \u2014 tai pavyksta, nes skaitliukas lygus nuliui, nors bazin\u0117 grandin\u0117 vis dar turi taisykl\u0119, nurodan\u010di\u0105 j\u0105. Use-after-free gautas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toliau prasideda darbas su branduolio kr\u016bva (heap). NFT_MSG_GETRULE u\u017eklausa taisyklei, nurodan\u010diai atlaisvint\u0105 grandin\u0119, i\u0161kvie\u010dia <code>nft_verdict_dump()<\/code> \u2014 ji skaito grandin\u0117s pavadinim\u0105 kaip eilut\u0119 i\u0161 jau atlaisvintos atminties. \u012ed\u0117jus ten <code>seq_operations<\/code> strukt\u016br\u0105 per <code>open(\"\/proc\/self\/stat\", 0)<\/code>, u\u017epuolikas gauna rodiklio \u012f branduolio kod\u0105 nutek\u0117jim\u0105 ir apskai\u010diuoja branduolio bazin\u012f adres\u0105, apeidamas KASLR. Tada nuteka kr\u016bvos adresai, per <code>blob_gen_0<\/code> atlaisvintos grandin\u0117s manipuliavim\u0105 perima valdymo sraut\u0105 ir vykdoma ROP grandin\u0117. Rezultatas: <code>commit_creds(&amp;init_cred)<\/code> suteikia procesui root teises, <code>switch_task_namespaces()<\/code> ant PID 1 sugriauna namespace izoliacij\u0105, ir u\u017epuolikas tampa root serverio lygmenyje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAS NUTINKA TOLIAU \u2014 PRIKLAUSO NUO KONFIG\u016aRACIJOS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I\u0161naudojimas veikia Debian Bookworm ir Trixie, Ubuntu 22.04 LTS ir Ubuntu 24.04 LTS \u2014 su nedideliais ROP gad\u017eet\u0173 skirtumais tarp branduolio versij\u0173, nes funkcij\u0173 poslinkiai ir duomen\u0173 strukt\u016bros skiriasi tarp skirting\u0173 kompiliacij\u0173. I\u0161naudojimo stabilumas \u2014 &gt;99% neapkrautoje sistemoje ir apie 80% esant Apache benchmark apkrovai. Du nepriklausomi tyr\u0117j\u0173 kolektyvai rado skirtingus kelius iki root i\u0161 to paties pa\u017eeid\u017eiamumo \u2014 tai rei\u0161kia, kad u\u017eblokavus vien\u0105 keli\u0105 kitas lieka atviras.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Papildomos apsaugos priemon\u0117s padeda, bet n\u0117ra pilna apsauga. Jei SELinux veikia enforcing re\u017eimu, FuzzingLabs variante reikalingas papildomas \u017eingsnis: <code>selinux_state.enforcing<\/code> nustatymas \u012f nul\u012f per ROP grandin\u0119. ASLR neapsaugo \u2014 j\u012f apeina branduolio bazinio adreso nutek\u0117jimas, kuris \u012fvyksta dar prie\u0161 bet kok\u012f valdymo srauto per\u0117mim\u0105. Tikra apsauga yra tik dviem atvejais: branduolio pataisymas arba visi\u0161kas neprivilegijuot\u0173 user namespaces i\u0161jungimas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>REALUS ATAKOS SCENARIJUS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pa\u017eeid\u017eiamumas nenaudojamas nuotoliniu b\u016bdu \u2014 reikalingas vietinis shell. Tod\u0117l jis ypa\u010d pavojingas kaip antros stadijos ataka: RCE per pa\u017eeist\u0105 \u017einiatinklio program\u0105 duoda shell www-data vardu, o CVE-2026-23111 per kelias sekundes paver\u010dia t\u0105 shell \u012f root. U\u017epuolikas visi\u0161kai kontroliuoja server\u012f: skaito \/etc\/shadow, i\u0161traukia SSH raktus, perima sraut\u0105, modifikuoja sistemini\u0173 tarnyb\u0173 dvejetainius failus. Konteinerin\u0117 izoliacija subyra per <code>switch_task_namespaces()<\/code> i\u0161kvietim\u0105 ant PID 1 \u2014 u\u017epuolikas i\u0161eina u\u017e konteinerio namespace izoliacijos rib\u0173 ir atsiduria serverio lygmenyje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Did\u017eiausia rizika gresia daugiavartotojiniams serveriams, VPS su bendromis branduolio kopijomis, CI\/CD runneriams ir bendro naudojimo hostingo aplinkoms \u2014 visur, kur neprivilegijuoti vartotojai ar darbo kr\u016bviai gali kurti namespaces. Bendro naudojimo hostinge viena pa\u017eeista svetain\u0117 tampa \u012f\u0117jimo ta\u0161ku visam serveriui ir visoms gretimosioms svetain\u0117ms. Debes\u0173 serveryje su multi-tenant branduoliu \u2014 tai konteinerio pab\u0117gimo galimyb\u0117.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>LAIKO JUOSTA<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exodus Intelligence aptiko pa\u017eeid\u017eiamum\u0105 2025 m. prad\u017eioje nf_tables posistemio tyrimo metu. 2026 m. vasario 5 d. pataisymas pateko \u012f Linux branduolio upstream (komitas f41c5d151078c5348271ffaf8e7410d96f2d82f8) \u2014 pa\u0161alinta viena eilut\u0117 su apversta s\u0105lyga, t\u0105 pa\u010di\u0105 dien\u0105 priskirtas CVE-2026-23111. 2026 m. baland\u017eio 16 d. FuzzingLabs (Alexis ir Lyes), ruo\u0161damiesi Pwn2Own Berlin 2026, nepriklausomai atkartojo pa\u017eeid\u017eiamum\u0105 ir paskelb\u0117 piln\u0105 PoC su techniniu apra\u0161u. 2026 m. bir\u017eelio 8 d. Exodus Intelligence (Oliver Sieber) i\u0161leido i\u0161sam\u0173 writeup su veikian\u010diu i\u0161naudojimu, patvirtintu Debian Bookworm, Trixie, Ubuntu 22.04 LTS ir 24.04 LTS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tarpas tarp pataisymo (vasario 5 d.) ir pirmojo vie\u0161o veikian\u010dio i\u0161naudojimo (baland\u017eio 16 d.) buvo vos 70 dien\u0173. Per t\u0105 laik\u0105 neatnaujintos sistemos jau tur\u0117jo prie\u0161 save veikiant\u012f i\u0161naudojim\u0105 vie\u0161ai paskelbt\u0105. Bir\u017eelio m\u0117nes\u012f, kai pasirod\u0117 antrasis i\u0161samesnis writeup, \u0161is tarpas vir\u0161ijo keturis m\u0117nesius \u2014 tai rei\u0161kia, kad visa t\u0105 laik\u0105 neatnaujint\u0173 sistem\u0173 administratoriai dirbo su \u017einoma vie\u0161ai atskleista spraga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KOD\u0116L TAI SVARBU<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Linux branduolio LPE per nf_tables \u2014 ne nauja istorija. CVE-2022-1015, CVE-2022-1016, CVE-2022-32250, CVE-2023-32233 \u2014 \u0161is posistemis turi turting\u0105 CVE istorij\u0105, ir kaskart pagal pana\u0161i\u0105 schem\u0105: sud\u0117tingas transakcinis mechanizmas, retas vykdymo kelias, corner case kurio niekas netestavo. CVE-2026-23111 puikiai \u012fsilieja: komanda, pasirinkusi nf_tables Pwn2Own Berlin 2026 b\u016btent tod\u0117l, kad menkai \u017einojo posistem\u012f, nedelsiant rado i\u0161naudojam\u0105 klaid\u0105. Tai ne nes\u0117km\u0117 \u2014 tai sukauptos technin\u0117s skolos simptomas saugumui kriti\u0161kame kode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CVE-2026-23111 pasirod\u0117 ry\u0161kaus Linux LPE pa\u017eeid\u017eiamum\u0173 antpl\u016bd\u017eio fone. Pastaraisiais m\u0117nesiais tyr\u0117jai atskleid\u0117 Copy Fail (CVE-2026-31431) \u2014 klaid\u0105 copy-on-write mechanizme, Dirty Frag ir jo variant\u0105 Fragnesia (CVE-2026-46300) \u2014 heap fragmentation XFRM ESP-in-TCP posistemyje, DirtyDecrypt ir devyneri\u0173 met\u0173 senumo ptrace pa\u017eeid\u017eiamum\u0105 (CVE-2026-46333). Skirtingi posistemiai, skirtingos technikos \u2014 bet viena nuolatin\u0117 schema: neprivilegijuotas atsparos ta\u0161kas viduje, root serveryje i\u0161or\u0117je. Bendras vardiklis daugumai \u0161i\u0173 pa\u017eeid\u017eiamum\u0173 \u2014 user namespaces, atverian\u010dios neprivilegijuotiems vartotojams prieig\u0105 prie branduolio s\u0105saj\u0173. Organizacijos, neturin\u010dios tiesiogin\u0117s operacin\u0117s b\u016btinyb\u0117s neprivilegijuotiems user namespaces, tur\u0117t\u0173 rimtai apsvarstyti j\u0173 i\u0161jungim\u0105 pagal nutyl\u0117jim\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PAPILDOMAS APSAUGOS SLUOKSNIS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kartu su branduolio pataisymu verta apsvarstyti dar vien\u0105 po\u017ei\u016br\u012f \u2014 atakos pavir\u0161iaus ma\u017einim\u0105 u\u017eblokuojant nenaudojamus branduolio modulius. Dauguma serveri\u0173 paleid\u017eia t\u016bkstan\u010dius moduli\u0173, nors realiai naudoja tik kelis \u0161imtus. Kiekvienas nenaudojamas modulis yra potencialus vektorius kitam LPE atskleidimui. modulejail tai sprend\u017eia paprastai: nuskaito \u0161iuo metu \u012fkelt\u0173 moduli\u0173 s\u0105ra\u0161\u0105 ir sukuria modprobe.d juod\u0105j\u012f s\u0105ra\u0161\u0105 visiems kitiems. Jei modulis \u0161iuo metu nereikalingas \u2014 jis nebus \u012fkeltas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Svarbus apribojimas: modulejail reikia paleisti tik tada, kai sistema pasiek\u0117 darbin\u0119 b\u016bsen\u0105 \u2014 visos tarnybos paleistos, visos fail\u0173 sistemos sumontuotos, visi reikalingi tvarkykl\u0117s \u012fkelti. Paleidus per anksti rizikuojama \u012f juod\u0105j\u012f s\u0105ra\u0161\u0105 \u012ftraukti modulius, kurie v\u0117liau gali prireikti. At\u0161aukimas rankinis: i\u0161trinti <code>\/etc\/modprobe.d\/modulejail-blacklist.conf<\/code> ir perkrauti server\u012f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u012ediegimas Debian\/Ubuntu sistemose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install modulejail<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">RHEL\/Fedora\/Alma\/Rocky sistemose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dnf install modulejail<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Paleidimas pasiekus darbin\u0119 b\u016bsen\u0105 \u2014 konservatyvus profilis skirtas serveriams:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo modulejail<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">modulejail netaiso pa\u017eeid\u017eiamum\u0173 ir netikrina CVE duomen\u0173 bazi\u0173 \u2014 tai atakos pavir\u0161iaus ma\u017einimo \u012frankis, o ne branduolio atnaujinim\u0173 pakaitalas. Naudokite j\u012f kaip papildom\u0105 sluoksn\u012f po to, kai branduolys jau atnaujintas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ATNAUJINIMAS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pataisymas upstream nuo 2026 m. vasario 5 d., distribucijos i\u0161leido atnaujintus branduolio paketus. Debian ir Ubuntu sistemose atnaujinimas paleid\u017eiamas \u012fprasta komanda \u2014 <code>apt update<\/code> sinchronizuoja paket\u0173 s\u0105ra\u0161us su repozitorijomis, <code>apt upgrade<\/code> \u012fdiegia visus galimus atnaujinimus, \u012fskaitant nauj\u0105 branduol\u012f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt upgrade<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po naujo branduolio \u012fdiegimo b\u016btinas perkrovimas \u2014 atnaujintas paketas yra diske, ta\u010diau sistema toliau veikia su senu branduoliu atmintyje iki paleidimo i\u0161 naujo. Komanda <code>reboot<\/code> tvarkingai u\u017ebaigia visus procesus ir pakrauna sistem\u0105 su nauju branduoliu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo reboot<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po perkrovimo patikrinkite, kad sistema tikrai veikia su atnaujintu branduoliu \u2014 komanda <code>uname -r<\/code> i\u0161veda veikian\u010dio branduolio versij\u0105. Ubuntu ir Debian saugumo pataisymai da\u017enai atgaline data perkeliami (backport) nekei\u010diant pagrindin\u0117s versijos numerio, tod\u0117l versija gali atrodyti kaip anks\u010diau, bet kompiliavimo data bus naujesn\u0117. Nor\u0117dami \u012fsitikinti, kad paketas aktualus, patikrinkite kompiliavimo dat\u0105 komanda <code>apt-cache policy linux-image-$(uname -r)<\/code> \u2014 eilut\u0117je Installed tur\u0117t\u0173 b\u016bti data po 2026 m. vasario:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uname -r\napt-cache policy linux-image-$(uname -r)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei \u0161iuo metu atnaujinti ne\u012fmanoma, laikina priemon\u0117 \u2014 i\u0161jungti neprivilegijuotus user namespaces. Tai blokuoja i\u0161naudojimo vektori\u0173, nes u\u017epuolikas nebegal\u0117s sukurti izoliuoto namespace darbui su nf_tables be privilegij\u0173. \u0160alutinis poveikis: nebeveiks rootless konteineriai (rootless Docker, Podman, LXC), kai kurie nar\u0161ykli\u0173 sandbox ir k\u016brimo \u012frankiai. Debian ir Ubuntu reikalingi abu parametrai \u2014 <code>kernel.unprivileged_userns_clone<\/code> i\u0161jungia user namespace k\u016brim\u0105 branduolio lygiu, <code>user.max_user_namespaces<\/code> nustatomas \u012f nul\u012f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo sysctl -w kernel.unprivileged_userns_clone=0\nsudo sysctl -w user.max_user_namespaces=0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0160ios reik\u0161m\u0117s nustatomos i\u0161 naujo po perkrovimo. Kad i\u0161likt\u0173 nuolat, prid\u0117kite eilutes \u012f sysctl konfig\u016bracijos fail\u0105 \u2014 branduolys jas automati\u0161kai perskaitys paleidimo metu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kernel.unprivileged_userns_clone=0\nuser.max_user_namespaces=0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">RHEL tipo sistemose parametras <code>kernel.unprivileged_userns_clone<\/code> neegzistuoja \u2014 ten pakanka tik <code>user.max_user_namespaces=0<\/code>. Debian ir Ubuntu reikalingi abu: nusta\u010dius tik vien\u0105, antrasis parametras palieka vektori\u0173 i\u0161 dalies atvir\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>I\u0160VADOS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vienas simbolis abort faz\u0117s s\u0105lygoje \u2014 ir neprivilegijuotas vartotojas gauna root. Ne tod\u0117l, kad ataka sud\u0117tinga, o tod\u0117l, kad nf_tables transakcines logikos corner case met\u0173 metus niekas netestavo, o user namespaces atv\u0117r\u0117 prie jo prieig\u0105 be joki\u0173 privilegij\u0173. Veikiantis vie\u0161as i\u0161naudojimas su 99% stabilumu jau egzistuoja, patvirtint\u0173 naudojimo realioje aplinkoje atvej\u0173 kol kas n\u0117ra \u2014 ta\u010diau tas langas u\u017esidaro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sistemos administratoriams: atnaujinkite branduol\u012f ir perkraukite server\u012f. Tai vienintelis patikimas sprendimas. Jei negalima nedelsiant \u2014 i\u0161junkite neprivilegijuotus user namespaces kaip laikin\u0105 priemon\u0119, \u017einant, kad tai paveiks konteinerines darbo kr\u016bvas. Prioritetas vis\u0173 pirma bendro naudojimo hostingo serveriams, konteineri\u0173 hostams ir CI\/CD runneriams \u2014 ten neprivilegijuotas shell grei\u010diausiai virsta root. Debes\u0173 aplink\u0173 su multi-tenant branduoliais teik\u0117jams \u2014 tai auk\u0161\u010diausio prioriteto u\u017eduotis dabar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u012esivaizduokite: j\u016bs\u0173 serveryje dirba paprastas vartotojas. Jokio sudo, joki\u0173 ypating\u0173 teisi\u0173, negali skaityti \/root, negali liesti sistemini\u0173 fail\u0173. Po keli\u0173 sekund\u017ei\u0173 \u2014 jau root. Ne tod\u0117l, kad nulau\u017e\u0117 ka\u017ek\u0105 sud\u0117tingo. Tod\u0117l, kad vienas k\u016br\u0117jas Linux branduolyje atsitiktinai \u012fra\u0161\u0117 \u0161auktuk\u0105 ten, kur jo visi\u0161kai netur\u0117jo b\u016bti. CVE-2026-23111 \u2014 use-after-free tipo pa\u017eeid\u017eiamumas Linux branduolio nf_tables posistemyje, Ubuntu vertinamas CVSS 7.8 (High). Jis leid\u017eia neprivilegijuotam vartotojui gauti root teises Debian ir Ubuntu sistemose. Veikiantis vie\u0161as i\u0161naudojimas jau paskelbtas \u2014 Exodus Intelligence tyr\u0117jo Oliver Sieber, su &gt;99% stabilumu neapkrautoje sistemoje, o FuzzingLabs PoC pasirod\u0117 dar baland\u012f. Patvirtint\u0173 naudojimo realioje aplinkoje (in the wild) atvej\u0173 publikacijos metu n\u0117ra, ta\u010diau pataisymas i\u0161leistas vasar\u012f \u2014 tie, kurie neatnaujino, jau kelis m\u0117nesius gyvena \u0161alia vie\u0161o i\u0161naudojimo. KAS YRA NF_TABLES Nftables \u2014 Linux branduolio posistemis, pakeit\u0119s iptables. Visa \u0161iuolaikin\u0117 Linux ugniasien\u0117 veikia per j\u012f: paket\u0173 filtravimas, NAT, srauto \u017eym\u0117jimas. Naudojate nft tiesiogiai, firewalld ar nftables per systemd \u2014 po gaubtu visur tas pats variklis. Daugumoje \u0161iuolaikini\u0173 serveri\u0173 nf_tables veikia pagal nutyl\u0117jim\u0105, net jei niekada nesukonfig\u016bravote ugniasien\u0117s taisykli\u0173 rankiniu b\u016bdu. nf_tables viduje objektai i\u0161d\u0117styti hierarchi\u0161kai: lentel\u0117s turi grandines (chains), grandin\u0117s turi taisykles, taisykl\u0117s sudarytos i\u0161 i\u0161rai\u0161k\u0173. Svarbiausia strukt\u016bra \u0161iam pa\u017eeid\u017eiamumui suprasti \u2014 verdict map, nuosprend\u017ei\u0173 \u017eem\u0117lapis. Tai atitikmen\u0173 lentel\u0117: paketas \u2192 veiksmas (priimti, atmesti ar per\u0161okti \u012f kit\u0105 grandin\u0119). Galite \u012fsivaizduoti j\u0105 kaip mar\u0161ruto lentel\u0119, tik ne adresams, o sprendimams apie paketo likim\u0105. Verdict map gali tur\u0117ti \u012fprastus elementus su konkre\u010diais raktais ir special\u0173 catchall element\u0105 \u2014 pakaital\u0105, kuris suveikia kai paketas neatitinka nieko kito, savoti\u0161k\u0105 taisykl\u0119 \u201eviskas kita \u2014 daryti \u0161tai taip&#8221;. Klaida ir sl\u0117p\u0117si b\u016btent jame. Kad ruleset pakeitimai b\u016bt\u0173 taikomi atomi\u0161kai \u2014 be lenktyni\u0173 su gyvuoju srautu \u2014 branduolys naudoja kart\u0173 kauki\u0173 (generation mask) mechanizm\u0105. Pakeitimai kaupiami \u201ekitoje kartoje&#8221; ir vienu perjungimu tampa aktyv\u016bs. Jei paketin\u0117 operacija (batch) baigiasi klaida, branduolys paleid\u017eia at\u0161aukimo faz\u0119 (abort phase), kuri turi pilnai visk\u0105 atkurti. Apversta logika sl\u0117p\u0117si b\u016btent tame atk\u016brime. KAIP VEIKIA KLAIDA Klaida \u2014 vienas simbolis: \u0161auktukas s\u0105lygoje funkcijoje nft_map_catchall_activate(). \u0160i funkcija vykdoma abort faz\u0117s metu, kad reaktyvuot\u0173 verdict map catchall elementus, deaktyvuotus at\u0161aukiamos transakcijos metu. Teisinga logika: praleisti jau aktyvius elementus, apdoroti neaktyvius. Lygiai taip para\u0161yta analogi\u0161ka funkcija \u012fprastiems elementams \u2014 nft_mapelem_activate(). Catchall versijoje s\u0105lyga apversta: funkcija praleisdavo neaktyvius ir apdorodavo aktyvius \u2014 tiksliai prie\u0161ingai nei reikia. Vienas ! simbolis apvert\u0117 vis\u0105 logik\u0105 auk\u0161tyn kojomis. Pasekm\u0117s konkre\u010dios. Kai verdict map su NFT_GOTO tipo catchall elementu (nurodan\u010diu grandin\u0119) i\u0161trinamas, grandin\u0117s nuorod\u0173 skaitliukas (chain-&gt;use) suma\u017einamas \u2014 tai normalu, nuoroda pa\u0161alinama. Abort faz\u0117je skaitliukas tur\u0117t\u0173 b\u016bti atkurtas, nes i\u0161trynimas at\u0161aukiamas. D\u0117l apverstos s\u0105lygos atk\u016brimas nevyksta \u2014 kiekvienas abort ciklas visam laikui suma\u017eina chain-&gt;use. Kai skaitliukas pasiekia nul\u012f, branduolys mano, kad niekas nebenukreipta \u012f grandin\u0119, DELCHAIN s\u0117kmingai atliekamas ir atlaisvina atmint\u012f \u2014 kol kiti objektai j\u0105 vis dar nurodo. Tai ir yra use-after-free: prieiga prie jau atlaisvintos atminties. KAIP TAI I\u0160NAUDOJAMA Privilegij\u0173 nereikia \u2014 tik prieiga prie user namespaces ir nf_tables, pagal nutyl\u0117jim\u0105 \u012fjungta Debian ir Ubuntu. Ubuntu 24.04 turi papildom\u0173 apribojim\u0173 namespace k\u016brimui, ta\u010diau \u017einomas ap\u0117jimas per aa-exec -p trinity &#8212; unshare -Urmin \/bin\/sh \u2014 \u0161i komanda paleid\u017eia shell naujame namespace apeinant AppArmor profil\u012f, kuris paprastai riboja namespace k\u016brim\u0105. Ataka sudaryta i\u0161 keturi\u0173 paket\u0173 (batches). 1-as paketas: i\u0161trinti pipapo tipo verdict map su catchall elementu, tada ty\u010dia sukelti klaid\u0105 tame pa\u010diame pakete \u2014 tai paleid\u017eia abort faz\u0119 ir suma\u017eina grandin\u0117s nuorod\u0173 skaitliuk\u0105 jo neatkuriant. 2-as paketas: i\u0161si\u0173sti bet kuri\u0105 s\u0117kming\u0105 operacij\u0105 generation cursor perjungimui \u2014 be \u0161io \u017eingsnio kitas paketas neveiks teisingai. 3-ias paketas: v\u0117l i\u0161trinti verdict map \u2014 dabar catchall elementas aktyvus naujojo kartos at\u017evilgiu, grandin\u0117s nuorod\u0173 skaitliukas pasiekia nul\u012f. 4-as paketas: i\u0161trinti grandin\u0119 \u2014 tai pavyksta, nes skaitliukas lygus nuliui, nors bazin\u0117 grandin\u0117 vis dar turi taisykl\u0119, nurodan\u010di\u0105 j\u0105. Use-after-free gautas. Toliau prasideda darbas su branduolio kr\u016bva (heap). NFT_MSG_GETRULE u\u017eklausa taisyklei, nurodan\u010diai atlaisvint\u0105 grandin\u0119, i\u0161kvie\u010dia nft_verdict_dump() \u2014 ji skaito grandin\u0117s pavadinim\u0105 kaip eilut\u0119 i\u0161 jau atlaisvintos atminties. \u012ed\u0117jus ten seq_operations strukt\u016br\u0105 per open(&#8222;\/proc\/self\/stat&#8221;, 0), u\u017epuolikas gauna rodiklio \u012f branduolio kod\u0105 nutek\u0117jim\u0105 ir apskai\u010diuoja branduolio bazin\u012f adres\u0105, apeidamas KASLR. Tada nuteka kr\u016bvos adresai, per blob_gen_0 atlaisvintos grandin\u0117s manipuliavim\u0105 perima valdymo sraut\u0105 ir vykdoma ROP grandin\u0117. Rezultatas: commit_creds(&amp;init_cred) suteikia procesui root teises, switch_task_namespaces() ant PID 1 sugriauna namespace izoliacij\u0105, ir u\u017epuolikas tampa root serverio lygmenyje. KAS NUTINKA TOLIAU \u2014 PRIKLAUSO NUO KONFIG\u016aRACIJOS I\u0161naudojimas veikia Debian Bookworm ir Trixie, Ubuntu 22.04 LTS ir Ubuntu 24.04 LTS \u2014 su nedideliais ROP gad\u017eet\u0173 skirtumais tarp branduolio versij\u0173, nes funkcij\u0173 poslinkiai ir duomen\u0173 strukt\u016bros skiriasi tarp skirting\u0173 kompiliacij\u0173. I\u0161naudojimo stabilumas \u2014 &gt;99% neapkrautoje sistemoje ir apie 80% esant Apache benchmark apkrovai. Du nepriklausomi tyr\u0117j\u0173 kolektyvai rado skirtingus kelius iki root i\u0161 to paties pa\u017eeid\u017eiamumo \u2014 tai rei\u0161kia, kad u\u017eblokavus vien\u0105 keli\u0105 kitas lieka atviras. Papildomos apsaugos priemon\u0117s padeda, bet n\u0117ra pilna apsauga. Jei SELinux veikia enforcing re\u017eimu, FuzzingLabs variante reikalingas papildomas \u017eingsnis: selinux_state.enforcing nustatymas \u012f nul\u012f per ROP grandin\u0119. ASLR neapsaugo \u2014 j\u012f apeina branduolio bazinio adreso nutek\u0117jimas, kuris \u012fvyksta dar prie\u0161 bet kok\u012f valdymo srauto per\u0117mim\u0105. Tikra apsauga yra tik dviem atvejais: branduolio pataisymas arba visi\u0161kas neprivilegijuot\u0173 user namespaces i\u0161jungimas. REALUS ATAKOS SCENARIJUS Pa\u017eeid\u017eiamumas nenaudojamas nuotoliniu b\u016bdu \u2014 reikalingas vietinis shell. Tod\u0117l jis ypa\u010d pavojingas kaip antros stadijos ataka: RCE per pa\u017eeist\u0105 \u017einiatinklio program\u0105 duoda shell www-data vardu, o CVE-2026-23111 per kelias sekundes paver\u010dia t\u0105 shell \u012f root. U\u017epuolikas visi\u0161kai kontroliuoja server\u012f: skaito \/etc\/shadow, i\u0161traukia SSH raktus, perima sraut\u0105, modifikuoja sistemini\u0173 tarnyb\u0173 dvejetainius failus. Konteinerin\u0117 izoliacija subyra per switch_task_namespaces() i\u0161kvietim\u0105 ant PID 1 \u2014 u\u017epuolikas i\u0161eina u\u017e konteinerio namespace izoliacijos rib\u0173 ir atsiduria serverio lygmenyje. Did\u017eiausia rizika gresia daugiavartotojiniams serveriams, VPS su bendromis branduolio kopijomis, CI\/CD runneriams ir bendro naudojimo hostingo aplinkoms \u2014 visur, kur neprivilegijuoti vartotojai ar darbo kr\u016bviai gali kurti namespaces. Bendro naudojimo hostinge viena pa\u017eeista svetain\u0117 tampa \u012f\u0117jimo ta\u0161ku visam serveriui ir visoms gretimosioms svetain\u0117ms. Debes\u0173 serveryje su multi-tenant branduoliu \u2014 tai konteinerio pab\u0117gimo galimyb\u0117. LAIKO JUOSTA Exodus Intelligence aptiko pa\u017eeid\u017eiamum\u0105 2025 m. prad\u017eioje nf_tables posistemio tyrimo metu. 2026 m. vasario 5 d. pataisymas pateko \u012f Linux branduolio upstream (komitas f41c5d151078c5348271ffaf8e7410d96f2d82f8) \u2014 pa\u0161alinta viena eilut\u0117 su apversta s\u0105lyga, t\u0105 pa\u010di\u0105 dien\u0105 priskirtas CVE-2026-23111. 2026 m. baland\u017eio 16 d. FuzzingLabs (Alexis ir Lyes), ruo\u0161damiesi Pwn2Own Berlin 2026, nepriklausomai atkartojo pa\u017eeid\u017eiamum\u0105 ir [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":20370,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[202,199,187,155],"tags":[266,376,377,288,378,379,329,380,381],"class_list":["post-20374","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cve-lt","category-linux-lt","category-nftables-lt","category-saugumas","tag-cve","tag-debian","tag-kernel","tag-linux","tag-nftables","tag-privilege-escalation","tag-security","tag-ubuntu","tag-use-after-free"],"_links":{"self":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/comments?post=20374"}],"version-history":[{"count":4,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20374\/revisions"}],"predecessor-version":[{"id":20391,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20374\/revisions\/20391"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/media\/20370"}],"wp:attachment":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/media?parent=20374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/categories?post=20374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/tags?post=20374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}