JavaScript, Ruby и Java — экосистемы с наибольшим количеством ошибок в непрямых зависимостях, говорится в исследовании «State of Open Source Security — 2020» занимающейся сканированием исходного кода на уязвимости компании Snyk, сообщает портал ZDNet.

Подавляющее большинство уязвимостей, которые угрожают безопасности проектов Open Source, связаны с непрямыми зависимостями, а не с непосредственно загружаемыми компонентами. «Суммируя данные по всем экосистемам, мы обнаружили, что уязвимостей в непрямых зависимостях более чем в три раза больше, чем в прямых зависимостях», — сказала эксперт по вопросам безопасности приложений Snyk Алисса Миллер.

В отчете рассматривается влияние уязвимостей на экосистемы JavaScript (npm), Ruby (RubyGems), Java (MavenCentral), PHP (Packagist) и Python (PyPI). По данным Snyk, 86% ошибок безопасности JavaScript, 81% — в Ruby и 74% — в Java затрагивают библиотеки, которые являются зависимостями основных компонентов, загруженных в проект.

Исследователи утверждают, что компании, сканирующие свои основные зависимости на предмет проблем безопасности, но не полностью проверяющие дерево зависимостей, в конечном итоге рискуют выпустить продукты, обладающими уязвимостями и ошибками, что может привести к непредсказуемым последствиям. В то же время, если для JavaScript, Ruby и Java характерны ошибки безопасности в непрямых зависимостях, то для PHP и Python подавляющее большинство ошибок находятся в прямых зависимостях (первичных компонентах). Однако на то есть причина. «Это скорее вопрос подхода к развитию самих экосистем, — считает Миллер. — В частности, проекты Java и Node.js используют намного более тяжелые зависимости, чем другие экосистемы. Когда вы смотрите на сам размер экосистемы Node.js, сборку пакетов или использование ключевой функциональности из других пакетов, это в значительной степени выглядит как норма».

Тем не менее, говорит она, практически все разработчики Node, скорее всего, посетуют на работу npm, которому требуется немало времени, чтобы получить все необходимые зависимости, и это влияет на скорость запуска проекта. «Один из наших любимых примеров — это Java-приложение из 80 строк кода, которое задает 7 зависимостей. Однако когда вы просмотрите все дерево зависимостей, вы обнаружите 59 субзависимостей, и внезапно 80 строк кода превращаются в 740 тыс. Эта „странная опасность“, как мы ее называем, может стать причиной серьезных нарушений с точки зрения безопасности, поскольку добавляет цепочке поставок ПО дополнительный уровень сложности», — сказала Миллер.

Несколько ошибок с большими последствиями

Команда Snyk изучала не только ошибки в экосистеме Open Source, но и их типы. Интересный вывод заключается в том, что большинство новых уязвимостей, обнаруженных в прошлом году, были ошибками межсайтового скриптинга (XSS), но, несмотря на их большое количество, они затронули лишь небольшую часть реальных проектов. В то же время наибольшим влиянием обладало два десятка ошибок типа «prototype pollution» — они затронули более 115 тыс. различных Open Source-проектов. Не исключено, что это число даже больше, если к ним приплюсовать частные проекты, которые задействовали открытый код. Наибольшую опасность эти уязвимости представляют для jQuery и LoDash, так как эти платформы являются одними из наиболее широко используемых на сегодняшний день наборов инструментов разработки JavaScript.

Еще одним распространенным типом проблем безопасности в прошлогодних проектах оказались «вредоносные пакеты». Это касается библиотек на базе Open Source, которые или намеренно создавались хакерами как вредоносные программы, или же они были инфицированы вредоносным кодом после взлома учетной записи разработчика. По данным Snyk, в прошлом году взломанные или вредоносные пакеты стали для экосистемы Open Source вторым по распространенности источником проблем безопасности. «Подавляющее большинство из них — более 87% — находилось в пакетах npm [JavaScript]», — говорит Миллер.

Ошибок стало меньше, но еще рано праздновать победу

По данным исследователей, количество обнаруженных во всех пяти проверенных экосистемах ошибок снизилось на 20%. «Трудно сказать наверняка, почему их стало меньше, — утверждает эксперт. — Сидящий во мне скептик говорит, что это может быть связано с естественными причинами, к примеру, с циклом прилива и отлива. Но если взглянуть на ситуацию с оптимистической стороны, мы увидим некоторые ключевые сдвиги в сообществе, которые говорят о том, что снижение количества ошибок в коде будет носить постоянный характер. Например, XSS-уязвимостей оказалось больше, чем других типов уязвимостей, но они затронули небольшую часть из всех проверенных нами проектов».

Это говорит о том, считает она, что XSS не затрагивает интенсивно используемые и зрелые проекты, что, в свою очередь значит, что технология безопасного кодирования начинает приносить плоды. «Кроме того, как показало наше исследование, сообщество начинает более серьезно относится к безопасности ПО, разделяя ответственность за нее между разработчиками и командами безопасности (и даже в некоторой степени операционными командами), — полагает Миллер. — Безусловно, это сотрудничество должно повысить осведомленность о том, что значит безопасность кода, стимулировать выработку тактических мер для обеспечения защиты кода и пакетов Open Source. Проработав в сфере безопасности 15 лет, я, конечно, не готова принять данные за один год как знак того, что события приняли новый оборот. Тем не менее, можно говорить о тенденции, за которой мы будем наблюдать в ближайшие месяцы и в целом в 2020 г.».