Новый инструмент на базе Python покажет любые скрытые зависимости в пакетах популярного репозитория.

На прошлой неделе мы писали о том, что Дарси Кларк, бывший менеджер по разработке в 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, но игнорировать её не безопасно, так как злоумышленники могут в любой момент начать использовать её для атак на цепочку поставок.