Qualys ду осебпазириро (CVE-2021-44731, CVE-2021-44730) дар утилитаи snap-confine муайян кард, ки бо парчами решаи SUID фиристода мешавад ва аз ҷониби раванди snapd барои эҷоди муҳити иҷрошаванда барои барномаҳое, ки дар бастаҳои худкори snap фиристода мешаванд, даъват карда мешавад. Осебпазириҳо ба корбари маҳаллӣ ва беимтиёз имкон медиҳанд, ки рамзро бо имтиёзҳои реша дар система иҷро кунад. Мушкилот дар навсозии имрӯзаи бастаи snapd барои... Ubuntu 21.10, 20.04 ва 18.04.
Осеби аввал (CVE-2021-44730) имкон медиҳад, ки ҳамла тавассути манипуляцияи пайванди сахт анҷом дода шавад, аммо хомӯш кардани ҳифзи пайванди сахти системаро талаб мекунад (муқаррар кардани sysctl fs.protected_hardlinks ба 0). Ин мушкилот аз сабаби санҷиши нодурусти ҷойгиршавии файлҳои иҷрошавандаи snap-update-ns ва snap-discard-ns, ки бо имтиёзҳои root иҷро мешаванд, ба вуҷуд омадааст. Роҳи ин файлҳо дар функсияи sc_open_snapd_tool() дар асоси роҳи худи ҳамлагар аз /proc/self/exe ҳисоб карда шуд, ки имкон медиҳад, ки пайванди сахт ба snap-confine дар феҳристи фармоишӣ эҷод карда шавад ва версияҳои фармоишии snap-update-ns ва snap-discard-ns дар он феҳрист ҷойгир карда шаванд. Пас аз оғози тавассути пайванди сахт, snap-confine, бо имтиёзҳои root, файлҳои snap-update-ns ва snap-discard-ns-ро аз феҳристи ҷорӣ, ки аз ҷониби ҳамлагар иваз карда шудаанд, оғоз мекунад.
Осебпазирии дуюм аз сабаби шароити мусобиқа ба вуҷуд меояд ва метавонад дар конфигуратсия истифода шавад Ubuntu Мизи корӣ пешфарз аст. Барои он ки эксплойт бомуваффақият кор кунад Ubuntu Сервер ҳангоми насб кардани яке аз бастаҳо аз бахши "Snaps-ҳои махсуси сервер" ба интихоб ниёз дорад. Дар функсияи setup_private_mount() шарти мусобиқа рух медиҳад, ки ҳангоми омода кардани фазои номи нуқтаи васлкунӣ барои бастаи snap даъват карда мешавад. Ин функсия директорияи муваққатии "/tmp/snap.$SNAP_NAME/tmp"-ро эҷод мекунад ё директорияи мавҷударо барои пайваст кардани директорияҳо барои бастаи snap истифода мебарад.
Азбаски номи директорияи муваққатӣ пешгӯишаванда аст, ҳамлагар метавонад мундариҷаи онро пас аз тасдиқи моликият, вале пеш аз даъват кардани даъвати системаи mount, бо пайванди рамзӣ иваз кунад. Масалан, дар директорияи /tmp/snap.lxd пайванди рамзии "/tmp/snap.lxd/tmp"-ро метавон эҷод кард, ки ба директорияи ихтиёрӣ ишора мекунад ва даъвати mount() пайванди рамзиро пайравӣ мекунад ва директорияро дар фазои номҳои snap васл мекунад. Ба ҳамин монанд, метавон мундариҷаи худро дар /var/lib васл кард ва бо иваз кардани /var/lib/snapd/mount/snap.snap-store.user-fstab, директорияи /etc-и худро дар фазои номҳои бастаи snap васл кард, то китобхонаи худро бо имтиёзҳои root бо иваз кардани /etc/ld.so.preload бор кунад.
Қайд карда мешавад, ки эҷоди эксплойт вазифаи душвор буд, зеро утилитаи snap-confine бо истифода аз усулҳои барномасозии бехатар дар Go навишта шудааст, аз ҷониби профилҳои AppArmor ҳифз карда мешавад, зангҳои системаро бо истифода аз механизми seccomp филтр мекунад ва барои ҷудокунӣ аз фазои номҳои mount истифода мебарад. Бо вуҷуди ин, муҳаққиқон тавонистанд эксплойти кориро барои ба даст овардани имтиёзҳои root дар система эҷод кунанд. Коди эксплойт пас аз чанд ҳафта, пас аз насб кардани навсозиҳои пешниҳодшуда аз ҷониби корбарон нашр мешавад.
Манбаъ: opennet.ru
