ဖတ်ရှုရန်-သီးသန့်ဖိုင်များကို ပျက်စီးစေမည့် Linux kernel ရှိ အားနည်းချက်

O_RDONLY အလံဖြင့်ဖွင့်ထားသော သို့မဟုတ် ဖိုင်စနစ်များပေါ်တွင်ရှိသော ဖိုင်များအပါအဝင် မည်သည့်ဖိုင်များအတွက်မဆို စာမျက်နှာ cache ၏အကြောင်းအရာများကို overwrite လုပ်ခွင့်ပြုသော Linux kernel (CVE-2022-0847) တွင် အားနည်းချက်တစ်ခုအား ဖော်ထုတ်ထားပါသည်။ ဖတ်ရန်သာမုဒ်တွင် ထည့်သွင်းထားသည်။ လက်တွေ့ကျသောအားဖြင့်၊ အားနည်းချက်မှာ ကုဒ်ကို မတရားသော လုပ်ငန်းစဉ်များထဲသို့ ထိုးသွင်းရန် သို့မဟုတ် ဖွင့်ထားသောဖိုင်များတွင် ဒေတာယိုယွင်းမှုဖြစ်စေရန်အတွက် အသုံးပြုနိုင်သည်။ ဥပမာအားဖြင့်၊ သင်သည် sshd လုပ်ငန်းစဉ်အတွက် authorized_keys ဖိုင်၏ အကြောင်းအရာများကို ပြောင်းလဲနိုင်သည်။ exploit ၏ ရှေ့ပြေးပုံစံကို စမ်းသပ်ရန်အတွက် ရနိုင်ပါသည်။

အဆိုပါပြဿနာကို 2016 ခုနှစ်တွင် ရှာဖွေတွေ့ရှိခဲ့သည့် Dirty COW ၏ ကုဒ်အမည်မှာ Dirty Pipe ဖြစ်သည်။ အန္တရာယ်အဆင့်သတ်မှတ်ချက်အရ Dirty Pipe သည် Dirty COW နှင့် တူညီသော်လည်း လည်ပတ်ရန် ပိုမိုလွယ်ကူကြောင်း မှတ်သားရပါသည်။ ကွန်ရက်ပေါ်ရှိ ဒေါင်းလုဒ်လုပ်ထားသော ဖိုင်များ၏ အချိန်အပိုင်းအခြားအလိုက် အကျင့်ပျက်ခြစားမှုများအကြောင်း တိုင်ကြားချက်များကို ခွဲခြမ်းစိတ်ဖြာရာတွင် အားနည်းချက်ကို ခွဲခြမ်းစိတ်ဖြာကြည့်သောအခါတွင် အားနည်းချက်ကို ခွဲခြမ်းစိတ်ဖြာကြည့်ရာ splice() လုပ်ဆောင်ချက်ကို အသုံးပြုထားသည့် ပြင်ဆင်မှုတွင်၊ နှင့် အမည်မဖော်လိုသော ပိုက်များ။

အားနည်းချက်သည် 5.8 ခုနှစ် သြဂုတ်လတွင် ထွက်ရှိခဲ့သော Linux kernel 2020 မှ စတင်ကာ အားနည်းချက်ပေါ်လာပါသည်။ Debian 11 တွင် ပါရှိသော်လည်း Ubuntu 20.04 LTS ရှိ အခြေခံ kernel ကို မထိခိုက်စေပါ။ RHEL 8.x နှင့် openSUSE/SUSE 15 kernels များသည် အစပိုင်းတွင် အကိုင်းအခက်ဟောင်းများပေါ်တွင် အခြေခံထားသော်လည်း ပြဿနာဖြစ်စေသော အပြောင်းအလဲကို ၎င်းတို့ထံ backport လုပ်ပြီး ဖြစ်နိုင်သည် (ဒေတာအတိအကျ မရသေးပါ)။ ဤစာမျက်နှာများတွင် ဖြန့်ဝေမှုများတွင် ပက်ကေ့ဂျ်အပ်ဒိတ်များထုတ်ဝေခြင်းကို သင်ခြေရာခံနိုင်သည်- Debian၊ SUSE၊ Ubuntu၊ RHEL၊ Fedora၊ Gentoo၊ Arch Linux။ 5.16.11၊ 5.15.25 နှင့် 5.10.102 ထုတ်ဝေမှုများတွင် အားနည်းချက်အတွက် ပြင်ဆင်ရန် အဆိုပြုထားသည်။ အဆိုပါပြင်ဆင်ချက်ကို Android ပလပ်ဖောင်းတွင်အသုံးပြုသည့် kernel တွင်လည်းပါဝင်သည်။

အားနည်းချက်သည် လုပ်ဆောင်ချက်များ copy_page_to_iter_pipe() နှင့် push_pipe() ၏ ကုဒ်တွင် “buf->flags” တန်ဖိုးကို ကနဦးအစပြုခြင်း မရှိခြင်းကြောင့် ဖြစ်ပေါ်လာသော အားနည်းချက်မှာ ဖွဲ့စည်းပုံတစ်ခုနှင့် အချို့သော ခြယ်လှယ်မှုများအတွင်း မန်မိုရီကို ခွဲဝေပေးချိန်တွင် မရှင်းလင်းခြင်းကြောင့် ဖြစ်ပေါ်လာခြင်းဖြစ်သည်။ အမည်မဖော်လိုသော ပိုက်များ၊ အခြားသော လုပ်ဆောင်ချက်တစ်ခုမှ တန်ဖိုးတစ်ခု။ ဤအင်္ဂါရပ်ကိုအသုံးပြုခြင်းဖြင့်၊ အထူးပြင်ဆင်ထားသော အမည်မဲ့ပိုက်တစ်ခုသို့ ဒေတာအသစ်များကို ရေးရုံဖြင့် စာမျက်နှာ ကက်ရှ်တွင် ဒေတာ overwrite ပြုလုပ်နိုင်စေမည့် PIPE_BUF_FLAG_CAN_MERGE တန်ဖိုး၏ ပုံပန်းသဏ္ဍာန်ကို အသုံးပြု၍ အခွင့်ထူးမရသော ဒေသခံအသုံးပြုသူတစ်ဦးသည် စာမျက်နှာ ကက်ရှ်တွင် ဒေတာကို ထပ်ရေးခြင်းအား စုစည်းနိုင်စေပါသည်။

တိုက်ခိုက်မှုတစ်ခုအတွက်၊ ပစ်မှတ်ဖိုင်ကို ဖတ်နိုင်ရမည်ဖြစ်ပြီး၊ ပိုက်သို့စာရေးသည့်အခါ ဝင်ရောက်ခွင့်အခွင့်အရေးကို မစစ်ဆေးသောကြောင့်၊ စာမျက်နှာ ကက်ရှ်တွင် အစားထိုးခြင်းကိုလည်း တပ်ဆင်ထားသည့် အပိုင်းပိုင်းများတွင် ပါရှိသည့် ဖိုင်များအတွက်လည်း ဖတ်ရန်-သပ်သပ် (ဥပမာ၊ ဖိုင် c CD- အတွက်၊ ရွမ်)။ စာမျက်နှာ ကက်ရှ်ရှိ အချက်အလက်ကို အစားထိုးပြီးနောက်၊ ဖိုင်တစ်ခုမှ ဒေတာကို ဖတ်သည့်အခါ၊ လုပ်ငန်းစဉ်သည် အမှန်တကယ် ဒေတာမဟုတ်သော်လည်း အစားထိုးထားသည့် ဒေတာကို လက်ခံရရှိမည်ဖြစ်သည်။

လုပ်ဆောင်ချက်သည် PIPE_BUF_FLAG_CAN_MERGE အလံကို ၎င်းနှင့်ဆက်စပ်သော လက်စွပ်ဖွဲ့စည်းပုံများအားလုံးတွင် သတ်မှတ်ထားကြောင်း သေချာစေရန်အတွက် လုပ်ဆောင်ချက်သည် အမည်မဖော်လိုသည့်ချန်နယ်တစ်ခုကို ဖန်တီးပြီး ၎င်းကို မတရားဒေတာဖြင့် ဖြည့်သွင်းခြင်းဖြစ်သည်။ ထို့နောက်၊ ဒေတာကို ချန်နယ်မှ ဖတ်ပြသော်လည်း pipe_inode_info ring structures ရှိ pipe_buffer တည်ဆောက်မှု၏ အခြေအနေအားလုံးတွင် အလံကို ဆက်လက်သတ်မှတ်ထားသည်။ ထို့နောက် splice() ကို အလိုရှိသော offset မှစတင်၍ အမည်မဖော်လိုသောပိုက်ထဲသို့ ပစ်မှတ်ဖိုင်မှဒေတာကိုဖတ်ရန် ခေါ်ဆိုခြင်းဖြစ်သည်။ PIPE_BUF_FLAG_CAN_MERGE အလံကိုသတ်မှတ်ထားသောကြောင့် ဤအမည်မဲ့ပိုက်သို့ ဒေတာကိုရေးသည့်အခါ၊ pipe_buffer ဖွဲ့စည်းပုံ၏ စံနမူနာအသစ်ကို ဖန်တီးမည့်အစား စာမျက်နှာ cache ရှိဒေတာကို overwrite လုပ်မည်ဖြစ်သည်။

source: opennet.ru

မှတ်ချက် Add