Проблема путаницы в манифестах ставит под угрозу целостность приложений.
Популярный репозиторий для разработчиков NPM страдает от проблемы безопасности, называемой «путаница в манифестах» (Manifest Confusion), которая подрывает доверие к пакетам и даёт возможность злоумышленникам прятать вредоносный код в зависимостях или выполнять злонамеренные скрипты при установке пакетов.
NPM — это менеджер пакетов для языка программирования JavaScript, используемый по умолчанию для широко используемой среды Node.js. Сегодня более 17 миллионов разработчиков по всему миру используют NPM, загружая около 208 миллиардов пакетов в месяц.
Дарси Кларк, бывший инженер GitHub, обратил внимание на проблему путаницы в манифестах в своём блоге, объяснив, что несмотря на то, что его бывший работодатель знал об этой проблеме по крайней мере с ноября 2022 года, мало что было сделано для устранения связанных с ней рисков.
Реестр NPM чрезвычайно популярен среди разработчиков, потому что содержит широкий ассортимент пакетов, которые можно использовать для расширения функциональности приложения без необходимости дополнительной разработки.
Однако популярность репозитория делает его главной целью для злоумышленников, которые хотят распространять вредоносные пакеты, чтобы захватывать компьютеры разработчиков и вклиниваться в цепочку поставок.
Путаница в манифестах происходит тогда, когда есть несоответствие между информацией о пакете, представленной в реестре NPM, и фактическим файлом «package.json» в архиве опубликованного пакета, используемого при его установке.
И информация о манифесте, отправляемая в NPM при публикации пакета, и «package.json» содержат информацию о названии пакета, версии и других метаданных, таких как скрипты, используемые при развёртывании, зависимости сборки и т.д. Но эти данные отправляются в NPM отдельно, а платформа не проверяет их соответствие между собой. Именно поэтому информация может отличаться, но никто не будет знать об этом, пока не изучит содержание подобного пакета.
Это позволяет злоумышленникам изменять данные о манифесте, чтобы удалить зависимости и скрипты, указанные на странице пакета в репозитории. Однако эти скрипты и зависимости всё ещё существуют в файле «package.json» и будут выполняться при установке пакета.
Путаница в манифестах показана на изображении ниже, где чётко видно, что на странице пакета не указано каких-либо зависимостей, а вот «package.json» они есть.
Наглядная демонстрация уязвимости Manifest Confussion
Риски, возникающие из-за подобных несоответствий, включают отравление кэша, установку неизвестных зависимостей, выполнение вредоносных скриптов и атаки понижения версии.
«Речь идёт не просто о скрытых зависимостях. Путаница в манифестах также позволяет злоумышленникам включать в пакет скрытые скрипты установки, которые не будут отображаться на сайте NPM и их не зафиксирует большинство инструментов безопасности», — предупредил Феросс Абухадиджех, генеральный директор компании Socket.
Отчёт Дарси Кларка так или иначе привлёк внимание руководства NPM. Согласно данным представителей компании, над проблемой работают. А до того момента авторам и сопровождающим рекомендуется убрать все зависимости от данных манифеста своих пакетов и получать все метаданные кроме имени и версии из файлов «package.json».
Ещё одной защитной мерой станет использование прокси-реестра между базой данных пакетов и клиентом NPM, который мог бы реализовывать проверку на соответствие между данными манифеста и информацией в архиве.
5778 К? Пф! У нас градус знаний зашкаливает!