Лакальныя root-уразлівасці ў інструментары кіравання пакетамі Snap

Кампанія Qualys выявіла дзве ўразлівасці (CVE-2021-44731, CVE-2021-44730) ва ўтыліце snap-confine, якая пастаўляецца са сцягам SUID root і выкліканай працэсам snapd для фармавання выкананага асяроддзя для прыкладанняў, якія пастаўляюцца ў самадастатковых пакетах у фармат. Уразлівасці дазваляюць лакальнаму непрывілеяванаму карыстачу дамагчыся выкананні кода з правамі root у сістэме. Праблемы ўхіленыя ў сённяшнім абнаўленні пакетаў snapd для Ubuntu 21.10/20.04, 18.04/XNUMX і XNUMX/XNUMX.

Першая ўразлівасць (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 Desktop па змаўчанні. Для паспяховай працы эксплоіта ў Ubuntu Server патрабуецца выбар пры ўсталёўцы аднаго з пакетаў з секцыі "Featured Server Snaps". Стан гонкі выяўляецца ў функцыі setup_private_mount(), выкліканай падчас падрыхтоўкі прасторы імёнаў кропак мантавання для пакета snap. Дадзеная функцыя стварае часовы каталог "/tmp/snap.$SNAP_NAME/tmp" або выкарыстоўвае ўжо існуючы для bind-манціроўкі ў яго каталогаў для пакета ў фармаце 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 і ўжывае для ізаляцыі прастору імёнаў для мантавання. Тым не менш, даследнікам атрымалася падрыхтаваць працоўны эксплоіт для атрымання мае рацыю root у сістэме. Код эксплоіту будзе апублікаваны праз некалькі тыдняў, пасля таго як карыстачы ўсталююць прадстаўленыя абнаўленні.

Крыніца: opennet.ru

Дадаць каментар