သီးခြား scripts များမှ system commands များကိုခေါ်ရန်ခွင့်ပြုသော Python တွင်အားနည်းချက်

Python 2.7 တွင် ပေါ်ခဲ့သည့် ကာလကြာရှည် လူသိများသည့် ချို့ယွင်းချက် အသုံးပြုမှုအပေါ် အခြေခံ၍ Python ရှိ သီးခြားကုဒ် လည်ပတ်မှုစနစ်များကို ကျော်ဖြတ်ရန် နည်းလမ်းကို 2012 ခုနှစ်တွင် ရှာဖွေတွေ့ရှိခဲ့ပြီး Python 3 တွင် ပြုပြင်မရသေးပါ။ ချွတ်ယွင်းချက်သည် အထူးချိတ်ဆက်ထားသော ချိတ်ဆက်အသုံးပြုမှုကို ခွင့်ပြုသည် Python တွင် လွတ်ပြီးသော မမ်မိုရီ (အသုံးပြုခြင်း-လွန်-အခမဲ့) ကို စတင်အသုံးပြုရန် Python ကုဒ်။ ကနဦးတွင်၊ အမှားသည် လုံခြုံရေးခြိမ်းခြောက်မှုတစ်ခုမဟုတ်ဟု ယူဆရပြီး အလွန်ရှားပါးသောကိစ္စများတွင်သာ အတုအယောင်ဖန်တီးထားခြင်းကြောင့်သာ ဇာတ်ညွှန်းကို မူမမှန်စွာရပ်စဲသွားနိုင်သည်။

ကလောင်အမည် kn32 လက်အောက်ရှိ လုံခြုံရေးသုတေသီတစ်ဦးသည် ပြဿနာကို စိတ်ဝင်စားလာပြီး os.system ကဲ့သို့ နည်းလမ်းများကို တိုက်ရိုက်ဝင်ရောက်ခွင့်မရှိဘဲ မည်သည့်စနစ်အမိန့်ကိုမဆိုခေါ်ဆိုရန် လုပ်ဆောင်နိုင်သည့် အလုပ်ထုတ်နှုတ်မှုတစ်ခုကို ပြင်ဆင်နိုင်ခဲ့သည်။ exploit ကို Python တွင်အသုံးပြုထားပြီး ပြင်ပစာကြည့်တိုက်များကို မတင်သွင်းဘဲ “code.__new__” handler ကို ထည့်သွင်းခြင်းမပြုဘဲ အလုပ်လုပ်ပါသည်။ ချိတ်များတွင် "builtin.__id__" ကိုသာအသုံးပြုသည်၊ ၎င်းသည် များသောအားဖြင့် တားမြစ်ထားသည်။ လက်တွေ့တွင်၊ Python ကုဒ်ကို လုပ်ဆောင်ခွင့်ပြုသည့် အမျိုးမျိုးသော ဝန်ဆောင်မှုများနှင့် ပတ်ဝန်းကျင်များတွင် (ဥပမာ၊ သင်ကြားရေးပတ်ဝန်းကျင်၊ အွန်လိုင်း shells၊ တပ်ဆင်ထားသော လက်ကိုင်ကိရိယာများ အစရှိသည်) တွင် အဆိုပြုထားသောကုဒ်ကို အသုံးပြုနိုင်ပြီး၊ ကန့်သတ်ချက်များကို ကန့်သတ်ထားသည်။ ရရှိနိုင်သောခေါ်ဆိုမှုများနှင့် os.system ကဲ့သို့သော ခေါ်ဆိုမှုနည်းလမ်းများကို ခွင့်မပြုပါ။

အဆိုပြုထားသောကုဒ်သည် CPython တွင် အားနည်းချက်တစ်ခုကို အသုံးချခြင်းဖြင့် အလုပ်လုပ်သော os.system ခေါ်ဆိုမှု၏ analogue တစ်ခုဖြစ်သည်။ exploit သည် x3-86 ဗိသုကာလက်ရာများဖြင့် စနစ်များတွင် Python 64 ဗားရှင်းအားလုံးနှင့် အလုပ်လုပ်ပြီး PIE၊ RELRO နှင့် CET ကာကွယ်ရေးမုဒ်များကို ဖွင့်ထားသည့်အခါတွင်ပင် Ubuntu 22.04 တွင် တည်ငြိမ်သောလုပ်ဆောင်ချက်ကို ပြသသည်။ ၎င်းသည် လည်ပတ်နိုင်သော CPython ကုဒ်ရှိ လုပ်ဆောင်ချက်များထဲမှ တစ်ခု၏လိပ်စာနှင့်ပတ်သက်သည့် Python ကုဒ်မှ အချက်အလက်ကို ရယူခြင်းမှ ဆင်းသက်လာခြင်းဖြစ်သည်။ ဤလိပ်စာကို အခြေခံ၍ မန်မိုရီရှိ CPython ၏ အခြေခံလိပ်စာနှင့် မန်မိုရီတွင် တင်ထားသော libc instance ရှိ system() လုပ်ဆောင်ချက်၏ လိပ်စာကို တွက်ချက်သည်။ အဆုံးတွင်၊ သီးခြားစနစ်လိပ်စာသို့ တိုက်ရိုက်ကူးပြောင်းခြင်းကို ပထမအငြင်းအခုံ၏ညွှန်ပြချက်ကို “/bin/sh” မျဉ်းသို့ အစားထိုးခြင်းဖြင့် စတင်သည်။

သီးခြား scripts များမှ system commands များကိုခေါ်ရန်ခွင့်ပြုသော Python တွင်အားနည်းချက်


source: opennet.ru

မှတ်ချက် Add