Glibc မှ ARMv7 အတွက် memcpy လုပ်ဆောင်ချက်ကို အကောင်အထည်ဖော်ရာတွင် အရေးပါသော အားနည်းချက်

Cisco လုံခြုံရေးသုတေသီများ အဖုံးလေး အသေးစိတျ အားနည်းချက်များ (CVE-2020-6096) 32-bit ARMv7 ပလပ်ဖောင်းအတွက် Glibc-provided memcpy() လုပ်ဆောင်ချက်ကို အကောင်အထည်ဖော်ခြင်း။ 32-bit integers များကို ထိန်းချုပ်ထားသော 7-bit integers များကို စီမံခန့်ခွဲသည့် စုစည်းထားသော ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်မှုများ အသုံးပြုခြင်းကြောင့် ပြဿနာမှာ ကူးယူထားသော ဧရိယာ၏ အရွယ်အစားကို ဆုံးဖြတ်သည့် ကန့်သတ်ဘောင်၏ အနုတ်တန်ဖိုးများကို မှားယွင်းစွာ ကိုင်တွယ်ခြင်းကြောင့် ဖြစ်ပေါ်လာခြင်းဖြစ်သည်။ အနှုတ်အရွယ်အစားရှိသော ARMvXNUMX စနစ်များတွင် memcpy() ကိုခေါ်ဆိုခြင်းသည် တန်ဖိုးများကို နှိုင်းယှဉ်မှုမှားယွင်းစေပြီး သတ်မှတ်ထားသည့်ကြားခံ၏ဘောင်အပြင်ဘက်ရှိ ဧရိယာတွင် ရေးသားသည်။

တိုက်ခိုက်သူသည် ကူးယူထားသောဒေတာအရွယ်အစားကို ပို့လွှတ်သည့် ကိန်းရှင်၏ အနုတ်တန်ဖိုးကို စုစည်းနိုင်သည့် အခြေအနေတွင် ကုဒ်ကို execute လုပ်ရန် အားနည်းချက်ကို အသုံးချနိုင်သည် (ဥပမာ၊ 2 GB ထက်ပို၍ လွှဲပြောင်းသည့်အခါ ၎င်းသည် အနုတ်လက္ခဏာဖြစ်သွားလိမ့်မည်။ ဒေတာ၊ သို့သော်တိုက်ခိုက်မှုအတွင်း၊ ကြားခံကန့်သတ်ချက်များကိုကျော်လွန်ရန်၊ သင်သည်အနည်းဆုံး 4GB လွှဲပြောင်းရန်လိုအပ်သည်)။ memcpy() လုပ်ဆောင်ချက်ကို အပလီကေးရှင်းများတွင် တွင်ကျယ်စွာအသုံးပြုကြပြီး ARMv7 ပရိုဆက်ဆာများသည် မော်တော်ယာဥ်စနစ်များ၊ မိုဘိုင်း၊ စက်မှုလုပ်ငန်း၊ စားသုံးသူ၊ ဆက်သွယ်ရေးနှင့် မြှုပ်သွင်းထားသော စက်ပစ္စည်းများတွင် အသုံးများပြီး Bluetooth၊ HD Radio/DAB၊ USB၊ CAN bus၊ Wi-Fi Fi နှင့် အခြားသော ပြင်ပဒေတာရင်းမြစ်များ (ဥပမာ၊ အရွယ်အစားကန့်သတ်ချက်မရှိဘဲ ထည့်သွင်းဒေတာကို လက်ခံသော ကွန်ရက်ပေါ်တွင် ဝင်ရောက်နိုင်သော ဝန်ဆောင်မှုများနှင့် အပလီကေးရှင်းများ တိုက်ခိုက်ခံရနိုင်သည်)။

ဥပမာတစ်ခုသည် မော်တော်ကား ဝိုင်ဖိုင်ကွန်ရက်မှတစ်ဆင့် ဝင်ရောက်နိုင်သော မော်တော်ကားသတင်းအချက်အလက်စနစ်များအတွင်း တည်ဆောက်ထားသော HTTP ဆာဗာကို တိုက်ခိုက်ရန်အတွက် အလုပ်လုပ်သော exploit ဖန်တီးခြင်း ဖြစ်သည်။ ပြင်ပတိုက်ခိုက်သူသည် အလွန်ကြီးမားသော GET တောင်းဆိုချက်တစ်ခုကို ပေးပို့ခြင်းဖြင့် ဤဆာဗာတွင် memcpy အားနည်းချက်ကို အသုံးချနိုင်သည် ။

Glibc မှ ARMv7 အတွက် memcpy လုပ်ဆောင်ချက်ကို အကောင်အထည်ဖော်ရာတွင် အရေးပါသော အားနည်းချက်

32-bit x86 စနစ်များတွင်၊ ဤဗိသုကာအတွက် memcpy အကောင်အထည်ဖော်မှုသည် အမျိုးအစား size_t ၏ လက်မှတ်မထိုးထားသော ကိန်းပြည့်တန်ဖိုးအဖြစ် အရွယ်အစားကို မှန်ကန်စွာ ဘာသာပြန်ပေးသောကြောင့် ပြဿနာပေါ်လာမည်မဟုတ်ပါ။ အကောင်အထည်ဖော်ခြင်း။ ARMv7 အတွက် ၎င်းကို size_t အစား လက်မှတ်ထိုးထားသော ကိန်းပြည့်အဖြစ် သတ်မှတ်သည်။) အဆိုပါ fix သည်လက်ရှိအဖြစ်ရရှိနိုင်သည်။ ဖာထေးခြင်း။သြဂုတ်လ Glibc 2.32 အပ်ဒိတ်တွင် ပါဝင်မည်ဖြစ်သည်။
လက်မှတ်မထိုးထားသော တွဲဖက်များ (blo နှင့် bhs) ဖြင့် လက်မှတ်ထိုးထားသော အော်ပရေတာများ (bge နှင့် blt) တွင် လုပ်ဆောင်သည့် စည်းဝေးပွဲညွှန်ကြားချက်များကို အသုံးပြုခြင်းအား ပြုပြင်ခြင်းသည် အကျည်းတန်ပါသည်။

ပြဿနာက မပြေလည်သေးဘူး။ Debian 9 နှင့် 10 (Debian 8 တွင် မမြင်နိုင်)၊ Fedora, Ubuntu ကို၊ OpenEmbedded၊ Tizen (glibc မှအသုံးပြုသည်)။ RHEL и suse ၎င်းတို့သည် 32-bit ARMv7 စနစ်များကို မပံ့ပိုးနိုင်သောကြောင့် ပြဿနာမရှိပါ။ ၎င်း၏ကိုယ်ပိုင် libc (Bionic) အကောင်အထည်ဖော်မှုကို အသုံးပြုသောကြောင့် Android သည် အားနည်းချက်ကြောင့် ထိခိုက်မှုမရှိပါ။ IN OpenWRT မူရင်းအားဖြင့်၊ တည်ဆောက်မှုအများစုသည် Musl ကိုအသုံးပြုသော်လည်း glibc ကို repository တွင်လည်းရနိုင်သည်။

source: opennet.ru

မှတ်ချက် Add