Изследовател в областта на сигурността и системен администратор е разработил инструмент, който помага на потребителите да проверяват за несъответствия на проявленията в пакетите от регистъра на JavaScript софтуера NPM.
Миналата седмица Дарси Кларк, бивш инженерен мениджър в GitHub и NPM, предупреди за проблеми с „объркване на манифести“, които могат да създадат риск от скриване на зловреден софтуер в зависимостите или изпълнение на скриптове по време на инсталацията.
„Объркването на манифеста“ се отнася до проблем със сигурността в NPM (Node Package Manager) – мениджър на пакети за езика за програмиране JavaScript и този по подразбиране за средата Node.js.
Проблемът е свързан с несъответстващата информация между манифестните данни на даден пакет, както са показани в регистъра на NPM, и данните, присъстващи във файла „package.json“ на публикувания пакет.
Злонамерен хакер би могъл да манипулира манифестните данни на нов пакет, като елиминира определени скриптове или зависимости, така че те да не се появят в регистъра на NPM.
Тези скриптове или зависимости обаче все още ще присъстват във файла package.json и ще бъдат изпълнени при инсталирането на пакета, без потребителят да знае за това.
Този проблем потенциално излага разработчиците на рискове като отравяне на кеша, инсталиране на неизвестни зависимости, изпълнение на неизвестни скриптове и евентуално дори атаки за понижаване на нивото.
Тъй като GitHub все още не се е заел с проблема и не е ясно какво планира да направи платформата, Кларк предложи на поддържащите пакети да премахнат зависимостта от манифестните данни и да използват прокси на регистъра, за да извършват проверки за съгласуваност на данните.
Проверка за объркване на манифеста
Докато бъде приложено решение, системният администратор Феликс Панкрац пусна инструмент, базиран на Python, който може да помогне на разработчиците на софтуер да проверяват пакетите на NPM за несъответствия.
За да използвате инструмента, първо трябва да инсталирате мениджъра на пакети PIP на Python с „pip install -r requirements.txt“.
За да проверите отделен пакет, подайте името на пакета на скрипта като първи аргумент. Например:
$ ./npm-manifest-check.py darcyclarke-manifest-pkg
Изходът ще подчертае всички несъответствия във версията, зависимостите, скриптовете и името на пакета между манифеста и действителния файл package.json.
За пакет без никакви несъответствия изходът трябва да изглежда по следния начин:
$ ./npm-manifest-check.py color
Не са открити несъответствия за color.
За да проверят множество пакети, разработчиците могат да ги добавят във файл ‘packages. list’ (по един пакет на ред) и да използват обвиващия скрипт ‘check_packages.sh’, за да ги проверят. Инструментът ще докладва за всички открити несъответствия за всеки от проверените пакети.
За да разберете всички аспекти на използването на инструмента Pankratz, проверете командата help с:
./npm-manifest-check.py -h
Объркването на манифестите не е широко разпространен или критичен проблем в общността на NPM в момента, но пренебрегването му не е безопасно, тъй като заплахите могат да започнат да го използват за атаки по веригата за доставки.









