Спецпроекты

70% приложений во всем мире содержат уязвимости, унаследованные от СПО

ПО Свободное ПО Безопасность

Около 70% мобильных и десктоп-приложений в мире сегодня содержат минимум одну уязвимость, «унаследованную» от библиотек с открытым программным кодом. Для большинства, впрочем, есть исправления, утверждается в отчете компании Veracode.

Тяжелая наследственность

Около 70% мобильных и десктоп-приложений в мире сегодня содержат минимум одну уязвимость, «унаследованную» от библиотек с открытым программным кодом, говорится в отчете компании Veracode.

Уязвимостей может быть гораздо больше одной, но суть в том, что одни и те же библиотеки используются огромным количеством разнообразных приложений. И наоборот: приложения используют одновременно большое количество сторонних библиотек — по подсчетам экспертов Veracode, проанализированные ими 85 тыс. приложений ссылаются на 351 тыс. уникальных библиотек — как открытых, так и проприетарных.

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

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

Более половины компьютерных программ в мире имеют изъяны, заимствованные у Open Source

В свою очередь, разработчики под Go и Swift включают в свои разработки максимум несколько десятков внешний библиотек.

При этом в некоторых языках, таких как JavaScript, PHP или Python, отдельные библиотеки являются defacto обязательными к использованию и их можно найти в любом приложении. При этом у каждой библиотеки может быть большое количество версий, используемых параллельно. Со всеми уязвимостями, исчезающими и появляющимися в каждой следующей версии.

PHP в ударе

Из всех языков/фреймворков в подборке — Swift, Go, Ruby, Java, .NET, JavaScript, Python, PHP — наиболее уязвимым оказывается последний: 40% библиотек, используемых в PHP, имеют XSS-уязвимости. Очень распространены также ошибки в библиотеках, отвечающих за контроль доступа и авторизацию. Межсайтовый скриптинг, впрочем, самая популярная уязвимость, присутствующая во всех языках.

PHP, однако, держит сомнительное лидерство и по количеству уязвимых библиотек, для которых написаны эксплойты, — 27,1%. В свою очередь, JavaScript держит в этом плане последнее место — к 6,5% уязвимых библиотек есть эксплойты.

В конечном счете, 70,5% различных приложений в мире, использующих опенсорсные библиотеки, содержат как минимум одну уязвимость, унаследованную от этих библиотек, и, соответственно, чем больше библиотек используется, тем выше вероятность приобретения багов. Особенно остро ситуация выглядит, правда, не с PHP, а Java, JavaScript и Python.

«Соотношение абсолютно закономерное; в принципе, чем больше кода в том или ином приложении, тем выше вероятность ошибок, и то же самое справедливо для сторонних включений, — говорит Дмитрий Залманов, эксперт по информационной безопасности компании SECConsultServices. — Изобилие багов, унаследованных именно из опенсорсных библиотек, главным образом связано с их активным использованием, а не с качеством разработки: на это указывает факт наличия исправлений для большинства проблем».

Исследователи отмечают, впрочем, что для исправления большей части таких уязвимостей требуются лишь очень незначительные изменения в программах. Более того, разработчики постоянно занимаются устранением этих проблем, так что в 73,8% случаев, по подсчетам Veracode, обновления к уязвимостям в библиотеках уже выпущены. Для серьезных и критических уязвимостей эта цифра превышает 90%.