“Путаница манифестов” в NPM больше не страшна, энтузиасты решили проблему самостоятельно

На прошлой неделе мы писали о том, что Дарси Кларк, бывший менеджер по разработке в GitHub и NPM, предупредил сообщество разработчиков о проблеме “путаницы в манифестах”, которая может создать риск того, что в зависимостях скрывается вредоносное ПО или выполняются скрипты во время установки.

Уязвимость “Manifest Confusion” подразумевает проблема безопасности в репозитории NPM, которая заключается в том, что данные манифеста пакета, отображаемые на странице пакета NPM, не совпадают с данными, присутствующими в файле “package.json” этого же пакета.

Из-за вышеописанных нестыковок потенциальные злоумышленники могут манипулировать данными манифеста загружаемых пакетов, удаляя определенные скрипты или зависимости, чтобы они не появлялись в NPM, но присутствовали в самих пакетах.

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

Поскольку руководство NPM пока никак не решило эту проблему и неясно, что платформа вообще планирует делать, Кларк предложил, чтобы разработчики пакетов убирали зависимость от данных манифеста и использовали прокси-реестр для проверки согласованности данных. Решение не самое удобное, но до недавнего времени единственное рабочее и безопасное.

Однако на помощь подоспел системный администратор и белый хакер Феликс Панкратц , который выпустил инструмент на основе Python, который может помочь разработчикам быстро проверить пакеты NPM на наличие несоответствий.

Для использования инструмента сначала нужно установить менеджер пакетов Python PIP с помощью команды “pip install -r requirements.txt”. А для проверки пакета нужно передать его имя скрипту в качестве первого аргумента. Например: “$./npm-manifest-check.py darcyclarke-manifest-pkg”. Итоговый вывод будет подсвечивать любые несоответствия в версии, зависимостях, скриптах и имени пакета между манифестом и фактическим файлом package.json.

Для проверки нескольких пакетов можно добавить их в файл “packages.list” (по одному пакету на строку) и использовать оболочку “check_packages.sh” для их проверки. Инструмент сообщит о любых несоответствиях, обнаруженных в каждом из проверенных пакетов. А для понимания всех аспектов использования инструмента Панкратца можно получить справку с помощь команды “./npm-manifest-check.py -h”.

Путаница в манифестах пока что не является широко распространенной или критической проблемой в сообществе NPM сейчас, но игнорировать её не безопасно, так как злоумышленники могут в любой момент начать использовать её для атак на цепочку поставок.

Public Release.