Kernel အားနည်းချက် Linux၎င်းသည် သင့်အား read-only ဖိုင်များကို corrupt လုပ်ခွင့်ပြုသည်

အဓိကအချက်မှာ Linux read-only mode မှာဖွင့်ထားတဲ့ဖိုင်တွေ၊ O_RDONLY flag နဲ့ဖွင့်ထားတဲ့ဖိုင်တွေ ဒါမှမဟုတ် read-only mode မှာ mount လုပ်ထားတဲ့ဖိုင်စနစ်တွေမှာ ရှိတဲ့ဖိုင်တွေအပါအဝင် မည်သည့်ဖိုင်အတွက်မဆို page cache content တွေကို overwrite လုပ်နိုင်တဲ့ vulnerability တစ်ခု (CVE-2022-0847) ကို ဖော်ထုတ်နိုင်ခဲ့ပါတယ်။ လက်တွေ့မှာတော့ ဒီ vulnerability ကို arbitrary process တွေထဲကို code တွေ inject လုပ်နိုင်သလို ဖွင့်ထားတဲ့ဖိုင်တွေထဲက data တွေကိုလည်း corrupt လုပ်နိုင်ပါတယ်။ ဥပမာ sshd process အတွက် authorized_keys file ရဲ့ content တွေကို ပြုပြင်နိုင်ပါတယ်။ prototype exploit တစ်ခုကို စမ်းသပ်ဖို့ ရနိုင်ပါတယ်။

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

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

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

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

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

source: opennet.ru

DDoS ကာကွယ်ရေး၊ VPS VDS ဆာဗာများပါသည့် ဆိုက်များအတွက် ယုံကြည်စိတ်ချရသော hosting ကို ဝယ်ယူပါ။ 🔥 DDoS ကာကွယ်မှု၊ VPS VDS ဆာဗာများပါရှိသော ယုံကြည်စိတ်ချရသော ဝဘ်ဆိုက် hosting ကို ဝယ်ယူပါ | ProHoster