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

Компания WhiteSource опубликовала результаты анализа распределения уязвимостей в зависимости от применяемых языков программирования. При рассмотрении общего распределения уязвимостей в открытых проектах, 47% всех выявленных проблем с безопасностью затрагивают программы написанные на языке Си, 17% на PHP, 12% на Java и 11% на JavaScript. Доля опасных проблем (CVSS выше 7) составляет для Си, Python и PHP — около 20%, Java и Ruby — 10%, C++ и JavaScript — 30%.

Данная статистика сильно коррелирует с популярностью того или иного языка и объёмом наработанной кодовой базы. Тем не менее, общие тенденции прослеживаются, например, язык PHP занимает в рейтинге Tiobe седьмое место по популярности, но находится на втором месте по числу уязвимостей в приложениях. Язык Си лидирует по числу уязвимостей в силу своего низкоуровневого характера и простоте допустить ошибку при обработке строк и при работе с памятью.

0_1553845745.png

Некоторые выводы:

  • Активное внедрение автоматизированных систем тестирования, fuzzing-инструментов и программ выплаты вознаграждений за выявление уязвимостей привело к заметному всплеску уязвимостей, выявленных в 2017 и 2018 годах, при этом число опасных уязвимостей за два последних года уменьшилось. В 2017 году заметно возросло число уязвимостей, выявленных в программах на языках Си, JavaScript и PHP. В 2018 году число уязвимостей в программах на языках Си и JavaScript снизилось до показателей прошлых лет, но существенно возросло число уязвимостей, выявленных в программах на Java; 0_1553846370.png

    При сужении выборки только для опасных уязвимостей (CVSS выше 7) динамика за последние два года сохраняется, но становится более заметным вклад C++:

    0_1553846802.png
  • Наибольшее число выявленных за последнее время уязвимостей относятся к категориям межсайтового скриптинга (XSS), ошибок при проверка входных данных, неверно выставленных прав доступа/привилегий и утечке информации;
  • Статистика по частоте появления уязвимостей в привязке к языкам программирования:
    • В программах на языке Си наибольшее число уязвимостей, связаны с выходом за допустимые границы буфера, ошибками при проверке корректности входных данных и ненадлежащим управлением ресурсами (Race Condition, двойное освобождение памяти, обращение к данным после освобождения и т.п.). Около 20% выявленных уязвимостей в программах на Си отнесены к категории опасных. Наибольшее число уязвимостей в 2018 году выявлено в ядре Linux, ImageTragic, WireShark и FFmpeg. 0_1553848322.png
    • PHP: межсайтовый скриптинг, подставновка SQL-кода и проблемы связанные с правами доступа и установкой привилегий. Около 20% выявленных уязвимостей отнесены к категории опасных; 0_1553848781.png
    • Java: утечки информации (получение данных без наличия должных прав доступа), ошибки при проверке корректности входных данных и межсайтовый скриптинг (XSS). Около 10% выявленных уязвимостей отнесены к категории опасных; 0_1553848868.png
    • JavaScript: применение ненадёжных криптографических методов (неправильная проверка сертификатов, проблемы со случайными числами, применение скомпрометированных алгоритмов, применение хэшей с коллизиями, передача важных данных в открытом виде), неправильная проверка файловых путей (например, выход за пределы базового каталога через »…/») и межсайтовый скриптинг (XSS). Около 30% выявленных уязвимостей отнесены к категории опасных; 0_1553848939.png
    • C++: выход за границу буфера, ошибки при проверке входных данных, утечки информации. Около 30% выявленных уязвимостей отнесены к категории опасных; 0_1553849036.png
    • Python: ошибки при проверке входных данных, проблемы с правами доступа и установкой привилегий, межсайтовый скриптинг (XSS). Около 20% выявленных уязвимостей отнесены к категории опасных; 0_1553849098.png
    • Ruby: межсайтовый скриптинг (XSS), проблемы с правами доступа, ошибки при проверке входных данных. Около 10% выявленных уязвимостей отнесены к категории опасных. 0_1553849196.png

Полный текст статьи читайте на OpenNet