Snap Package Management Toolkit တွင် Root Vulnerability

Qualys သည် SUID အမြစ်အလံနှင့်အတူ ပါလာသည့် snap-confine utility တွင် ယခုနှစ်အတွင်း တတိယအန္တရာယ်ရှိသော အားနည်းချက် (CVE-2022-3328) ကို ဖော်ထုတ်ခဲ့ပြီး ၎င်းသည် ကိုယ်တိုင်ပါရှိသော ပက်ကေ့ဂျ်များအတွင်း ဖြန့်ဝေထားသော အပလီကေးရှင်းများအတွက် စီစဥ်နိုင်သောပတ်ဝန်းကျင်ကို ဖန်တီးရန် snapd လုပ်ငန်းစဉ်ဖြင့် ခေါ်ထားသည်။ snap format ထဲမှာ။ အားနည်းချက်သည် မူရင်း Ubuntu ဖွဲ့စည်းမှုပုံစံတွင် root အဖြစ် အခွင့်ထူးမခံရသေးသော ဒေသခံအသုံးပြုသူတစ်ဦးအား ကုဒ်လုပ်ဆောင်မှုအောင်မြင်ရန် ခွင့်ပြုသည်။ ပြဿနာကို snapd 2.57.6 ထုတ်ဝေမှုတွင် ဖြေရှင်းထားသည်။ Ubuntu ၏ ပံ့ပိုးထားသော အကိုင်းအခက်အားလုံးအတွက် Package အပ်ဒိတ်များကို ထုတ်ပြန်လိုက်ပါပြီ။

စိတ်ဝင်စားစရာမှာ snap-confine တွင် အလားတူ ဖေဖော်ဝါရီ အားနည်းချက်ကို ပြင်ဆင်သည့် လုပ်ငန်းစဉ်အတွင်း မေးခွန်းထုတ်သည့် အားနည်းချက်ကို မိတ်ဆက်ခဲ့သည်။ သုတေသီများသည် Ubuntu Server 22.04 သို့ root access ပေးသည့် လုပ်ငန်းသုံး exploit ကို ပြင်ဆင်နိုင်ခဲ့ပြီး snap-confine တွင် အားနည်းချက်အပြင် multipathd လုပ်ငန်းစဉ် (CVE-2022-41974၊ CVE-2022-41973) တွင် အားနည်းချက်နှစ်ခုလည်း ပါဝင်ပါသည်။ အခွင့်ထူးခံ ညွှန်ကြားချက်များ ပေးပို့ခြင်းနှင့် သင်္ကေတ လင့်ခ်များဖြင့် မလုံခြုံသော အလုပ် လုပ်သည့်အခါ အခွင့်အာဏာ စစ်ဆေးခြင်းကို ရှောင်ကွင်းခြင်း နှင့် ဆက်စပ်ပါသည်။

Snap-confine တွင် အားနည်းချက်သည် /tmp/snap.$SNAP_NAME လမ်းညွှန်ကို ပိုင်ရှင်ကိုစစ်ဆေးပြီးနောက် သင်္ကေတလင့်ခ်ဖြင့် အစားထိုးခြင်းမှ ကာကွယ်ရန်အတွက် must_mkdir_and_open_with_perms() လုပ်ဆောင်ချက်ရှိ ပြိုင်ဆိုင်မှုအခြေအနေကြောင့် ဖြစ်ပေါ်လာသည်၊ သို့သော် mount system ကို မခေါ်ဆိုမီ၊ snap format ဖြင့် package တစ်ခုအတွက် bind-mount directory များကို ၎င်းတွင် ခေါ်ဆိုပါ။ ထပ်လောင်းကာကွယ်မှုသည် /tmp/snap.$SNAP_NAME လမ်းညွှန်ကို /tmp တွင်ရှိပြီး၊ root မပိုင်ဆိုင်ပါက ကျပန်းအမည်ဖြင့် အခြားလမ်းညွှန်တစ်ခုသို့ အမည်ပြောင်းရန်ဖြစ်သည်။

/tmp/snap.$SNAP_NAME လမ်းညွှန်အမည်ပြောင်းခြင်း လုပ်ဆောင်ချက်ကို အသုံးချသည့်အခါ၊ သုတေသီများသည် snap-confine သည် snap package ၏အကြောင်းအရာများ၏ root အတွက် /tmp/snap.rootfs_XXXXXX လမ်းညွှန်တစ်ခုကို ဖန်တီးပေးသည်ဟူသောအချက်ကို သုတေသီများက အခွင့်ကောင်းယူခဲ့သည်။ အမည်၏ "XXXXXX" အပိုင်းကို mkdtemp() ဖြင့် ကျပန်းရွေးချယ်ထားသော်လည်း "rootfs_XXXXXX" အမည်ရှိ ပက်ကေ့ဂျ်တစ်ခုကို sc_instance_name_validate လုပ်ဆောင်ချက်တွင် အတည်ပြုနိုင်သည် (ဆိုလိုသည်မှာ အယူအဆမှာ $SNAP_NAME ကို "rootfs_XXXXXX" ဟု သတ်မှတ်ပြီးနောက် အမည်ပြောင်းခြင်း လုပ်ဆောင်ချက် root snap ဖြင့် /tmp/snap.rootfs_XXXXXX directory ကို overwrite လုပ်ရန် ရလဒ် ထွက်ပေါ်လာလိမ့်မည်။

/tmp/snap.rootfs_XXXXXX ကို တစ်ပြိုင်နက် အသုံးပြုခြင်းနှင့် /tmp/snap.$SNAP_NAME အမည်ပြောင်းခြင်း အောင်မြင်စေရန်အတွက်၊ snap-confine ဖြစ်ရပ်နှစ်ခုကို စတင်လိုက်ပါသည်။ ပထမဥပမာကို /tmp/snap.rootfs_XXXXXX ဖန်တီးပြီးသည်နှင့်၊ လုပ်ငန်းစဉ်သည် ပိတ်ဆို့သွားမည်ဖြစ်ပြီး ဒုတိယဥပမာသည် ပက်ကေ့ဂျ်အမည် rootfs_XXXXXX ဖြင့် စတင်မည်ဖြစ်ပြီး၊ ဒုတိယဥပမာ၏ ယာယီလမ်းညွှန် /tmp/snap.$SNAP_NAME သည် အမြစ်လမ်းညွှန် /tmp/snap ဖြစ်လာစေသည် .rootfs_XXXXXX ၏ ပထမ။ အမည်ပြောင်းခြင်းပြီးသည်နှင့် ချက်ခြင်းတွင်၊ ဒုတိယဥပမာ ပျက်သွားကာ ဖေဖော်ဝါရီ အားနည်းချက်ကို အသုံးချသည့်အနေဖြင့် /tmp/snap.rootfs_XXXXXX အား ပြိုင်ပွဲအခြေအနေ ခြယ်လှယ်မှုဖြင့် အစားထိုးခဲ့သည်။ အစားထိုးပြီးနောက်၊ လုပ်ဆောင်ချက်လော့ခ်ကို ပထမအကြိမ်မှ ဖယ်ရှားခဲ့ပြီး တိုက်ခိုက်သူများသည် snap root directory ကို အပြည့်အဝ ထိန်းချုပ်နိုင်ခဲ့သည်။

နောက်ဆုံးအဆင့်မှာ mount() ဟုခေါ်ဆိုသောကြောင့်၊ mount() ခေါ်ဆိုမှုကြောင့် ဖိုင်စနစ်ရှိ မည်သည့်လမ်းညွှန်ကိုမဆို ချိတ်ဆက်ရန် နောက်ဆုံးအဆင့်မှာ symlink /tmp/snap.rootfs_XXXXXX/tmp ကို ဖန်တီးရန် sc_bootstrap_mount_namespace() လုပ်ဆောင်ချက်မှ အသုံးပြုခဲ့သည်။ မတပ်ဆင်မီ symlinks များကို လိုက်နာပါ။ ထိုသို့သော တပ်ဆင်ခြင်းကို AppArmor ကန့်သတ်ချက်များဖြင့် ပိတ်ဆို့ထားသော်လည်း ဤပိတ်ဆို့ခြင်းကို ကျော်လွှားရန်အတွက် exploit သည် multipathd တွင် အရန်အားနည်းချက်နှစ်ခုကို အသုံးပြုခဲ့သည်။

source: opennet.ru

မှတ်ချက် Add