IP လိပ်စာအတည်ပြုခြင်းကို ကျော်လွှားနိုင်စေသည့် Rust နှင့် Go ဘာသာစကားများ၏ ကွန်ရက်စာကြည့်တိုက်များရှိ အားနည်းချက်၊

လိပ်စာခွဲခြမ်းစိတ်ဖြာခြင်းလုပ်ဆောင်ချက်များတွင် မှားယွင်းနေသော IP လိပ်စာများကို အဋ္ဌမဂဏန်းများဖြင့် မှားယွင်းစွာလုပ်ဆောင်ခြင်းဆိုင်ရာ အားနည်းချက်များကို Rust နှင့် Go ဘာသာစကားများ၏ စံပြစာကြည့်တိုက်များတွင် တွေ့ရှိခဲ့သည်။ အားနည်းချက်များသည် SSRF (Server-side request forgery) တိုက်ခိုက်မှုများကို လုပ်ဆောင်သောအခါတွင် loopback interface လိပ်စာများ (127.xxx) သို့မဟုတ် intranet subnets များသို့ ဝင်ရောက်ခွင့်ကို စုစည်းရန် အပလီကေးရှင်းများရှိ တရားဝင်လိပ်စာများကို စစ်ဆေးမှုများကို ကျော်ဖြတ်နိုင်စေပါသည်။ အားနည်းချက်များသည် libraries node-netmask (JavaScript၊ CVE-2021-28918၊ CVE-2021-29418)၊ private-ip (JavaScript၊ CVE-2020-28360)၊ ipaddress (Python၊ CVE-) တွင် ဖော်ပြထားသော အားနည်းချက်များသည် ပြဿနာသံသရာလည်နေပါသည်။ 2021-29921), ဒေတာ::Validate::IP (Perl, CVE-2021-29662) နှင့် Net::Netmask (Perl, CVE-2021-29424)။

သတ်မှတ်ချက်အရ သုညမှစတင်သည့် IP လိပ်စာစာတန်းတန်ဖိုးများကို အဋ္ဌမဂဏန်းများအဖြစ် အဓိပ္ပာယ်ဖွင့်ဆိုသင့်သော်လည်း စာကြည့်တိုက်များစွာသည် ၎င်းကို ထည့်သွင်းစဉ်းစားပြီး သုညကို ဖယ်ပစ်ကာ တန်ဖိုးကို ဒဿမဂဏန်းအဖြစ် သတ်မှတ်သည်။ ဥပမာအားဖြင့်၊ အဋ္ဌမကိန်းတွင် ၀၁၇၇ သည် ဒဿမ ၁၂၇ နှင့် ညီမျှသည်။ ဒဿမအမှတ်အသားတွင် "0177" နှင့် ကိုက်ညီသည့် တန်ဖိုး "127" ကို သတ်မှတ်ခြင်းဖြင့် တိုက်ခိုက်သူသည် အရင်းအမြစ်တစ်ခု တောင်းဆိုနိုင်သည်။ ပြဿနာရှိသောစာကြည့်တိုက်ကိုအသုံးပြုပါက၊ လိပ်စာ 0177.0.0.1 သည် subnet 127.0.0.1/0177.0.0.1 တွင်ရှိကြောင်း၊ အပလီကေးရှင်းမှရှာဖွေတွေ့ရှိမည်မဟုတ်သော်လည်း၊ အမှန်တကယ်တောင်းဆိုမှုတစ်ခုပေးပို့သည့်အခါ၎င်းသည် "127.0.0.1" လိပ်စာကိုဝင်ရောက်နိုင်သည် ကွန်ရက်လုပ်ဆောင်ချက်များသည် 8 အဖြစ် လုပ်ဆောင်မည်ဖြစ်သည်။ အလားတူ “0177.0.0.1” (“127.0.0.1” နှင့် ညီမျှသော တန်ဖိုးများကို သတ်မှတ်ခြင်းဖြင့် အင်ထရာနက်လိပ်စာများသို့ ဝင်ရောက်ခွင့်စစ်ဆေးချက်ကို လိမ်လည်လှည့်ဖြားနိုင်သည်။

Rust တွင်၊ စံပြစာကြည့်တိုက် "std::net" သည် ပြဿနာတစ်ခု (CVE-2021-29922) ကြောင့် ထိခိုက်ခဲ့သည်။ ဤဒစ်ဂျစ်တိုက်၏ IP လိပ်စာခွဲခြမ်းစိတ်ဖြာမှုသည် လိပ်စာရှိတန်ဖိုးများရှေ့တွင် သုညတစ်ခုအား စွန့်ပစ်ထားသော်လည်း၊ ဥပမာအားဖြင့် ဂဏန်းသုံးလုံးထက်မပိုပါက၊ ဥပမာ "0177.0.0.1" ကို မမှန်ကန်သောတန်ဖိုးအဖြစ် မှတ်ယူမည်ဖြစ်ပြီး မမှန်သောရလဒ် 010.8.8.8 နှင့် 127.0.026.1 တို့ကို တုံ့ပြန်မှုဖြင့် ပြန်ပေးပါမည်။ std::net::IpAddr ကိုအသုံးပြုသောအသုံးပြုသူသတ်မှတ်ထားသောလိပ်စာများကိုခွဲခြမ်းစိတ်ဖြာသောအခါတွင် SSRF (Server-side request forgery)၊ RFI (Remote File Inclusion) နှင့် LFI (Local File Inclusion) တို့၏တိုက်ခိုက်မှုများကိုခံရနိုင်ချေရှိသည်။ အားနည်းချက်ကို Rust 1.53.0 ဌာနခွဲတွင် ပြင်ဆင်ထားသည်။

IP လိပ်စာအတည်ပြုခြင်းကို ကျော်လွှားနိုင်စေသည့် Rust နှင့် Go ဘာသာစကားများ၏ ကွန်ရက်စာကြည့်တိုက်များရှိ အားနည်းချက်၊

Go တွင်၊ ပုံမှန်ဒစ်ဂျစ်တိုက် "net" ကို ထိခိုက်သည် (CVE-2021-29923)။ net.ParseCIDR built-in လုပ်ဆောင်ချက်သည် ၎င်းတို့ကို လုပ်ဆောင်မည့်အစား အဋ္ဌမဂဏန်းများရှေ့တွင် သုညကို ကျော်သွားပါသည်။ ဥပမာအားဖြင့်၊ တိုက်ခိုက်သူသည် net.ParseCIDR(00000177.0.0.1/00000177.0.0.1) လုပ်ဆောင်ချက်ကို စစ်ဆေးသောအခါတွင် တန်ဖိုး 24 ကို ကျော်သွားနိုင်ပြီး 177.0.0.1/24 ကဲ့သို့ ခွဲခြမ်းစိတ်ဖြာမည်မဟုတ်ပါ။ ပြဿနာသည် Kubernetes ပလပ်ဖောင်းတွင်လည်း ထင်ရှားသည်။ Go release 127.0.0.1 နှင့် beta 24 တို့တွင် အားနည်းချက်ကို ပြင်ဆင်ထားသည်။

IP လိပ်စာအတည်ပြုခြင်းကို ကျော်လွှားနိုင်စေသည့် Rust နှင့် Go ဘာသာစကားများ၏ ကွန်ရက်စာကြည့်တိုက်များရှိ အားနည်းချက်၊


source: opennet.ru

မှတ်ချက် Add