Поиск по сайту:

Аудит ваших зависимостей NPM, на них приходится 86% ошибок безопасности


Недавнее исследование состояния безопасности с открытым исходным кодом, проведенное Snyk, дало тревожные результаты: для пакетов NPM 86% уязвимостей безопасности находятся во вторичных зависимостях, которые вы часто имеют небольшой контроль над.

Что такое вторичные зависимости?

Когда вы устанавливаете что-то из NPM, вы не просто устанавливаете один пакет, вы устанавливаете этот пакет, а также все его необходимые зависимости. Вы можете просмотреть это дерево зависимостей для своих проектов с помощью npm ls --depth=10. Даже базовый проект с двумя установленными пакетами на самом деле содержит четыре уровня зависимостей, всего 10 фактических пакетов:

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

Согласно отчету Snyk, именно это происходит в средах с открытым исходным кодом, таких как NPM и Ruby Gems. Проблема нарастает, и большинство ошибок возникает из-за непрямых пакетов, которые вы не устанавливали вручную.

Хорошая сторона: эта проблема не так серьезна, как кажется. В NPM есть встроенный инструмент для аудита, который выловит большинство неприятных моментов и предложит вам обновиться. Из-за распространенности аудита эти ошибки безопасности привлекают больше внимания и исправляются по мере их возникновения, а обновления быстро рассылаются затронутым пользователям.

Большинство ошибок, обнаруженных Snyk, были потенциальными XSS-атаками, и, хотя это не так уж и много, их влияние на реальный мир довольно низкое. Основные значимые ошибки сводились к нескольким десяткам атак загрязнения прототипа — потенциальному выполнению произвольного кода — а также к некоторым вредоносным или взломанным пакетам, разработанным специально для того, чтобы попытаться проникнуть в ничего не подозревающие файлы package.json.

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

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

Решение: аудит

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

Однако проблема не нова, и в npm для ее решения есть встроенный инструмент – аудит npm. Вы определенно видели его раньше, потому что он запускается автоматически при каждой установке:

Встроенный аудит NPM в основном просто проверяет наличие обновлений для пакетов, которые исправляют определенные ошибки, поэтому всегда есть обновление, которое вы можете сделать (хотя и потенциально ломающее), которое может решить проблему. Однако существуют и другие сканеры безопасности, такие как сами Snyk, которые запускают службу для проверки проектов GitHub и поддерживают общедоступную базу данных известных ошибок, которую вы можете проверить.