Бесплатно Экспресс-аудит сайта:

05.07.2023

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