В пакета управления Guix бяха открити уязвимости (CVE не назначени) в реализацията на вътрешната команда «guix substitute», която автоматично се извиква от фоновия процес guix-daemon при извършване на операции по инсталиране на пакети. Командата се използва за изтегляне на вече събрани бинарни пакети от външни сървъри, като се проверява тяхната цялост чрез цифров подпис. Най-опасната уязвимост позволява отдалечено изпълнение на код на системата на потребителя с правата, под които работи фоновият процес guix-daemon.
Проблемът засяга всички конфигурации с процеса guix-daemon, независимо дали се стартира с права root или под непривилегирован потребител. За експлоатацията на уязвимостта е достатъчна всяка опит за изтегляне на готови бинарни пакети от сървър, контролирани от атакуващия. При това злонамерен сървър не е задължително да бъде изрично избран или посочен в настройките на потребителя — той може да бъде определен с помощта на опцията «—discover», което позволява подмяна на сървъра по време на MITM-атака. В конфигурации, в които guix-daemon е стартиран с повишени привилегии, локалният потребител може да извърши атака при възможност за свързване с фоновия процес чрез Unix-сокет (по подразбиране достъпен за всички потребители).
Уязвимостта е присъства в обработчика «restore-file», използван за разопаковане при зареждане на пакета, без да се изчака пълното му зареждане и проверка на заредения архив чрез цифров подпис. Проблемът е предизвикан от липсата на проверка за наличието на символи «.», «/» и «..» в пътищата на файловете в архива. Чрез подмяна в архива на некоректни имена на файлове, атакуващият може да постигне запис на произволен файл в произволна част от файловата система, доколкото позволяват правата, под които работи фоновият процес guix-daemon.
За да организира изпълнението на собствения си код в системата, например, може да добави автоматично стартиращ сценарий, като «~/ .bashrc» или «~/ .profile», или да промени файла «~/ .ssh/authorized_keys» с SSH ключове. Ако в многостепенна система guix-daemon работи под потребителя root, атакуващият може да презапише файла с пароли или системни скриптове.
Възможността за създаване на подставни сървъри за разпространение на злонамерени пакети е резултат от факта, че процедурата за зареждане на метаданни (narinfo) за наличните бинарни пакети (fetch-narinfos) не извършваше проверка на сертификата на сървъра, разчитайки на факта, че основна част от метаданните е заверена с цифров подпис. Както се оказа, подписът не обхващаше URL адреса за зареждане на пакета, което позволяваше подмяна, без да се нарушава целостта на метаданните. В крайна сметка подставният пакет би бил отхвърлен поради непреминаването на проверка за съдържанието му по хеш, заверен с цифров подпис, но тази проверка се извършваше след етапа на разопаковане, на който се проявяваше проблемът със специалните символи в имената на файловете.
Освен командата «guix substitute», уязвимият обработчик «restore-file» е задействан в работата на командите «guix offload», «guix archive —extract» и «guix challenge», чрез които също може да бъде експлоатирана уязвимостта. Като обходен вариант за блокиране на уязвимостта се предлага явно да се посочва опцията «—no-substitutes» във всички команди guix. Поправката на уязвимостта е приета в кодовата база на Guix. На потребителите се препоръчва незабавно да инсталират изградените от разработчиците актуализации на guix и guix-daemon.
В допълнение към посочената проблема в Guix са отстранени още три уязвимости:
- Възможността за подмяна на бинарни пакети поради липса на проверка на съответствието на запитания пакет с върнатите метаданни в обработчика fetch-narinfos. Уязвимостта може да бъде използвана за предоставяне на остаряла версия на запитвания пакет, съдържаща уязвимости.
- Определяне на съдържанието на първия ред на произволни файлове в системата чрез предаване на запитване от локален потребител с URI «file://» («—substitute-urls file:///etc/shadow»). Ако guix-daemon работи с права на root, той ще прочете запитания файл, ще определи, че не е метаданни и ще изведе грешка, в текста на която ще бъде споменат редът, който не е успял да се анализира.
- Указанието за специално форматирано име на външно репозиторио («..\/..\/..\/..\/newfile») по време на изпълнение на командите «guix pull» и «guix time-machine» позволява записването на данни с информация за комита в произволен съществуващ файл в файловата система, ако съдържанието му наподобява списък от редове на езика Scheme. Уязвимостта може да се използва за DoS атаки, но не е изключено, че чрез хитри манипулации с псевдо-ФС \/proc могат да се постигнат по-опасни манипулации със системата.
Източник: opennet.ru
