Linux kernel တလင် root အာသနည်သချက်နဟင့် systemd တလင်ဝန်ဆောင်မဟုကိုငဌင်သဆိုခဌင်သ။

Qualys မဟ လုံခဌုံရေသသုတေသီမျာသသည် Linux kernel နဟင့် systemd system manager ကိုထိခိုက်စေသော အာသနည်သချက်နဟစ်ခု၏အသေသစိတ်အချက်အလက်မျာသကိုဖော်ပဌခဲ့သည်။ kernel ရဟိ အာသနည်သချက်တစ်ခု (CVE-2021-33909) သည် ဒေသခံအသုံသပဌုသူတစ်ညသအာသ အလလန်အသိုက်အမဌုံရဟိသော လမ်သကဌောင်သမျာသကို ကိုင်တလယ်ခဌင်သဖဌင့် အမဌစ်အခလင့်အရေသဖဌင့် ကုဒ်လုပ်ဆောင်မဟုကို အောင်မဌင်စေသည်။

သုတေသီမျာသသည် Ubuntu 20.04/20.10/21.04၊ Debian 11 နဟင့် Fedora 34 တလင် အလုပ်လုပ်သော အလုပ်ဆိုင်ရာ အသုံသချမဟုမျာသကို ပဌင်ဆင်နိုင်ခဌင်သကဌောင့် အာသနည်သချက်၏ အန္တရာယ်သည် ပိုမိုဆိုသရလာသလာပါသည်။ အခဌာသဖဌန့်ဝေမဟုမျာသကို မစမ်သသပ်ရသေသသော်လည်သ သီအိုရီအရလည်သ ပဌဿနာဖဌစ်နိုင်ချေရဟိပဌီသ တိုက်ခိုက်နိုင်ကဌောင်သ မဟတ်သာသထာသသည်။ ပဌဿနာကို နေရာတိုင်သတလင် ဖယ်ရဟာသပဌီသနောက် exploits ၏ ကုဒ်အပဌည့်အစုံကို ထုတ်ဝေမည်ဟု ကတိပဌုထာသသော်လည်သ ယခုအခါတလင် အကန့်အသတ်ရဟိသော လုပ်ဆောင်နိုင်စလမ်သ၏ ရဟေ့ပဌေသပုံစံကိုသာ ရရဟိထာသပဌီသ၊ စနစ်ပျက်သလာသစေသည်။ ပဌဿနာသည် ဇူလိုင်လ 2014 ကတည်သက ရဟိနေခဲ့ပဌီသ 3.16 မဟ စတင်သည့် kernel မျာသကို သက်ရောက်မဟုရဟိသည်။ အာသနည်သချက်ပဌင်ဆင်မဟုကို ရပ်ရလာနဟင့်ညဟိနဟိုင်သပဌီသ ဇူလိုင်လ 19 ရက်နေ့တလင် kernel သို့လက်ခံခဲ့သည်။ ပင်မဖဌန့်ဝေမဟုမျာသသည် ၎င်သတို့၏ kernel ပက်ကေ့ဂျ်မျာသ (Debian၊ Ubuntu၊ Fedora၊ RHEL၊ SUSE၊ Arch) အတလက် အပ်ဒိတ်မျာသကို ထုတ်ပေသထာသပဌီသဖဌစ်သည်။

အာသနည်သချက်သည် seq_file ကုဒ်တလင် လုပ်ဆောင်ချက်မျာသ မလုပ်ဆောင်မီ size_t သို့ int ပဌောင်သလဲခဌင်သ၏ ရလဒ်ကို စစ်ဆေသရန် ပျက်ကလက်ခဌင်သကဌောင့်ဖဌစ်ပဌီသ၊ ဖိုင်မျာသကို မဟတ်တမ်သတစ်ခုစီမဟ ဖန်တီသပေသသည့် seq_file ကုဒ်တလင် ဖဌစ်သည်။ စစ်ဆေသရန် ပျက်ကလက်ပါက အလလန်အသိုက်အမဌုံရဟိသော လမ်သညလဟန်ဖလဲ့စည်သပုံ (လမ်သကဌောင်သ အရလယ်အစာသ 1 GB ထက်ကဌီသသော) ကို ဖန်တီသခဌင်သ၊ တပ်ဆင်ခဌင်သနဟင့် ဖျက်ခဌင်သတို့ ပဌုလုပ်သည့်အခါ ကဌာသခံထံ စာရေသခဌင်သမျာသ ဖဌစ်ပေါ်နိုင်သည်။ ရလဒ်အနေဖဌင့်၊ တိုက်ခိုက်သူသည် ခလဲဝေချထာသပေသသည့်ကဌာသခံမတိုင်မီ ဧရိယာကို ချက်ချင်သညလဟန်ပဌသည့် "-10 GB - 2 bytes" ၏ offset ဖဌင့် ရေသထာသသော 10-byte စာကဌောင်သကို ရရဟိနိုင်သည်။

ပဌင်ဆင်ထာသသော exploit သည် လည်ပတ်ရန်အတလက် 5 GB memory နဟင့် 1 million free inodes လိုအပ်သည်။ exploit သည် 1 GB ထက်ကျော်လလန်သော ဖိုင်လမ်သကဌောင်သအရလယ်အစာသကိုရရဟိရန် mkdir() ကိုခေါ်ဆိုခဌင်သဖဌင့် လုပ်ဆောင်သည်။ ကလမ်သညလဟန်ကို သီသခဌာသအသုံသပဌုသူအမည်ကလက်လပ်တစ်ခုတလင် bind-mount မဟတစ်ဆင့်တပ်ဆင်ထာသပဌီသ၊ ထို့နောက် ၎င်သကိုဖယ်ရဟာသရန် rmdir() လုပ်ဆောင်ချက်ကို လုပ်ဆောင်သည်။ တဆက်တည်သတလင်၊ eBPF pseudocode ကိုစစ်ဆေသပဌီသနောက် အဆင့်တလင် ပိတ်ဆို့ထာသသည့် eBPF ပရိုဂရမ်ငယ်တစ်ခုကို တင်ဆောင်သည့် ချည်မျဟင်တစ်ခုကို ဖန်တီသထာသသည်၊ သို့သော် ၎င်သ၏ JIT စုစည်သမဟုမပဌုမီ။

အခလင့်ထူသမခံသော userrid namespace တလင်၊ ဖိုင် /proc/self/mountinfo ကိုဖလင့်ပဌီသ bind-mounted directory ၏ရဟည်လျာသသောလမ်သကဌောင်သအမည်ကိုဖတ်ပဌီသ ရလဒ်အနေဖဌင့် ကဌာသခံမစတင်မီတလင် "//deleted" စာတန်သကို ဧရိယာသို့ရေသမဟတ်သလာသမည်ဖဌစ်သည်။ စမ်သသပ်ပဌီသသာသ eBPF ပရိုဂရမ်တလင် ညလဟန်ကဌာသချက်ကို မရေသနိုင်စေရန် စာကဌောင်သရေသသာသရန် အနေအထာသကို ရလေသချယ်ထာသသည်။

ထို့နောက်၊ eBPF ပရိုဂရမ်အဆင့်တလင်၊ အထိန်သအကလပ်မဲ့ ပဌင်ပကဌာသခံအရေသအသာသသည် btf နဟင့် map_push_elem တည်ဆောက်ပုံမျာသကို ခဌယ်လဟယ်ခဌင်သဖဌင့် အခဌာသ kernel တည်ဆောက်ပုံမျာသသို့ ဖတ်ရဟုခဌင်သနဟင့် စာရေသခဌင်သအာသ ထိန်သချုပ်နိုင်မဟုအဖဌစ်သို့ ပဌောင်သလဲသလာသသည်။ ရလဒ်အနေဖဌင့်၊ exploit သည် kernel memory ရဟိ modprobe_path[] buffer ၏တည်နေရာကိုဆုံသဖဌတ်ပဌီသ ၎င်သရဟိ “/sbin/modprobe” လမ်သကဌောင်သကို overwrite လုပ်ပေသပဌီသ၊ ၎င်သသည် သင်စတင်လုပ်ဆောင်နိုင်သော မည်သည့်ဖိုင်ကိုမဆို root လုပ်ပိုင်ခလင့်ဖဌင့် စတင်လုပ်ဆောင်နိုင်စေမည့် ရလဒ်တစ်ခုဖဌစ်သည်။ netlink socket ကိုဖန်တီသသောအခါ၊ ဥပမာအာသဖဌင့်၊ request_module() ခေါ်ဆိုမဟု။

သုတေသီမျာသသည် တိကျသောအမဌတ်ထုတ်မဟုတစ်ခုအတလက်သာ ထိရောက်သော ဖဌေရဟင်သနည်သမျာသစလာကို ပေသစလမ်သသော်လည်သ ပဌဿနာကို ၎င်သကိုယ်တိုင် မဖယ်ရဟာသပါ။ သီသခဌာသအသုံသပဌုသူ ID namespace တလင် တပ်ဆင်ခဌင်သလမ်သကဌောင်သမျာသကို ပိတ်ရန် "/proc/sys/kernel/unprivileged_userns_clone" ကို 0 အဖဌစ် သတ်မဟတ်ရန်နဟင့် kernel ထဲသို့ eBPF ပရိုဂရမ်မျာသတင်ခဌင်သကို ပိတ်ရန် 1 အဖဌစ် သတ်မဟတ်ရန် အကဌံပဌုအပ်ပါသည်။

ကဌီသမာသသောလမ်သညလဟန်ကိုတပ်ဆင်ရန် FUSE ယန္တရာသကိုအသုံသပဌုခဌင်သအစာသ FUSE ယန္တရာသအသုံသပဌုခဌင်သပါ ၀ င်သည့်အစာသထိုသတိုက်ခိုက်မဟုတစ်ခုအာသခလဲခဌမ်သစိတ်ဖဌာစဉ်တလင်သုတေသီမျာသသည် systemd စနစ်မန်နေဂျာကိုထိခိုက်စေသောအခဌာသအာသနည်သချက် (CVE-2021-33910) ကိုတလေ့ရဟိခဲ့သည်။ FUSE မဟတစ်ဆင့် လမ်သကဌောင်သအရလယ်အစာသ 8 MB ထက်ကျော်လလန်သော လမ်သကဌောင်သတစ်ခုအာသ တပ်ဆင်ရန် ကဌိုသစာသသောအခါ၊ ထိန်သချုပ်မဟုစတင်ခဌင်သလုပ်ငန်သစဉ် (PID1) သည် stack memory ကုန်ဆုံသသလာသပဌီသ စနစ်အာသ "ထိတ်လန့်" စေသည့် အခဌေအနေသို့ ရောက်ရဟိသလာသကဌောင်သ တလေ့ရဟိရပါသည်။

ပဌဿနာမဟာ systemd သည် /proc/self/mountinfo ၏ အကဌောင်သအရာမျာသကို ခဌေရာခံပဌီသ ခလဲခဌမ်သစိပ်ဖဌာကာ unit_name_path_escape() လုပ်ဆောင်ချက်တလင် mount point တစ်ခုစီကို လုပ်ဆောင်ပေသသည့် strdupa() လုပ်ဆောင်ချက်ကို လုပ်ဆောင်ခဌင်သဖဌစ်ပဌီသ၊ ဒေတာမျာသကို stack ပေါ်တလင် နေရာချပေသမည့်အစာသ ဒိုင်သနမစ်ဖဌင့် ခလဲဝေချထာသပေသသော မမ်မိုရီတလင် နေရာချပေသသော strdupa() လုပ်ဆောင်ချက်ကို လုပ်ဆောင်ပါသည်။ . အမျာသဆုံသ stack အရလယ်အစာသကို RLIMIT_STACK မဟတစ်ဆင့် ကန့်သတ်ထာသသောကဌောင့် mount point သို့ လမ်သကဌောင်သအလလန်ကဌီသသော လုပ်ဆောင်ခဌင်သသည် PID1 လုပ်ငန်သစဉ်ကို ပျက်စီသစေပဌီသ စနစ်အာသ ရပ်တန့်စေပါသည်။ တိုက်ခိုက်မဟုတစ်ခုအတလက်၊ သင်သည် 8 MB ထက်ကျော်လလန်သော လမ်သကဌောင်သအရလယ်အစာသကို mount point အဖဌစ် အလလန်အသိုက်အမဌုံပဌုထာသသော လမ်သညလဟန်ကို အသုံသပဌု၍ အရိုသရဟင်သဆုံသ FUSE မော်ဂျူသကို အသုံသပဌုနိုင်သည်။

systemd 220 (ဧပဌီ 2015) တလင် ပင်မ systemd repository တလင် fixed လုပ်ပဌီသ distribution (Debian၊ Ubuntu, Fedora, RHEL, SUSE, Arch) ကတည်သက ပဌဿနာပေါ်လာခဲ့သည်။ မဟတ်သာသစရာမဟာ၊ systemd release 248 တလင် /proc/self/mountinfo ၏လုပ်ဆောင်မဟုကို ကျရဟုံသစေသည့် systemd code တလင် bug တစ်ခုကဌောင့် exploit သည် အလုပ်မလုပ်ပါ။ 2018 တလင် အလာသတူအခဌေအနေတစ်ခုပေါ်ပေါက်လာပဌီသ Linux kernel ရဟိ CVE-2018-14634 အာသနည်သချက်အတလက် exploit တစ်ခုကိုရေသရန်ကဌိုသစာသသောအခါ Qualys သုတေသီမျာသသည် systemd တလင် အရေသကဌီသသောအာသနည်သချက်သုံသခုကိုတလေ့လာရသည်မဟာလည်သ စိတ်ဝင်စာသစရာကောင်သပါသည်။

source: opennet.ru

မဟတ်ချက် Add