Разработчики крупнейшего репозитория пакетов PHP, Packagist, сообщили об исправлении критической уязвимости на официальном сайте сервиса. За обнаружение бага инженеры благодарят специалиста по информационной безопасности Макса Юстича (Max Justicz).
Нужно сказать, что Packagist — это не пакетный менеджер, но хостинг PHP-пакетов. Это дефолтный хостинг Composer, наиболее популярного пакетного менеджера PHP, и крупнейший хостинговый сервис в экосистеме PHP в целом. Так, только в июле 2018 года разработчики отчитались о 435 млн установок пакетов.
Так как проблема уже устранена, в своем блоге Юстич опубликовал детали найденного бага. Исследователь рассказывает, что поле Submit Package («Добавить пакет»), предназначенное для загрузки новых пакетов PHP прямо через главную страницу сайта Packagist, позволяло атакующим запустить вредоносную команду в формате «$(ВРЕДОНОСНЫЕ_КОМАНДЫ)».
Дело в том, что Packagist ожидал, что пользователь предоставит ему URL, указывающий на репозиторий с кодом на сервере Git, Perforce, Subversion или Mercurial. Как оказалось, сервис некорректно проверял, ведет ли URL к репозиторию Perforce или Subversion, из-за чего выполнял вредоносные команды дважды (один раз при проверке Perforce и еще раз при проверке Subversion).
Юстич пишет, что опасность атаки зависела от квалификации атакующего. В теории, эксплуатируя описанный баг, злоумышленник мог скомпрометировать сервер Packagist и развить атаку далее.