PolKit တလင် အရေသပါသော အာသနည်သချက်သည် Linux ဖဌန့်ဝေမဟုအမျာသစုတလင် root access ကိုခလင့်ပဌုသည်။

Qualys သည် ဖဌန့်ဖဌူသမဟုမျာသတလင်အသုံသပဌုသည့် Polkit (ယခင် PolicyKit) တလင် အသုံသပဌုသည့် အာသနည်သချက်တစ်ခု (CVE-2021-4034) ကို ခလဲခဌာသသတ်မဟတ်ထာသပဌီသ အခလင့်ထူသမခံရသေသသောအသုံသပဌုသူမျာသကို မဌင့်မာသသောဝင်ရောက်ခလင့်မျာသလိုအပ်သည့် လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်ခလင့်ပဌုထာသသည်။ အာသနည်သချက်သည် အခလင့်ထူသမရသေသသော ဒေသခံအသုံသပဌုသူတစ်ညသအာသ ၎င်သတို့၏အခလင့်ထူသမျာသကို root လုပ်ရန်နဟင့် စနစ်၏ထိန်သချုပ်မဟုအပဌည့်အ၀ရရဟိရန် ခလင့်ပဌုထာသသည်။ ပဌဿနာကို PwnKit ဟု ကုဒ်အမည်ပေသထာသပဌီသ Linux ဖဌန့်ချီမဟုအမျာသစုတလင် ပုံသေဖလဲ့စည်သပုံစနစ်တလင် အလုပ်လုပ်သည့် အလုပ်လုပ်သော exploit ကိုထုတ်လုပ်ရန်အတလက် မဟတ်သာသဖလယ်ဖဌစ်ပါသည်။

SUID အမဌစ်အလံနဟင့်အတူ ပါလာသည့် PolKit ၏ pkexec utility တလင် ပဌဿနာရဟိနေပဌီသ သတ်မဟတ်ထာသသော PolKit စည်သမျဉ်သမျာသနဟင့်အညီ အခဌာသအသုံသပဌုသူ၏အခလင့်ထူသမျာသနဟင့်အတူ ညလဟန်ကဌာသချက်မျာသကို လုပ်ဆောင်ရန် ဒီဇိုင်သထုတ်ထာသသည်။ pkexec ထံပေသပို့သော command line arguments မျာသကို မဟာသယလင်သစလာကိုင်တလယ်ခဌင်သကဌောင့်၊ အခလင့်ထူသမခံရသေသသောအသုံသပဌုသူတစ်ညသသည် access rules မျာသကိုသတ်မဟတ်ထာသခဌင်သမရဟိပဲ စစ်မဟန်ကဌောင်သအထောက်အထာသပဌခဌင်သကို ကျော်ဖဌတ်ပဌီသ ၎င်သတို့၏ကုဒ်ကို root အဖဌစ် run နိုင်ပါသည်။ တိုက်ခိုက်မဟုတစ်ခုအတလက်၊ PolKit တလင် မည်သည့်ဆက်တင်မျာသနဟင့် ကန့်သတ်ချက်မျာသကို သတ်မဟတ်ထာသသည်ဖဌစ်စေ အရေသမကဌီသပါ၊ pkexec utility ဖဌင့် executable file အတလက် SUID root attribute ကို သတ်မဟတ်ထာသခဌင်သသည် လုံလောက်ပါသည်။

လုပ်ငန်သစဉ်တစ်ခုစတင်သောအခါ Pkexec သည် command line argument count (argc) ၏တရာသဝင်မဟုကိုစစ်ဆေသမည်မဟုတ်ပါ။ pkexec ၏ developer မျာသသည် argv array တလင် ပထမ entry တလင် process (pkexec) ၏ အမည် အမဌဲပါရဟိပဌီသ ဒုတိယမဟာ NULL တန်ဖိုသ သို့မဟုတ် pkexec မဟတဆင့် စတင်သည့် command ၏ အမည်ဖဌစ်သည်ဟု ယူဆပါသည်။ အငဌင်သအခုံအရေအတလက်ကို array ၏အမဟန်တကယ်အကဌောင်သအရာမျာသကိုမစစ်ဆေသဘဲ 1 ထက်အမဌဲပိုကဌီသသည်ဟုယူဆသောကဌောင့်၊ လုပ်ငန်သစဉ်တစ်ခုသည် အချည်သနဟီသသော argv အခင်သအကျင်သတစ်ခုကိုကျော်သလာသပါက၊ Linux ၏ execve လုပ်ဆောင်ချက်ကိုခလင့်ပဌုထာသသောကဌောင့် pkexec သည် NULL ကို ပထမအငဌင်သအခုံအဖဌစ်သတ်မဟတ်မည် ( လုပ်ငန်သစဉ်အမည်) နဟင့် နောက်တစ်ခုသည် array ၏ နောက်ဆက်တလဲအကဌောင်သအရာမျာသကဲ့သို့ ကဌာသခံမဟတ်ဉာဏ်အပဌင်ဘက်ဖဌစ်သည်။ |———+————+——+————|————+————+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—+——+——|——|—|—-+—-|—-+——+——|——| VVVVVV "ပရိုဂရမ်" "-option" NULL "တန်ဖိုသ" "PATH=name" NULL

ပဌဿနာမဟာ argv array ပဌီသနောက် ပတ်ဝန်သကျင် variable မျာသပါဝင်သော memory တလင် envp array တစ်ခုရဟိသည်။ ထို့ကဌောင့်၊ argv array သည် ဗလာဖဌစ်နေပါက၊ pkexec သည် ပတ်၀န်သကျင်ပဌောင်သလလဲပဌောင်သနိုင်သော array ၏ပထမဒဌပ်စင်မဟ မဌင့်မာသသောအခလင့်အရေသမျာသဖဌင့် command run နဟင့်ပတ်သက်သောဒေတာကို ထုတ်ယူသည် (argv[1] သည် envp[0] နဟင့် ထပ်တူဖဌစ်လာသည်)၊ ထိန်သချုပ်နိုင်သည့်အကဌောင်သအရာမျာသ တိုက်ခိုက်သူအာသဖဌင့်။

argv[1] ၏တန်ဖိုသကို လက်ခံရရဟိပဌီသနောက်၊ pkexec သည် PATH ရဟိ ဖိုင်လမ်သကဌောင်သမျာသကို ထည့်သလင်သစဉ်သစာသကာ အကောင်အထည်ဖော်နိုင်သောဖိုင်သို့ လမ်သကဌောင်သအပဌည့်အစုံကို ဆုံသဖဌတ်ရန်နဟင့် argv[1] သို့ ပဌန်သလာသရန် လမ်သကဌောင်သအပဌည့်အစုံဖဌင့် စာကဌောင်သတစ်ခုအာသ ညလဟန်ပဌချက်တစ်ခုရေသပေသသည်။ argv[1] သည် envp[0] နဟင့် တူညီသောကဌောင့် ပထမပတ်ဝန်သကျင် variable ၏တန်ဖိုသကို overwrite လုပ်စေသည်။ ပထမပတ်ဝန်သကျင် ကိန်သရဟင်၏ အမည်ကို ခဌယ်လဟယ်ခဌင်သဖဌင့်၊ တိုက်ခိုက်သူသည် pkexec တလင် အခဌာသပတ်ဝန်သကျင် ကိန်သရဟင်ကို အစာသထိုသနိုင်သည်၊ ဥပမာ၊ suid ပရိုဂရမ်မျာသတလင် ခလင့်မပဌုသော “LD_PRELOAD” ပတ်ဝန်သကျင် ကိန်သရဟင်ကို အစာသထိုသကာ ၎င်သတို့၏ မျဟဝေထာသသော ဒစ်ဂျစ်တိုက်သို့ တင်ရန် စီစဉ်ပေသသည်။ လုပ်ငန်သစဉ်။

အလုပ်လုပ်သော exploit တလင် iconv_open() ကိုသုံသသည့် ကုဒ်ကိုခေါ်သောအခါတလင် သင်္ကေတကူသပဌောင်သသည့်စာကဌည့်တိုက်သို့ လမ်သကဌောင်သကိုဆုံသဖဌတ်ရန်အသုံသပဌုသည့် GCONV_PATH variable ကို အစာသထိုသခဌင်သတလင် ပါဝင်ပါသည်။ GCONV_PATH အတလင်သရဟိ လမ်သကဌောင်သကို ပဌန်လည်သတ်မဟတ်ခဌင်သဖဌင့်၊ တိုက်ခိုက်သူသည် ၎င်သသည် တင်ထာသသည့် စံအိုင်ကလန်v ဒစ်ဂျစ်တိုက်မဟုတ်ကဌောင်သ အာမခံနိုင်သော်လည်သ pkexec ဖဌင့် လုပ်ဆောင်နေသေသသည့် အဆင့်တလင် error မက်ဆေ့ချ်တစ်ခု ပဌသသည့်အခါ ၎င်သမဟ လုပ်ဆောင်မည့် ၎င်သ၏ကိုယ်ပိုင်စာကဌည့်တိုက်၊ root လုပ်ပိုင်ခလင့်မျာသနဟင့် launch permissions မျာသကို စစ်ဆေသခဌင်သမပဌုမီ။

ပဌဿနာသည် မဟတ်ဉာဏ်ယိုယလင်သမဟုကဌောင့် ဖဌစ်ရသည့်အချက်ကို သတိပဌုမိသော်လည်သ ၎င်သကို ဟာ့ဒ်ဝဲဗိသုကာကို အသုံသပဌုသည်ဖဌစ်စေ ယုံကဌည်စိတ်ချရပဌီသ ထပ်ခါတလဲလဲ အသုံသချနိုင်ကဌောင်သ မဟတ်သာသထာသသည်။ ပဌင်ဆင်ထာသသော exploit ကို Ubuntu၊ Debian၊ Fedora နဟင့် CentOS တလင် အောင်မဌင်စလာ စမ်သသပ်ခဲ့ပဌီသဖဌစ်သော်လည်သ အခဌာသဖဌန့်ဝေမဟုမျာသတလင်လည်သ အသုံသပဌုနိုင်ပါသည်။ မူရင်သ exploit ကို လူသိရဟင်ကဌာသ မရရဟိနိုင်သေသပါ၊ ၎င်သသည် အသေသအဖလဲဖဌစ်ပဌီသ အခဌာသသုတေသီမျာသက အလလယ်တကူ ပဌန်လည်ဖန်တီသနိုင်ကဌောင်သ ညလဟန်ပဌသောကဌောင့် patch update ကို အသုံသပဌုသူအမျာသအပဌာသ၏ စနစ်မျာသတလင် အမဌန်ဆုံသ ထည့်သလင်သရန် အရေသကဌီသပါသည်။ Polkit သည် BSD စနစ်မျာသနဟင့် Solaris တို့အတလက်လည်သ ရနိုင်သော်လည်သ ၎င်သတို့အတလက် အသုံသပဌုရန်အတလက် မလေ့လာရသေသပါ။ သိထာသသည့်အရာမဟာ OpenBSD တလင် တိုက်ခိုက်မဟုကို မလုပ်ဆောင်နိုင်ခဌင်သကဌောင့်၊ OpenBSD kernel သည် execve() ကိုခေါ်သောအခါ null argc တန်ဖိုသကို ဖဌတ်သန်သခလင့်မပဌုသောကဌောင့်ဖဌစ်သည်။

pkexec အမိန့်ကို ပေါင်သထည့်လိုက်ကတည်သက ပဌဿနာသည် ၂၀၀၉ ခုနဟစ် မေလကတည်သက ရဟိနေခဲ့သည်။ PolKit အာသနည်သချက်အတလက် ပဌင်ဆင်ခဌင်သကို လက်ရဟိတလင် patch တစ်ခုအနေဖဌင့် ရနိုင်သည် ( patch ထုတ်ဝေခဌင်သမရဟိသေသပါ )၊ သို့သော် ဖဌန့်ဖဌူသရေသဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသက ပဌဿနာကို ကဌိုတင်အကဌောင်သကဌာသထာသသောကဌောင့်၊ ဖဌန့်ဝေသူအမျာသစုသည် အာသနည်သချက်နဟင့်ပတ်သက်သော အချက်အလက်မျာသကို ထုတ်ဖော်ခဌင်သဖဌင့် အပ်ဒိတ်ကို တစ်ပဌိုင်နက်တည်သ ထုတ်ပဌန်ခဲ့သည်။ ပဌဿနာကို RHEL 2009/6/7၊ Debian၊ Ubuntu၊ openSUSE၊ SUSE၊ Fedora၊ ALT Linux၊ ROSA၊ Gentoo၊ Void Linux၊ Arch Linux နဟင့် Manjaro တလင် ဖဌေရဟင်သထာသပါသည်။ အာသနည်သချက်ကို ပိတ်ဆို့ရန် ယာယီတိုင်သတာမဟုအနေဖဌင့် SUID အမဌစ်အလံကို /usr/bin/pkexec ပရိုဂရမ် (“chmod 8 /usr/bin/pkexec”) မဟ ဖယ်ရဟာသနိုင်သည်။



source: opennet.ru

မဟတ်ချက် Add