Изследователи по сигурността от компанията Fenrisk разкриха информация за уязвимости в инструментите Pagure и OBS (Open Build Service), които позволяват компрометиране на инфраструктурите за складиране на пакети на дистрибуциите Fedora и openSUSE. Изследователите демонстрираха как може да се извърши атака за изпълнение на произволен код на сървъри с Pagure и OBS, което може да бъде използвано за подмяна на промени в пакетите в хранилищата на Fedora и openSUSE.
В платформата Pagure, използвана във Fedora за съвместна работа с кода и метаданните на пакетите, бяха открити 4 уязвимости. За експлоатация на откритите проблеми е необходима регистрация в услугата Pagure, която може да получи всеки желаещ (в момента в Pagure.io са регистрирани 24899 потребители). Три от проблемите позволяват прочит на файлове в системата, а един от тях позволява изпълнение на собствен код. сървър. Проблемите бяха открити на 1 януари 2024 година, съобщени чрез bugzilla.redhat.com на 25 април 2024 година и отстранени в Pagure в рамките на 3 часа.
- Уязвимостите CVE-2024-4981 и CVE-2024-47515 са причинени от неправилна обработка на символични линкове във функциите за обновление на файлове и генериране на архиви. Уязвимостите позволяват прочит на съдържанието на локални файлове на сървъра, например, може да се разбере съдържанието на файла с параметри за сесията на администратора на Pagure и да се получи достъп с неговите права. Експлоатацията на уязвимостта във функцията _update_file_in_git() е свързана със създаване на хранилище в Pagure; добавяне на комит с нов файл, който е създаден като символична връзка към желан файл от системата; отваряне на този файл за редактиране в уеб интерфейса.
- Уязвимостта (CVE-2024-4982) във функцията view_issue_raw_file() позволява излизане извън основната директория чрез указване на символите „/..“ в параметрите на заявеното издание. Проблемът позволява прочит на файлове в системата, в зависимост от правата на достъп на процеса, под който работи уеб интерфейсът. Например, за да видите файла /etc/passwd, може да се отвори страницата „http://pagure.local:5000/your-repository/issue/raw/../../../../../../etc/passwd“.
- Уязвимост (CVE-2024-47516) в функцията PagureRepo.log() дава възможност за вмъкване на собствени команди и изпълнение на код на сървъра. Проблемът произтича от това, че при преглед на историята на измененията на файла през уеб интерфейса се извиква командата „git“ с предаване на идентификатора на клон в командния ред (например, „/usr/bin/git —pretty=oneline —abbrev-commit — README.md“). Коректността на идентификатора не се проверява, затова е възможно вместо него да се предаде всяка опция на командния ред, например „—output=/tmp/foo.bar“ за пренасочване на изхода в файл. Атакуващият може да презапише файл в системата, като изпрати заявка от следния вид: http://pagure.local:5000/test/history/README.md?identifier=—output=/tmp/foo.bar
Pagure се изпълнява под потребителя git, затова е възможно да се презаписват само файловете на този потребител. За организиране на изпълнението на своя код на сървъра може да се използва услуга за достъп до хранилището по SSH, при достъпа до която се извиква командата „bash -c /usr/libexec/pagure/aclchecker.py“. Атакуващият може да използва уязвимостта, за да презапише файла „/srv/git/.bashrc“, и този файл ще бъде стартиран от командния интерпретатор bash при достъп до хранилището по ssh.
Атаката се свежда до регистрация в системата Pagure, създаване на хранилище, добавяне в хранилището на файла README.md с бележка за комита от вида „|| /bin/bash“ и изпращане на заявка „http://pagure.local:5000/test/history/README.md?identifier=—output=/srv/git/.bashrc“. В хода на тези стъпки в файла „/srv/git/.bashrc“ ще бъде записан низ от вида „34а5с43 || /bin/bash“. За да се стартира създаденият файл „/srv/git/.bashrc“, е достатъчно да се свържете с хранилището по SSH с вашия акаунт. Изпълнението на кода с правата на потребителя git на сървъра Pagure позволява контрол върху съдържанието на хранилищата с пакети.
В платформата OBS (Open Build Service), използвана в openSUSE и някои други дистрибуции за компилиране на пакети, е установена уязвимост (CVE-2024-22033), която позволява изпълнение на собствен код на сървъра. Уязвимостта е открита на 27 юни 2024 г., съобщена на проекта openSUSE на 29 юни и отстранена на 10 юли.
Уязвимостта е налична в услугата „obs-service-download_url“, в която липсва адекватна проверка на URL адреса, използван при стартиране на утилитата wget от скрипт, който извършва изтегляне на изходния код в OBS. Нападателят може да зададе в услугата OBS конфигурация на генерирания пакет, при която вместо URL за изтегляне на кода е посочен опцията на командния ред за wget, например: —output-document=\/tmp\/test tempfile
За да се избегне връщането на грешка при опит за стартиране на wget без URL, в примера е посочена опцията „download-manifest“, която позволява да се зададе списък с URL адреси в отделен файл. По-горе посоченият пример ще доведе до стартиране на командата: \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 —output-document=\/tmp\/test
която позволява да се запише в файла \/tmp\/test съдържанието, изтеглено от линка, указан в файла \/srv\/obs\/service\/XXXXX\/src\/tempfile от кода, изтеглен от атакуващия в OBS чрез интерфейса build.opensuse.org, който позволява свободна регистрация. Освен презаписването на файла на сървера, атакуващият може също да изпрати всеки файл на себе си, като вместо „—output-document“ използва опцията „—post-file“, например, „—post-file=\/etc\/passwd“. Така атакуващият може да чете и записва файлове на сървера, в зависимост от правата за достъп, под които се изпълнява услугата OBS.
За да бъде превърната възможността за запис в файл в изпълнение на код на сървера, изследователите предложиха метод, състоящ се от два етапа. Двата етапа са необходими, защото атакуващият може да създаде файл ".wgetrc" с настройки за wget, но това не е достатъчно за стартиране на команди. Но чрез ".wgetrc" могат да се създадат условия за изпълнение на всяка програма в системата, но без предаване на аргументи. За стартиране на произволен код е предложено да се стартира програмата „prove“, която обработва конфигурационния файл ".proverc", допускащ указание на опция „—exec“ за изпълнение на произволен код.
На първия етап чрез посочените манипулации с «download-manifest» в домашната директория на потребителя «obsservicerun» се създава файл «.proverc», който включва команди, които ще бъдат изпълнени при стартиране на процеса «prove». На втория етап се създава файл «.wgetrc» с параметъра «use-askpass=\/usr\/bin\/prove», който води до извикването на «prove». След появата на тези файлове е достатъчно да се създадат условия за изтегляне на всякакви данни с помощта на wget и това ще доведе до стартиране на кода на атакуващия на сървъра с правата на потребителя «obsservicerun». Правата на потребителя «obsservicerun» са достатъчни за извличане от хранилищата на ключовете, използвани от потребителите на OBS за подписване на пакети.
Допълнение: Екипът на SUSE Product Security счита, че опасността от уязвимостта в OBS е преувеличена и заявлението на изследователите, че проблемът позволява компрометиране на всички пакети в дистрибуцията openSUSE, не е вярно. Отбелязва се, че услугите в инфраструктурата build.opensuse.org се стартират с използване на изолирани контейнери, които се създават отново и не съдържат критична информация. Откритата уязвимост е оценена като опасна, но недостатъчна за компрометиране на инфраструктурата за компилиране на openSUSE и произвежданите пакети. Освен това се посочва, че действията в интерфейса на OBS, описани в примера за атака, могат да бъдат извършени само в версията на OBS, която е локално инсталирана на работната станция на разработчика.
Източник: opennet.ru
