Дата публикации:Sat, 22 Mar 2025 21:54:26 +0300
Исследователи безопасности из компании Fenrisk раскрыли информацию об уязвимостях в инструментариях Pagure и OBS (Open Build Service), позволявших скомпрометировать инфраструктуры формирования пакетов дистрибутивов Fedora и openSUSE. Исследователи продемонстрировали возможность совершения атаки для выполнения произвольного кода на серверах с Pagure и OBS, что можно было использовать для подстановки изменений в пакеты в репозиториях Fedora и openSUSE.
В платформе Pagure, используемой в Fedora для совместной работы c кодом и метаданными пакетов, выявлены 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; добавлению в него коммита с новым файлом, который создан как символическая ссылка на желаемый системный файл; открытию данного файла для редактирования в web-интерфейсе.
Уязвимость (CVE-2024-4982) в функции view_issue_raw_file() позволяет выйти за пределы базового каталога через указание символов "/.." в параметрах запрошенного Issue. Проблема позволяет прочитать файлы в системе, насколько позволяют права доступа процесса под которым выполняется web-интерфейс. Например, для просмотра файла /etc/passwd можно открыть страницу "http://pagure.local:5000/your-repositor ... etc/passwd".
Уязвимость (CVE-2024-47516) в функции PagureRepo.log(), даёт возможность добиться подстановки своих команд и выполнения кода на сервере. Проблема вызвана тем, что при просмотре истории изменения файла через web-интерфейс вызывается команда "git" с передачей идентификатора ветки в командной строке (например, "/usr/bin/git --pretty=oneline --abbrev-commit <HERE> -- README.md"). Корректность идентификатора не проверяется, поэтому можно вместо него передать любую опцию командной строки, например, "--output=/tmp/foo.bar" для перенаправления вывода в файл. Атакующий может перезаписать файл в системе через отправку запроса следующего вида:
http://pagure.local:5000/test/history/R ... mp/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/R ... it/.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, например:
<services>
<service name="download_url">
<param name="url">--output-document=/tmp/test</param>
<param name="download-manifest">tempfile</param>
</service>
</services>
Для обхода возвращения ошибки при попытке запустить 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 для заверения пакетов.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=62928