Несколько дней назад появилась новость об обнаружении критической уязвимости en менеджер зависимостей Композитор (CVE-2021-29472), который позволяет запускать произвольные команды в системе при обработке пакета со специально сформированным значением URL, определяющим направление загрузки исходного кода.
Проблема проявляется в компонентах GitDriver, SvnDriver и HgDriver. используется с системами управления версиями Git, Subversion и Mercurial. Уязвимость исправлена в версиях Composer 1.10.22 и 2.0.13.
В частности, особенно пострадал репозиторий пакетов Packagist по умолчанию Composer, который содержит 306.000 1.400 пакетов для разработчиков PHP и предлагает более XNUMX миллиарда загрузок в месяц.
В экосистеме PHP Composer является основным инструментом для управления зависимостями программного обеспечения и их установки. Команды разработчиков по всему миру используют его, чтобы упростить процесс обновления и обеспечить беспроблемную работу приложений во всех средах и версиях.
Эксперимент показал, что при наличии информации о проблеме злоумышленники могли взять под контроль инфраструктуру Packagist и перехватить учетные данные сопровождающих или перенаправить загрузку пакетов на сторонний сервер, организовав доставку вариантов пакетов с изменениями. злоумышленники, чтобы заменить бэкдор во время установки зависимости.
Опасность для конечных пользователей ограничена в связи с тем, что содержание composer.json обычно определяется пользователем и ссылки на источник передаются при доступе сторонних репозиториев, которые обычно являются надежными. Основной удар пришелся на репозиторий Packagist.org и сервис Private Packagist, которые вызывают Composer с передачей данных, полученных от пользователей. Злоумышленники могут запустить свой код на серверах Packagist, отбросив специально созданный пакет.
Команда Packagist устранила уязвимость в течение 12 часов после уведомления. уязвимости. 22 апреля исследователи в частном порядке уведомили разработчиков Packagist, и проблема была устранена в тот же день. Публичное обновление Composer с исправлением уязвимости было выпущено 27 апреля, а подробности были раскрыты 28 апреля. Проверка журналов на серверах Packagist не выявила подозрительной активности, связанной с уязвимостью.
Ошибки внедрения аргументов - это действительно интересный класс ошибок, которые часто упускаются из виду при проверке кода и полностью игнорируются при взаимодействии с черным ящиком.
Проблема вызвана ошибкой в коде проверки URL. в корневом файле composer.json и в исходных ссылках для скачивания. Ошибка присутствует в коде с ноября 2011 года. Packagist использует специальные уровни для управления загрузкой кода без привязки к определенной системе управления версиями, которая выполняется путем вызова fromShellCommandline с аргументами командной строки.
Суть проблемы заключается в том, что метод ProcessExecutor позволяет указать любые дополнительные параметры вызова в URL-адресе. Такой выход отсутствовал в драйверах GitDriver.php, SvnDriver.php и HgDriver.php. Атаке GitDriver.php препятствовал тот факт, что команда «git ls-remote» не поддерживала указание дополнительных аргументов после пути.
Атака на HgDriver.php была возможна путем передачи параметра «–config» утилите «hq», которая позволяет организовать выполнение любой команды, манипулируя конфигурацией «alias.identify».
Отправив тестовый пакет с аналогичным URL-адресом в Packagist, исследователи убедились, что после его публикации их сервер получил HTTP-запрос от одного из серверов Packagist на AWS, который содержал список файлов в текущем каталоге.
Следует отметить, что разработчики не выявили никаких признаков предшествующей эксплуатации этой уязвимости в общедоступном экземпляре упаковщика.
Наконец, если вам интересно узнать об этом больше, вы можете ознакомиться с подробностями По следующей ссылке.