The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимости в Pagure и OBS, допускавшие компрометацию пакетов в репозиториях Fedora и openSUSE

22.03.2025 21:54

Исследователи безопасности из компании 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-repository/issue/raw/../../../../../../../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/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, например:


   <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 для заверения пакетов.

Дополнение: Команда SUSE Product Security считает, что опасность уязвимости в OBS переоценена и заявление исследователей о том, что проблема позволяет скомпрометировать все пакеты в дистрибутиве openSUSE не соответствует действительности. Отмечается, что сервисы в инфраструктуре build.opensuse.org запускаются с использованием изолированных контейнеров, заново создаваемых и не содержащих критичной информации. Выявленная уязвимость оценена как опасная, но недостаточная для компрометации сборочной инфраструктуры openSUSE и формируемых пакетов. Кроме того, указано что действия в интерфейсе OBS, описанные в примере атаки, могли быть совершены только в варианте OBS, локально установленном на рабочей станции разработчика.

  1. Главная ссылка к новости (https://fenrisk.com/supply-cha...)
  2. OpenNews: Через уязвимость в WordPress атакующие подменили страницы сайта openSUSE
  3. OpenNews: Сервисы openSUSE отключены из-за компрометации системы аутентификации (дополнено)
  4. OpenNews: Серверы инфраструктуры Fedora и Red Hat были взломаны
  5. OpenNews: Проект XZ опубликовал результат аудита коммитов и первое обновление после выявления бэкдора
  6. OpenNews: Форум проекта openSUSE подвергся взлому (дополнено)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62928-pagure
Ключевые слова: pagure, obs, fedora, suse, attack
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (41) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.5, Аноним (5), 23:23, 22/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > Например, для просмотра файла /etc/passwd можно открыть страницу "http://pagure.local:5000/your-repository/issue/raw/../../../../../../../etc/p

    А грабли всё те же.

     
     
  • 2.19, Аноним (19), 00:41, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +13 +/
    - обработкой символических ссылок
    - указание символов "/.."
    - корректность идентификатора не проверяется
    - отсутствовала должная проверка URL

    надо было писать на безопасном языке... ой, тут нет ни одной ошибки с памятью.

     
     
  • 3.31, Аноним (31), 01:29, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Тут ни одной ошибки с памятью пока не нашли.
     
     
  • 4.49, Аноним (-), 16:06, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Тут ни одной ошибки с памятью пока не нашли.

    Спиливание мушки не повлияло на участь Джо...

     
  • 3.33, Аноним (33), 04:01, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > надо было писать на безопасном языке... ой, тут нет ни одной ошибки с памятью.

    Ахаха, ты подумал что оно на Си? Посмотри репозиторий, там некое поделие на питоне.

     
  • 3.44, чатжпт (?), 12:23, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    будто это отменяет тысычи других cve где в shot int присваивают long int и получают выполнение кода
     
     
  • 4.50, Аноним (-), 16:07, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > будто это отменяет тысычи других cve где в shot int присваивают long
    > int и получают выполнение кода

    Видно птицу по помету. Shot int у него. Ну хоть не headshot int, и на том спасибо. Позагадили такие как вы своими "программами" типа вон того - и еще на других быковать смеете. Позор!

     
     
  • 5.53, чатжпт (?), 18:42, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    вот, одна опечатка и у сишника уже переполнение и выход за границы буфера 😂
     
     
  • 6.55, Минона (ok), 21:37, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Признайся, ты специально опечатался.
     

  • 1.6, Аноним (6), 23:24, 22/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    doublecmd предлагал поставить его через openSUSE Build Service и я соглашался...
     
  • 1.7, Аноним (7), 23:25, 22/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Лечится обычным двойным дефисом -- Этот двойной дефис надо перед позиционными... большой текст свёрнут, показать
     
     
  • 2.8, Аноним (8), 23:39, 22/03/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    По-моему это работает только в гнутых софтинах с getopt. Вон в питоне задепрекейтили и дропнули такой интерфейс, не модно. А какой-нибудь 7zip или unrar это просто боль на самом деле.
     
     
  • 3.21, Аноним (21), 00:49, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это работает везде, даже в самописных программах. Причём строк занимает столько же, сколько было бы с интерфейсом getopt, в любом языке. Даже в баше. Даже в Си.
    '''
    opt_a= opt_b= opt_longopt=
    while [[ $# -ge 1 ]]; do
    case "$1" in
    --help) usage; exit ;;
    -a) opt_a=1; shift ;;
    -b) opt_b=1; shift ;;
    --longopt) opt_longopt="$2"; shift 2 ;;
    --) shift; break ;;
    -*) echo error: unknown option "$1" >&2 ; exit 69 ;;
    *) break ;;
    esac
    done
    '''
     
  • 3.25, Аноним (21), 00:56, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    На getopt интерфейс, к сожалению, вообще лучше не полагатся. Гугл, например, в андроиде этот интерфейс поломали. Только уже не помню как именно, под каким-то постом здесь писал уже про это. Благо заменить его альтернативой, работающей точно так же почти в стиле POSIX вообще не проблема.
     
  • 2.9, Dzen Python (ok), 23:40, 22/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Безопасен компьютер, отключенный от любой сети.
    Более безопасен комп, где может выполняться только ядро.
    Абсолютно безопасен компьютер, который выключен, обесточен и спрятан в сейф.

    Что сказать-то хотел?
    Eval() в своих скриптовых языках уже точно обезопасил?
    Системди уже избавился от вороха недоработок/открытых багов с тегами #WONTFIX в иссюях?

     
     
  • 3.14, Аноним (8), 23:45, 22/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Никто пользовательский ввод без санитизации не передаст никуда. А если передаст, то бэкдор вполне осознанный, и надо спрашивать с причастных. Самая жесть это файловые имена, тут отдельное спасибо авторам-вендузятникам (привет 7zip и unrar опять же).
     
  • 2.12, НяшМяш (ok), 23:44, 22/03/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > И вообще, вместо баша/sh нужен нормальный скриптовый язык вроде питона

    Чел, в Pagure тупо все 4 CVE починены в питон коде...

     
     
  • 3.17, Аноним (-), 00:22, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Чел, в Pagure тупо все 4 CVE починены в питон коде...

    Три из которых - взаимодействие с башпортянками или вызовы через передачу параметров?
    Вот в этом и проблема.

     
     
  • 4.20, Аноним (-), 00:43, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Три из которых - взаимодействие с башпортянками или вызовы через передачу параметров?

    При том в всех трех облажался питонист, с санитизацией ввода пользователя.

    > Вот в этом и проблема.

    А когда питонист удумавший откосплеить сервак собой и наступивший на совершенно классическую граблю с ../../../ - это, стало быть, норм? :)

    ЧСХ все 4 - лажа питониста с санитизацией ввода. Что хотите с этим то и делайте! В общем если кто нанял питоноджуна кодить - он и получил безопасность цепочек поставок под стать. Chain only as strong as its weakest link.

     
  • 2.28, Аноним (21), 01:07, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Можно ещё не запускать всякий шлак от рута и делить программы на пользователей. Даже 32 тысяч уникальных айдишников на серваке должно хватить. Но девопсы по большей частью заняты (уже лет 20 точно) джейсоноукладкой, а не настройкой системы под свои нужды.
     
     
  • 3.48, Аноним (-), 16:03, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Можно ещё не запускать всякий шлак от рута и делить программы на
    > пользователей. Даже 32 тысяч уникальных айдишников на серваке должно хватить. Но
    > девопсы по большей частью заняты (уже лет 20 точно) джейсоноукладкой, а
    > не настройкой системы под свои нужды.

    И как это все поможет от идиота не валидирующего что пользователь накидал - так что давайте перезапишем вон тот гит на наш левак, с хакаными пакетами?! Оно ж рулит этим гитом и by design должно уметь читать-писать оный.

    По моему фикс тут - не нанимать всяких дятлов кодить системы где потом весь дистр нагнуть можно.

     
  • 2.38, Ivan_83 (ok), 07:55, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В shell script это обычно не проблема ибо запускающий делает это для себя, а не как обработчик чего то полученного извне.
     
  • 2.41, bdrbt (ok), 09:54, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так-то "нормальный скриптовый язык" процентов на 20-пюре и на 80-обвязки над этими самыми консольными утилитами, но... вобщем кто-то об этом не знает.
     
  • 2.45, Аноним (45), 14:45, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >И вообще, вместо баша/sh нужен нормальный скриптовый язык вроде питона

    Спасибо, не надо. Уже и так куча пакетов питоном заражена. Вместо питона нужно писать на нормальном основном языке проекта

     
     
  • 3.51, Аноним (-), 16:19, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >>И вообще, вместо баша/sh нужен нормальный скриптовый язык вроде питона
    > Спасибо, не надо. Уже и так куча пакетов питоном заражена. Вместо питона
    > нужно писать на нормальном основном языке проекта

    Да вон уже напрогали на питончике. И получили аж 4 CVE потому что нубоджуну никто не сказал что ввод надо валидировать.

     
  • 2.46, Аноним (46), 15:05, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >вместо баша/sh нужен нормальный скриптовый язык вроде питона

    В нормальных языках можно определить отдельный тип для путей, и строку нужно будет к этому типу приводить, и при приведении будет проверка на наличие '/../', вплоть до ошибки. Но в бидоне же динамическая типизация

     

  • 1.15, Аноним (-), 00:11, 23/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > http://pagure.local:5000/your-repository/issue/raw/../../../../../../../etc/p

    Питонисты просто няшки, собрали олдовый, классический такой баг :)

     
  • 1.18, Аноним (18), 00:27, 23/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Выполнения кода с правами пользователя git на сервере Pagure позволяет
    > контролировать всё содержимое репозиториев с пакетами.

    Прикольно придумано - нанять каких-то джунов кодить питонохрень используемую одним проектом - и потом вещать про безопасность цепочек поставок! Что может пойти не так?!

     
     
  • 2.22, Аноним (21), 00:52, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Мне больше интересно, это сколько ж они кода написали, что никто это даже проверять не стал?
     
     
  • 3.29, Аноним (29), 01:13, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Да просто все в грабу эту безопасность видали!!! Пока не доплатят и в ТЗ не прибьют гвоздями даже вялого юнит теста никто не напишет, какой-там аудит. Партия сказала ннада! Кам-самол запилил и послал задачу нах. Точка на деревьях почки.
    Вас поломали? Ой какая жалость. Нада была на расте! Там ваааще нече не надо, просто сэйфти как в сейфе
     
  • 3.47, Аноним (-), 15:56, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так наняли дешевого питоноджуна, потому что ему платить меньше а результат вр... большой текст свёрнут, показать
     
     
  • 4.52, User (??), 16:37, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Как вы думаете, найду ли я что-нибудь, связанное с "relative path traversal" в исполнении с, perl, php, Java etc сеньоров на mitre с одного запроса, или потребуется аж целых джва?
    "Классичность" баги как бы намекает, что дело тут не в бобине...
     

  • 1.26, Аноним (29), 01:06, 23/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Вот нормальные уязвимости такие, легко и сочно, и можно пол мира обгадить ломаными пакетами, без какого-либо палева. А то там буфер заполни цифры какие-то
     
  • 1.32, Аноним (32), 01:46, 23/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Надо было landlock использовать.
     
  • 1.34, Ilya Indigo (ok), 04:06, 23/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    https://www.suse.com/c/statement-on-cve-2024-22033-compromise-of-open-build-se
    Для openSUSE OBS далеко не настолько всё страшно, как описано в новости.
     
     
  • 2.39, Аноним (39), 08:23, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Многие думают. что после нахождения уязвимости все будут взломаны. Такая чушь несусветная.
    Кому это надо, тратить время на эксплоит, который заработает или не заработает - не знаем.
    А компании наворуют данные и так.. через бэкдоры
     
     
  • 3.40, Аноним (19), 08:33, 23/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > компании наворуют данные и так.. через бэкдоры

    Найденный бэкдор "становится" уязвимостью.

     
  • 2.58, нах. (?), 12:58, 24/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Собственно, да:
    https://fenrisk.com/open-build-service - первоисточник с выпиленным видео ниочем.

    Героическим усилием через миллион стремных мест удастся запустить шелл от непривиллегированного юзера выполняющего сборку пакета (причем в настоящей ОБС этот юзер, сборка и все вместе существуют внутри одноразовой сборочной виртуалки, где ничего кроме твоего пакета и нет) - что, конечно, не было так задумано.

    Стоп, здрасьте - а зачем мы это все запускали, если обс и так запускает наши сборочные скрипты - от того же юзера и там же?!

    Ну и приятная новость от самих обсников - что они оказывается вручную проверяют манифесты хотя бы иногда, и подобная хрень не пройдет модерацию.

    Т.е. проблема существует только у васяна с его домашней ОБС внутри которой он делает curl | sudo sudo su неглядя... т.е. опять же не существует, он этот пакет у себя потом еще и запускать собирался, незачем ломать сборку самому себе в надежде на сомнительный успех - надо просто подождать пока соберется. Еще и от рута запустит, за тебя.

     

  • 1.42, Афроним (?), 09:55, 23/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Безопасные рпозитории это круто.Бгг. Файлопомойки в Винде с норм антивирусом топчик. Эти МС Стори тоже зло.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру