ctypes များတွင် တရားဝင်မထားသော အပိုင်းကိန်းဂဏန်းများကို ကိုင်တွယ်သည့်အခါ Python တွင် အားနည်းချက်

ctypes ယန္တရားကို အသုံးပြု၍ C လုပ်ဆောင်ချက်များကို အသုံးပြု၍ C လုပ်ဆောင်ချက်များကို ခေါ်ဆိုသော ကိုင်တွယ်ကိရိယာများတွင် တရားဝင်မထားသော Floating Point နံပါတ်များကို လုပ်ဆောင်သောအခါတွင် ကုဒ်လုပ်ဆောင်မှုဆီသို့ ဦးတည်သွားနိုင်သည့် အားနည်းချက် (CVE-3.7.10-3.6.13) ကို ပြင်ဆင်ပေးသည့် Python ပရိုဂရမ်းမင်းဘာသာစကား 2021 နှင့် 3177 တို့ကို ရရှိနိုင်ပါသည် . ပြဿနာသည် Python 3.8 နှင့် 3.9 အကိုင်းအခက်များကိုလည်း သက်ရောက်မှုရှိသော်လည်း ၎င်းတို့အတွက် အပ်ဒိတ်များသည် ဖြန့်ချိမည့် ကိုယ်စားလှယ်လောင်းအခြေအနေတွင် ရှိနေဆဲဖြစ်သည် (မတ်လ 1 ရက်အတွက် ထုတ်ဝေရန် စီစဉ်ထားသည်)။

ပြဿနာသည် sprintf ကို အန္တရာယ်ကင်းစွာ အသုံးပြုခြင်းကြောင့် ဖြစ်ပေါ်လာသော ctypes လုပ်ဆောင်ချက် PyCArg_repr() တွင် ကြားခံအလျှံပယ်ကြောင့် ဖြစ်ပေါ်လာခြင်းဖြစ်သည်။ အထူးသဖြင့် 'sprintf(buffer," အသွင်ပြောင်းခြင်း၏ရလဒ်ကို လုပ်ဆောင်ရန်၊ ", self->tag, self->value.b)' သည် 256 bytes ("char buffer[256]") ကို ခွဲဝေပေးခဲ့ပြီး ရလဒ်သည် ဤတန်ဖိုးထက် ကျော်လွန်နိုင်သည်။ အားနည်းချက်ရှိ အပလီကေးရှင်းများ၏ အားနည်းချက်ကို စစ်ဆေးရန်၊ c_double.from_param နည်းလမ်းဖြင့် လုပ်ဆောင်သောအခါ ရလဒ်နံပါတ်တွင် အက္ခရာ 1 လုံးပါရှိပြီး ၎င်းနှင့် မကိုက်ညီသောကြောင့် "300e308" တန်ဖိုးကို ကျော်ဖြတ်ရန် ကြိုးစားနိုင်သည်။ 256-byte ကြားခံ။ ပြဿနာရှိသောကုဒ်၏နမူနာ- တင်သွင်း ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

ပြဿနာကို Debian၊ Ubuntu နှင့် FreeBSD တွင် မဖြေရှင်းရသေးသော်လည်း Arch Linux, Fedora, SUSE တွင် ဖြေရှင်းပြီးဖြစ်သည်။ RHEL တွင်၊ FORTIFY_SOURCE မုဒ်တွင် ပက်ကေ့ဂျ်တပ်ဆင်မှု ကြောင့် အားနည်းချက် မဖြစ်ပေါ်ဘဲ၊ ၎င်းသည် string functions များတွင် ထိုကြားခံများ ပြည့်လျှံနေမှုများကို ပိတ်ဆို့ထားသည်။

source: opennet.ru

မှတ်ချက် Add