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

29 августа 2018 года

В Packagist, крупнейшем репозитории пакетов на языке PHP, ежемесячно обслуживающем более 400 млн загрузок и по умолчанию применяемом в пакетной менеджере Composer, выявлена критическая уязвимость, позволяющая выполнить код на сервере проекта через передачу специально оформленных значений в форму добавления нового пакета.

Уязвимость вызвана отсутствием должной проверки передаваемых значений перед их обработкой в shell-скриптах. В частности, для выполнения произвольных shell-команд в текстовое поле с URL репозитория добавляемого проекта достаточно было ввести строку вида "$(код)". На стороне сервера данный URL передаётся в качестве аргумента при вызове команд git, p4, svn и hg. Для git и hg выполняется экранирование строки кавычками, но для p4 (Perforce) и svn (Subversion) строка передаётся как есть, например, при вводе "$(sleep 1)" будет запущена команда "svn info --non-interactive $(sleep 1)". Разработчики Packagist уже исправили проблему, добавив экранирование при помощи вызова ProcessExecutor::escape().

К сожалению, халатное отношение к безопасности присуще разработчикам многих современных репозиториев пакетов, что облегчает возможность компрометации подобных систем злоумышленниками. Например, выявивший проблему исследователь безопасности в прошлом году обнаружил похожую проблему в RubyGems, позволяющую выполнить код на сервере RubyGems.org при загрузке специально оформленного gem-пакета, а также продемонстрировал возможность запуска своего кода на некоторых зеркалах NPM и нашёл способ удаления произвольных файлов из репозитория PyPI. Исследователь также выявил уязвимость в часто применяемой с NPM сети доставки контента unpkg.com, которая позволяла записать любые данные на сервер и в том числе заменить содержимое отдаваемых пакетов, что давало возможность организовать запуск любого JavaScript-кода на сайтах, использующих unpkg.

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Уязвимость, позволяющая удалённо выполнить код на сервере PHP-репозитория Packagist», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.