Оценка типичных проблем с безопасностью для различных языков программирования
Компания WhiteSource опубликовала результаты анализа распределения уязвимостей в зависимости от применяемых языков программирования. При рассмотрении общего распределения уязвимостей в открытых проектах, 47% всех выявленных проблем с безопасностью затрагивают программы написанные на языке Си, 17% на PHP, 12% на Java и 11% на JavaScript. Доля опасных проблем (CVSS выше 7) составляет для Си, Python и PHP — около 20%, Java и Ruby — 10%, C++ и JavaScript — 30%.
Данная статистика сильно коррелирует с популярностью того или иного языка и объёмом наработанной кодовой базы. Тем не менее, общие тенденции прослеживаются, например, язык PHP занимает в рейтинге Tiobe седьмое место по популярности, но находится на втором месте по числу уязвимостей в приложениях. Язык Си лидирует по числу уязвимостей в силу своего низкоуровневого характера и простоте допустить ошибку при обработке строк и при работе с памятью.
Некоторые выводы:
- Активное внедрение автоматизированных систем тестирования, fuzzing-инструментов и программ выплаты вознаграждений за выявление уязвимостей привело к заметному всплеску уязвимостей, выявленных в 2017 и 2018 годах, при этом число опасных уязвимостей за два последних года уменьшилось. В 2017 году заметно возросло число уязвимостей, выявленных в программах на языках Си, JavaScript и PHP. В 2018 году число уязвимостей в программах на языках Си и JavaScript снизилось до показателей прошлых лет, но существенно возросло число уязвимостей, выявленных в программах на Java;
При сужении выборки только для опасных уязвимостей (CVSS выше 7) динамика за последние два года сохраняется, но становится более заметным вклад C++:
- Наибольшее число выявленных за последнее время уязвимостей относятся к категориям межсайтового скриптинга (XSS), ошибок при проверка входных данных, неверно выставленных прав доступа/привилегий и утечке информации;
- Статистика по частоте появления уязвимостей в привязке к языкам программирования:
- В программах на языке Си наибольшее число уязвимостей, связаны с выходом за допустимые границы буфера, ошибками при проверке корректности входных данных и ненадлежащим управлением ресурсами (Race Condition, двойное освобождение памяти, обращение к данным после освобождения и т.п.). Около 20% выявленных уязвимостей в программах на Си отнесены к категории опасных. Наибольшее число уязвимостей в 2018 году выявлено в ядре Linux, ImageTragic, WireShark и FFmpeg.
- PHP: межсайтовый скриптинг, подставновка SQL-кода и проблемы связанные с правами доступа и установкой привилегий. Около 20% выявленных уязвимостей отнесены к категории опасных;
- Java: утечки информации (получение данных без наличия должных прав доступа), ошибки при проверке корректности входных данных и межсайтовый скриптинг (XSS). Около 10% выявленных уязвимостей отнесены к категории опасных;
- JavaScript: применение ненадёжных криптографических методов (неправильная проверка сертификатов, проблемы со случайными числами, применение скомпрометированных алгоритмов, применение хэшей с коллизиями, передача важных данных в открытом виде), неправильная проверка файловых путей (например, выход за пределы базового каталога через »…/») и межсайтовый скриптинг (XSS). Около 30% выявленных уязвимостей отнесены к категории опасных;
- C++: выход за границу буфера, ошибки при проверке входных данных, утечки информации. Около 30% выявленных уязвимостей отнесены к категории опасных;
- Python: ошибки при проверке входных данных, проблемы с правами доступа и установкой привилегий, межсайтовый скриптинг (XSS). Около 20% выявленных уязвимостей отнесены к категории опасных;
- Ruby: межсайтовый скриптинг (XSS), проблемы с правами доступа, ошибки при проверке входных данных. Около 10% выявленных уязвимостей отнесены к категории опасных.
Полный текст статьи читайте на OpenNet