Linux ဖြန့်ချိမှုအားလုံးတွင် root access ရရှိရန် page cache ကို ပြုပြင်ပေးသည့် Dirty Frag အားနည်းချက်များ

Linux kernel မှာ အားနည်းချက်နှစ်ခုကို ရှာဖွေတွေ့ရှိခဲ့ပါတယ်။ ဒီအားနည်းချက်တွေဟာ ရက်အနည်းငယ်က ထုတ်ဖော်ပြသခဲ့တဲ့ Copy Fail အားနည်းချက်နဲ့ သဘောသဘာဝဆင်တူပေမယ့် xfrm-ESP နဲ့ RxRPC ဆိုတဲ့ subsystem အမျိုးမျိုးကို သက်ရောက်မှုရှိပါတယ်။ ဒီအားနည်းချက်တွေကို Dirty Frag (Copy Fail 2 လို့ ကုဒ်နာမည်ပေးထား) လို့ အမည်ပေးထားပါတယ်။ ဒီအားနည်းချက်တွေက အခွင့်ထူးမခံရတဲ့ user တစ်ယောက်ကို page cache မှာ process data တွေကို overwrite လုပ်ခြင်းအားဖြင့် root privilege တွေ ရရှိစေပါတယ်။ လက်ရှိ Linux distribution အားလုံးမှာ အလုပ်လုပ်တဲ့ exploit တစ်ခု ရရှိနိုင်ပါတယ်။ patch တွေ မထုတ်ဝေခင်မှာ အားနည်းချက်ကို ထုတ်ဖော်ပြသခဲ့ပေမယ့် workaround တစ်ခု ရရှိနိုင်ပါတယ်။

Dirty Frag သည် အားနည်းချက်နှစ်ခုကို ဖုံးကွယ်ထားသည်- ပထမတစ်ခုမှာ ESP (Encapsulating Security Payload) protocol ကို အသုံးပြု၍ IPsec encryption လုပ်ဆောင်ချက်များကို အရှိန်မြှင့်ရန်အသုံးပြုသည့် xfrm-ESP module ရှိ အားနည်းချက်ဖြစ်ပြီး ဒုတိယတစ်ခုမှာ UDP ပေါ်တွင် လည်ပတ်နေသော AF_RXRPC socket family နှင့် အမည်တူ RPC protocol ကို အကောင်အထည်ဖော်သည့် RxRPC driver ရှိ အားနည်းချက်ဖြစ်သည်။ အားနည်းချက်တစ်ခုစီကို သီးခြားစီယူပါက root privileges များကို ခွင့်ပြုသည်။ xfrm-ESP အားနည်းချက်သည် Linux kernel တွင် ၂၀၁၇ ခုနှစ် ဇန်နဝါရီလမှစ၍ ရှိနေခဲ့ပြီး RxRPC အားနည်းချက်သည် ၂၀၂၃ ခုနှစ် ဇွန်လမှစ၍ ရှိနေခဲ့သည်။ ပြဿနာနှစ်ခုစလုံးသည် page cache သို့ တိုက်ရိုက်ရေးသားခွင့်ပြုသည့် optimization များကြောင့် ဖြစ်ပေါ်လာသည်။

xfrm-ESP အားနည်းချက်ကို အသုံးချရန်အတွက် အသုံးပြုသူသည် namespace များဖန်တီးခွင့်ရှိရမည်ဖြစ်ပြီး RxRPC အားနည်းချက်ကို အသုံးချရန်အတွက် rxrpc.ko kernel module ကို load လုပ်ရမည်ဖြစ်သည်။ ဥပမာအားဖြင့် Ubuntu တွင် AppArmor စည်းမျဉ်းများသည် အခွင့်ထူးမရှိသောအသုံးပြုသူများကို namespace များဖန်တီးခြင်းမှ တားဆီးပေးသော်လည်း rxrpc.ko module ကို default အနေဖြင့် load လုပ်ထားသည်။ အချို့ distribution များတွင် rxrpc.ko module မပါဝင်သော်လည်း namespace ဖန်တီးမှုကို မပိတ်ဆို့ပါ။ ပြဿနာကို ရှာဖွေတွေ့ရှိခဲ့သော သုတေသီသည် အားနည်းချက်နှစ်ခုလုံးမှတစ်ဆင့် စနစ်ကို တိုက်ခိုက်နိုင်သည့် combined exploit တစ်ခုကို တီထွင်ခဲ့ပြီး အဓိက distribution အားလုံးတွင် ပြဿနာကို အသုံးချနိုင်စေခဲ့သည်။ ဒီ exploit ဟာ Ubuntu 24.04.4 မှာ kernel 6.17.0-23၊ RHEL 10.1 မှာ kernel 6.12.0-124.49.1၊ openSUSE Tumbleweed မှာ kernel 7.0.2-1၊ CentOS Stream 10 မှာ kernel 6.12.0-224၊ AlmaLinux 10 မှာ kernel 6.12.0-124.52.3 နဲ့ Fedora 44 မှာ kernel 6.19.14-300 တို့နဲ့ အလုပ်လုပ်ကြောင်း အတည်ပြုပြီးပါပြီ။

Copy Fail အားနည်းချက်ကဲ့သို့ပင်၊ xfrm-ESP နှင့် RxRPC ရှိ ပြဿနာများသည် splice() function ကို အသုံးပြု၍ in-place data decryption ကြောင့်ဖြစ်ပြီး၊ ၎င်းသည် page cache ရှိ element များသို့ reference များပေးပို့ခြင်းဖြင့် file descriptors များနှင့် pipe များအကြား data များကို copy မလုပ်ဘဲ လွှဲပြောင်းပေးသည်။ page cache ရှိ element များသို့ direct reference များအသုံးပြုမှုကို ထည့်သွင်းစဉ်းစားရန် Write offset များကို သင့်လျော်သော စစ်ဆေးမှုများမပါဘဲ တွက်ချက်ခဲ့ပြီး၊ အထူးပြုလုပ်ထားသော request များသည် ပေးထားသော offset တွင် 4 bytes ကို overwrite လုပ်ရန်နှင့် page cache ရှိ မည်သည့်ဖိုင်၏ content များကိုမဆို ပြုပြင်ရန် ခွင့်ပြုသည်။

ဖိုင်ဖတ်ရှုခြင်းလုပ်ဆောင်ချက်အားလုံးသည် စာမျက်နှာကက်ရှ်မှ အကြောင်းအရာများကို ဦးစွာရယူသည်။ စာမျက်နှာကက်ရှ်ရှိဒေတာကို ပြုပြင်မွမ်းမံပါက ဖိုင်ဖတ်ရှုခြင်းလုပ်ဆောင်ချက်များသည် အစားထိုးဒေတာကို ပြန်ပေးမည်ဖြစ်ပြီး drive တွင်သိမ်းဆည်းထားသော တကယ့်အချက်အလက်များမဟုတ်ဘဲ ပြန်ပေးမည်ဖြစ်သည်။ အားနည်းချက်ကို အသုံးချခြင်းသည် suid root flag ပါသော executable ဖိုင်အတွက် စာမျက်နှာကက်ရှ်ကို ပြုပြင်မွမ်းမံခြင်းအထိ အကျုံးဝင်သည်။ ဥပမာအားဖြင့် root privileges ရရှိရန်၊ executable ဖိုင် /usr/bin/su ကို စာမျက်နှာကက်ရှ်တွင်ထည့်ရန် ဖတ်ပြီးနောက် ၎င်းတို့၏ကိုယ်ပိုင်ကုဒ်ကို စာမျက်နှာကက်ရှ်ထဲသို့ တင်ထားသော ဤဖိုင်၏ အကြောင်းအရာထဲသို့ အစားထိုးနိုင်သည်။ "su" utility ကို နောက်ဆက်တွဲလုပ်ဆောင်ခြင်းသည် drive မှ မူရင်း executable ဖိုင်မဟုတ်ဘဲ စာမျက်နှာကက်ရှ်မှ ပြုပြင်ထားသော မိတ္တူကို မှတ်ဉာဏ်ထဲသို့ တင်စေမည်ဖြစ်သည်။

အားနည်းချက်ထုတ်ဖော်ခြင်းနှင့် ပေါင်းစပ်ညှိနှိုင်းထားသော patches များထုတ်ပြန်ခြင်းကို မေလ ၁၂ ရက်နေ့တွင် စီစဉ်ထားသော်လည်း ယိုစိမ့်မှုကြောင့် အားနည်းချက်အချက်အလက်များကို patches များထုတ်ပြန်ခြင်းမပြုမီ ထုတ်ပြန်ရန် လိုအပ်ခဲ့သည်။ ဧပြီလနှောင်းပိုင်းတွင် rxrpc၊ ipsec နှင့် xfrm အတွက် patches များကို အားနည်းချက်နှင့် ဆက်စပ်နေကြောင်း မဖော်ပြဘဲ netdev public mailing list တွင် တင်ခဲ့သည်။ မေလ ၅ ရက်နေ့တွင် IPsec subsystem maintainer သည် xfrm-esp module တွင် အဆိုပြုထားသော ပြင်ဆင်ချက်ဖြင့် netdev Git repository တွင် ပြောင်းလဲမှုကို လက်ခံခဲ့သည်။ ပြောင်းလဲမှု၏ဖော်ပြချက်သည် algif_aead module ရှိ Copy Fail အားနည်းချက်ကို ဖြစ်ပေါ်စေသည့် ပြဿနာ၏ဖော်ပြချက်နှင့် အများအားဖြင့် တူညီသည်။ လုံခြုံရေးသုတေသီတစ်ဦးသည် ဤပြင်ဆင်ချက်ကို စိတ်ဝင်စားလာပြီး အလုပ်လုပ်သော exploit တစ်ခုကို ဖန်တီးနိုင်ခဲ့ပြီး မေလ ၁၂ ရက်နေ့အထိ ပြဿနာနှင့်ပတ်သက်သည့် အချက်အလက်များကို ထုတ်ဖော်ခြင်းအပေါ် ပိတ်ပင်ထားကြောင်း မသိရှိဘဲ ထုတ်ဝေခဲ့သည်။

ဖြန့်ဖြူးမှုများတွင် Linux kernel နှင့် kernel package များအတွက် ပြင်ဆင်မှုများပါရှိသော အပ်ဒိတ်များကို မထုတ်ဝေရသေးသော်လည်း ပြဿနာများကို ဖြေရှင်းပေးသည့် patch များ—xfrm-esp နှင့် rxrpc—ရရှိနိုင်ပါသည်။ CVE identifier များကို မသတ်မှတ်ရသေးသောကြောင့် ဖြန့်ဖြူးမှုများတွင် package အပ်ဒိတ်များကို ခြေရာခံခြင်းကို ရှုပ်ထွေးစေသည်။ ဖြေရှင်းနည်းတစ်ခုအနေဖြင့် esp4၊ esp6 နှင့် rxrpc kernel module များ တင်ခြင်းကို ပိတ်ဆို့နိုင်သည်- 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; true"

source: opennet.ru