Уязвимости в Pagure и OBS, допуснали компрометиране на пакети в хранилищата на Fedora и openSUSE.

Изследователи по сигурността от компанията 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 счита, че опасността от уязвимостта в OBS е преувеличена и заявлението на изследователите, че проблемът позволява компрометиране на всички пакети в дистрибуцията openSUSE, не е вярно. Отбелязва се, че услугите в инфраструктурата на build.opensuse.org се стартират с помощта на изолирани контейнери, които се възстановяват и не съдържат критична информация. Откритата уязвимост е оценена като опасна, но недостатъчна за компрометиране на сборната инфраструктура на openSUSE и генерираните пакети. Освен това е посочено, че действията в интерфейса на OBS, описани в примера за атака, могат да бъдат извършени само в версия на OBS, локално инсталирана на работната станция на разработчика.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster