Компания WhiteSource, занимающаяся исследованиями в области безопасности, недавно провела исследование уязвимостей открытого кода, написанного на семи наиболее популярных языках программирования. Как сообщает портал ZDNet, исследователи использовали собственную базу данных, аккумулирующую информацию об уязвимостях из множества источников — базы NVD (National Vulnerability Database), трекеров проблем безопасности GitHub и проектов с открытым исходным кодом и др. В итоге были проанализированы проекты на Cи, Java, JavaScript, Python, Ruby, PHP и C++. Именно они, по данным WhiteSource, являются самыми популярными языками за последние десять лет.
Для многих экспертов не стало сюрпризом, что самым проблемным языком программирования оказался Cи. На рынке он лидирует с большим отрывом — на нем оказалось написано почти 50% проектов, которые были проанализированы экспертами. «Это не говорит о том, что Cи — наименее защищенный из всех проанализированных языков. Множество уязвимостей в проектах конкретно на этом языке можно объяснить несколькими факторами. Во-первых, Cи используется дольше всех остальных языков, которые участвовали в нашем исследовании. Следовательно, на нем написано гораздо больше кода. Во-вторых, Cи также является одним из языков, которые стоят за такими крупными проектами, как OpenSSL и ядро Linux», — отмечает команда WhiteSource.
С ней соглашается инженер по безопасности ядра Linux в Google Киис Кук: «Cи — это улучшенный ассемблер, почти машинный код, однако он отличается рядом слабых сторон, в том числе малопредсказуемым поведением — это ведет к пробелам в безопасности и уязвимостям инфраструктуры».
Тем временем в C++ были выявлены самые опасные за последние пять лет уязвимости, в том числе ошибки буфера, которые имеются и в коде Cи.
Что касается JavaScript, то он стал единственным языком, который показал «непрерывное увеличение количества уязвимостей за последние 10 лет». Тем не менее WhiteSource подчеркивает, что критика JavaScript не совсем уместна, поскольку большую часть ошибок в базе общеизвестных уязвимостей CWE (Common Weakness Enumeration) составляют выходы за пределы назначенного каталога и «дыры» в криптозащите пакетов JavaScript, которые поддерживаются в недостаточной мере.
Сообщается, что свой вклад в CWE вносят разработчики почти всех популярных языков программирования. Возглавляют список уязвимостей «межсайтовый скриптинг» (XSS, также известный как CWE-79) и «недостаточная проверка входных данных» (CWE-20) — они встречаются в 70% случаев. Другие часто встречающиеся ошибки: «утечка/раскрытие информации» (CWE-200), «выход за пределы назначенного каталога» (CWE-22) и «разрешения, привилегии и средства управления доступом» (CWE-264).
Несмотря на общий рост числа уязвимостей, число уязвимостей высокой степени опасности в большинстве языков за последние десять лет сократилось, говорится в отчете. Самым защищенным языком по версии WhiteSource стал Python.
Эксперты не советуют привязываться к какому-то одному языку для своих проектов, даже если он самый безопасный, а следить за наполнением CWE.