Оценка типичных проблем с безопасностью для различных языков программирования

akok

Команда форума
Администратор
Сообщения
17,694
Реакции
13,482
Баллы
2,203
Компания 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, ImageMagic, WireShark и FFmpeg.
    • PHP: межсайтовый скриптинг, подстановка SQL-кода и проблемы связанные с правами доступа и установкой привилегий. Около 20% выявленных уязвимостей отнесены к категории опасных;
    • Java: утечки информации (получение данных без наличия должных прав доступа), ошибки при проверке корректности входных данных и межсайтовый скриптинг (XSS). Около 10% выявленных уязвимостей отнесены к категории опасных;
    • JavaScript: применение ненадёжных криптографических методов (неправильная проверка сертификатов, проблемы со случайными числами, применение скомпрометированных алгоритмов, применение хэшей с коллизиями, передача важных данных в открытом виде), неправильная проверка файловых путей (например, выход за пределы базового каталога через "../") и межсайтовый скриптинг (XSS). Около 30% выявленных уязвимостей отнесены к категории опасных;
    • C++: выход за границу буфера, ошибки при проверке входных данных, утечки информации. Около 30% выявленных уязвимостей отнесены к категории опасных;
    • Python: ошибки при проверке входных данных, проблемы с правами доступа и установкой привилегий, межсайтовый скриптинг (XSS). Около 20% выявленных уязвимостей отнесены к категории опасных;
    • Ruby: межсайтовый скриптинг (XSS), проблемы с правами доступа, ошибки при проверке входных данных. Около 10% выявленных уязвимостей отнесены к категории опасных.
opennet.ru
 
Сверху Снизу