В Snapd е идентифицирана уязвимост което вече е описано в (CVE-2019 7304-), което позволява на непривилегирован потребител да получи администраторски права (root) в системата.
За тези, които не са запознати със Snapd, можем да ви кажем, че това е набор от инструменти за управление на самостоятелни пакети във формат snap. За да се тестват уязвимостите на системите, бяха публикувани два прототипа на експлоата.
- Първият, който позволява на нападателя да създаде нов потребител в системата.
- Втората позволява на атакуващия да има възможност да инсталира всякакъв вид незабавен пакет в системата и да стартира кода като root (чрез инсталиране на пакета в режим "devmode" с прикачен файл на драйвера с привилегии за root, когато инсталира пакета).
Какви са тези подвизи?
Експлойтът, създаден за използване на първата посочена възможност по-рано пропуснете проверките за контрол на достъпа да се използва ограничена API функция на локалната услуга snapd.
Това заявява системата за потребителско име и публичен SSH ключ от предоставен имейл адрес и след това създава локален потребител въз основа на тази стойност.
Успешното използване на тази версия изисква изходяща интернет връзка и SSH услуга, достъпна чрез localhost.
Създаден е вторият експлойт да се възползва от посочената втора точка, за разлика от предишния описан експлойт, не изисква SSH услугата да работи.
също ще работи върху по-нови версии на Ubuntu без интернет връзка, което го прави устойчив на промени и ефективен в ограничена среда.
Този подвиг Той също така трябва да бъде ефективен за системи, които не са Ubuntu, които са инсталирали snapd, но не са съвместими с API поради синтаксиса на черупката на Linux.
Някои по-стари системи на Ubuntu (като версия 16.04) може да нямат инсталирани компоненти snapd, необходими за изтегляне.
Ако случаят е такъв, тази версия на експлоата може да го задейства, за да инсталира тези зависимости. По време на тази инсталация, snapd може да бъде надстроена до не-уязвима версия.
За да научите малко повече за тях, можете да получите повече подробности В следващия линк.
От какво се състои тази открита грешка?
Уязвимостта се дължи липса на правилни проверки в snapd при обработка на адрес на външен сокет в процеса на оценка на правата за достъп за Unix сокети.
Когато обработвате заявки към API чрез Unix сокет, UID на потребителя, свързан с връзката, се проверява и въз основа на това се взема решение за достъп.
Потребителят може да прикачи низ «; uid = 0; » към името на файла с сокета (например създайте сокет "/ tmp / sock; uid = 0;") и този низ ще бъде обработен като част от адреса на клиентския сокет.
Когато анализирате параметрите в snapd, потребителският идентификатор се присвоява чрез циклично търсене с помощта на маската "; Uid =" на реда, който включва и името на файла с сокета (например при създаване на клиентски сокет "/ tmp / sock; uid = 0;" този ред приема формата "pid = 5275; uid = 1000; socket = / run / snapd.socket; / tmp / sock; uid = 0; «).
Следователно, ако има верига "; Uid = 0;" в името на сокета идентификаторът ще бъде присвоен от него, а не от обикновения параметър с действителния UID.
Локалният нападател може да използва тази грешка за достъп до сокета /run/snapd.socket до привилегирования API на snapd и да придобие привилегии на администратор (предишните уязвимости използват API на v2 / create-user и / v2 / snaps).
Какви версии засяга и съществува ли решение вече?
Проблемът се проявява в snapd версии от 2.28 до 2.37 и засяга всички поддържани клонове на Ubuntu (от 14.04 до 18.10), както и в дистрибуции, получени от някоя от тези споменати версии.
Проблемът засяга също дистрибуциите на Fedora и Debian, в който snapd се предлага от обикновени хранилища.
Уязвимостта е отстранена в snapd 2.37.1 версия, както и актуализации на пакети за дистрибуции на Ubuntu и Debian.