Список CWE Top 25 отражает наиболее серьёзные недостатки безопасности ПО. Предлагаю вам ознакомиться с обновлённым топом в обзоре изменений за прошедший год.
Мы позиционируем анализатор PVS‑Studio не только как средство для поиска ошибок в коде, но и как инструмент для статического тестирования защищённости приложений (Static Application Security Testing, сокр. SAST). Для лучшего понимания трендов и планирования диагностических правил нет ничего лучше, чем заглянуть в свежий список наиболее актуальных проблем безопасности. Таких списков несколько, например, OWASP Top 10, SANS Top 25, и уже названный ранее CWE Top 25.
Кстати, в прошлом году мы уже писали обзор изменений в CWE Top 25 2021. При желании с ним можно ознакомиться здесь.
Немного теории
Для лучшего понимания контекста не помешает освежить в памяти основные моменты. Для этого я кратко пробегусь по следующим темам:
- чем CVE отличается от CWE;
- зачем нужен CVSS;
- что такое NVD и KEV;
- как ранжируется CWE Top 25 в 2022 году.
Если вы чувствуете себя подкованным в этих вопросах, то можете спокойно пропустить этот раздел. Остальным рекомендую ознакомиться для удобства дальнейшего чтения. Далее довольно вольный перевод и интерпретация некоторых пунктов CWE FAQ и CVE FAQ:
Чем «дефект» (недостаток) отличается от уязвимости в ПО?
Дефекты (недостатки) – это ошибки, сбои и прочие проблемы реализации, проектирования или архитектуры программного обеспечения, которые могут привести к уязвимостям.
Уязвимости – уже найденные кем-то ошибки, которые могут быть напрямую использованы злоумышленниками для получения доступа к системе или сети, нарушения работы сервисов и так далее.
Что такое CWE, чем отличается от CVE, при чем тут CVSS и откуда взялся KEV?
- CWE (Common Weakness Enumeration) – общий перечень дефектов (недостатков) безопасности.
- CVE (Common Vulnerabilities and Exposures) – перечень уязвимостей, обнаруженных в программном обеспечении.
- CVSS (Common Vulnerability Scoring System) – числовая оценка, показывающая потенциальную критичность уязвимости (CVE). Она основана на стандартизированном наборе характеристик.
- KEV (Known Exploited Vulnerabilities) – каталог известных эксплуатируемых уязвимостей.
И зачем мне вообще знать про CWE?
Сегодня CWE используется как основное средство при обсуждении устранения и/или смягчения недостатков безопасности в архитектуре, дизайне, коде и реализации программного обеспечения. Организации используют CWE в качестве стандартной меры для оценки инструментов проверки безопасности ПО и в качестве общего базового стандарта для идентификации, предупреждения и смягчения негативных последствий.
Что такое CWE Top 25?
CWE Top 25 – это список наиболее опасных и распространённых недостатков. Эти недостатки опасны потому, что часто их легко найти и использовать. Они могут позволить злоумышленникам помешать работе приложения, украсть данные или даже полностью захватить систему. CWE Top 25 – это значимый ресурс сообщества, который может помочь получить представление о наиболее распространённых и опасных на данный момент недостатках безопасности.
Каков алгоритм составления и ранжирования списка CWE Top 25 2022?
Основными источниками информации для исследования в этом году являлись:
- национальная база данных уязвимостей США (U.D. National Vulnerability Database (NVD)) за 2020–2021 годы;
- каталог эксплуатируемых уязвимостей (KEV) агентства по кибербезопасности и защите инфраструктуры США (Cybersecurity and Infrastructure Security Agency (CISA)), составленный в ноябре 2021 года.
Полученные данные команда исследователей преобразовала согласно методу "View-1003" для уменьшения специфичности записей. Благодаря этому, например, CWE‑122 (Heap-Based Buffer Overflow) будет преобразована к базовой CWE‑787 (Out-of-Bounds Write). Также были отфильтрованы следующие категории записей:
- без оценки CVSS;
- помеченные как отклонённые;
- для которых отсутствует сопоставление CVE -> CWE;
- относящиеся к категориям «CWE‑Other» и «NVD-CWE‑noinfo».
Далее команда исследователей применила собственную формулу для расчёта порядка ранжирования, учитывающую частоту, с которой какой-либо недостаток (CWE) является основной причиной уязвимости, и потенциальную опасность эксплуатации. Частота и прогнозируемая серьёзность нормализованы относительно своих минимальных и максимальных значений. Для вычисления частоты упоминания в формуле подсчитывается, сколько раз CVE ссылались на CWE в базе данных NVD.
Freq = {count(CWE_X' ∈ NVD) for each CWE_X' in NVD}
Fr(CWE_X) = (count(CWE_X ∈ NVD) — min(Freq)) / (max(Freq) — min(Freq))
Другим важным компонентом формулы ранжирования является расчёт серьёзности недостатка, который вычисляется по формуле:
Sv(CWE_X) = (average_CVSS_for_CWE_X — min(CVSS)) / (max(CVSS) — min(CVSS))
Ну и в конце вычисляется итоговая оценка путём перемножения оценки частоты упоминания на оценку серьёзности.
Score(CWE_X) = Fr(CWE_X) * Sv(CWE_X) * 100
В целом методология анализа данных в этом году не претерпела существенных изменений. А вот уже в следующем году авторы планируют более значительные перемены. Вот некоторые из них:
- возможность создания узкоспециализированных списков, как например Top 25 для мобильных приложений и т.п.;
- рассмотреть возможность изменения метрик, используемых для составления списка, для уменьшения предвзятости данных (подробнее);
- улучшить методику View-1003;
- использовать другие способы нормализации, кроме View-1003;
- по возможности, проводить сопоставления CVE -> CWE более часто, чтобы уменьшить число единовременных правок в данные по сопоставлению.
Более подробно о методологии подготовки и анализа данных можно прочитать в дополнительных сведениях к исследованию.
Насколько большая выборка в этом году?
Набор данных для анализа в этом году включал в себя 37 899 CVE, обнаруженных за два прошедших года.
CWE Top 25 действительно обновляется каждый год?
Да, CWE Top 25 обновляется ежегодно. Предыдущие выпуски CWE Top 25 можно посмотреть в архиве.
Кто занимается составлением CWE Top 25?
Сообщество CWE включает как отдельных исследователей, так и представителей многочисленных организаций, научного сообщества и государственных структур, заинтересованных в активном сокращении и устранении недостатков в программном обеспечении. Конкретный список участников команды CWE можно посмотреть на странице "CWE Community Members".
Более подробно познакомиться с классификацией можно на сайте cwe.mitre.org.
Положение дел сегодня
Ниже представлена таблица соответствия между списком CWE Top 25 2022 и диагностиками PVS-Studio с разделением по языкам программирования. Наиболее актуальную таблицу с покрытием CWE Top 25 всегда можно посмотреть на нашем сайте.
# |
CWE ID |
Имя |
Оценка |
KEV |
Диагностики PVS‑Studio |
---|---|---|---|---|---|
1 |
|
Out-of-bounds Write |
64,20 |
62 |
C++: V512, V557, V582, V645 C#: V3106 Java: V6025 |
2 |
|
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') |
45,97 |
2 |
C#: V5610 |
3 |
|
Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') |
22,11 |
7 |
C#: V5608 |
4 |
|
Improper Input Validation |
20,63 |
20 |
C++: V739, V781, V1010, V1024, V5009 |
5 |
|
Out-of-bounds Read |
17,67 |
1 |
C++: V512, V557, V582 C#: V3106 Java: V6025 |
6 |
|
Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') |
17,53 |
32 |
C++: V1010, V5009 C#: V5616 |
7 |
|
Use After Free |
15,50 |
28 |
C++: V623, V723, V758, V774, V1017 |
8 |
|
Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') |
14,08 |
19 |
C#: V5609 |
9 |
|
Cross-Site Request Forgery (CSRF) |
11,53 |
1 |
Coming in the future |
10 |
|
Unrestricted Upload of File with Dangerous Type |
9,56 |
6 |
Coming in the future |
11 |
|
NULL Pointer Dereference |
7,15 |
0 |
C++: V522, V595, V664, V713, V1004 C#: V3027, V3042, V3080, V3095, V3100, V3125, V3145, V3146, V3148, V3149, V3152, V3153, V3168 Java: V6008, V6060, V6093 |
12 |
|
Deserialization of Untrusted Data |
6,68 |
7 |
C#: V5611 |
13 |
|
Integer Overflow or Wraparound |
6,53 |
2 |
C++: V629, V658, V673, V683, V1026, V1028, V1083, V1085, V5004, V5005, V5006, V5007, V5010, V5011 C#: V3113 Java: V6105 |
14 |
|
Improper Authentication |
6,35 |
4 |
Coming in the future |
15 |
|
Use of Hard-coded Credentials |
5,66 |
0 |
C++: V5013 C#: V5601 Java: V5305 |
16 |
|
Missing Authorization |
5,53 |
1 |
Coming in the future |
17 |
|
Improper Neutralization of Special Elements used in a Command ('Command Injection') |
5,42 |
5 |
C#: V5616 |
18 |
|
Missing Authentication for Critical Function |
5,15 |
6 |
Coming in the future |
19 |
|
Improper Restriction of Operations within the Bounds of a Memory Buffer |
8,85 |
6 |
C++: V512, V557, V582, V769, V783, V1004 |
20 |
|
Incorrect Default Permissions |
4,84 |
0 |
Coming in the future |
21 |
|
Server-Side Request Forgery (SSRF) |
4,27 |
8 |
C#: V5618 |
22 |
|
Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition') |
3,57 |
6 |
Coming in the future |
23 |
|
Uncontrolled Resource Consumption |
3,56 |
2 |
Coming in the future |
24 |
|
Improper Restriction of XML External Entity Reference |
3,38 |
0 |
C#: V5614 |
25 |
|
Improper Control of Generation of Code ('Code Injection') |
3,32 |
4 |
C++: V1076 |
Как видно из таблицы, на данный момент статический анализатор PVS-Studio обеспечивает покрытие 68% (17 из 25) списка CWE Top 25 2022. В прошлом году это значение составляло 52%. Довольно значимое улучшение покрытия за год и во многом это заслуга большого количества SAST-ориентированных диагностик, выпущенных за прошедший год.
Изменения за последний год
Самые крупные передвижения вверх:
# |
CWE ID |
Название |
Позиция в 2021 г |
Позиция в 2022 г |
Изменение за год |
---|---|---|---|---|---|
1 |
|
Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition') |
33 |
22 |
11▲ |
2 |
|
Improper Neutralization of Special Elements used in a Command ('Command Injection') |
25 |
17 |
8▲ |
3 |
|
Uncontrolled Resource Consumption |
27 |
23 |
4▲ |
4 |
|
NULL Pointer Dereference |
15 |
11 |
4▲ |
5 |
|
Improper Control of Generation of Code ('Code Injection') |
28 |
25 |
3▲ |
Самые крупные передвижения вниз:
# |
CWE ID |
Название |
Позиция в 2021 г |
Позиция в 2022 г |
Изменение за год |
---|---|---|---|---|---|
1 |
|
Insufficiently Protected Credentials |
21 |
38 |
17▼ |
2 |
|
Exposure of Sensitive Information to an Unauthorized Actor |
20 |
33 |
13▼ |
3 |
|
Incorrect Permission Assignment for Critical Resource |
22 |
30 |
8▼ |
4 |
|
Missing Authentication for Critical Function |
11 |
18 |
7▼ |
«Новички» в Top 25:
# |
CWE ID |
Название |
Позиция в 2021 г |
Позиция в 2022 г |
Изменение за год |
---|---|---|---|---|---|
1 |
|
Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition') |
33 |
22 |
11▲ |
2 |
|
Uncontrolled Resource Consumption |
27 |
23 |
4▲ |
3 |
|
Improper Control of Generation of Code ('Code Injection') |
28 |
25 |
3▲ |
Ну и в конце – дефекты, которые выбыли из CWE Top 25 в 2022 году:
# |
CWE ID |
Название |
Позиция в 2021 г |
Позиция в 2022 г |
Изменение за год |
---|---|---|---|---|---|
1 |
|
Exposure of Sensitive Information to an Unauthorized Actor |
20 |
33 |
13▼ |
2 |
|
Insufficiently Protected Credentials |
21 |
23 |
2▼ |
3 |
|
Incorrect Permission Assignment for Critical Resource |
22 |
30 |
8▼ |
Краткий итог по изменениям:
- первые десять мест в топе остаются достаточно стабильными;
- CWE‑787 (Out-of-bounds Write) всё также удерживает лидерство;
- CWE‑502 (Deserialization of Untrusted Data) и CWE‑862 (Missing Authorization) уверенно поднимаются год от года;
- в этом году в топ ворвался CWE‑362 (Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')), поднявшись сразу на 11 пунктов вверх по сравнению с прошлым годом;
- появившаяся в 2020 и резко взлетевшая в прошлом году CWE‑306 (Missing Authentication for Critical Function) сильно потеряла позиции в текущем;
- самым же крупным движением вниз отметилась CWE‑522 (Insufficiently Protected Credentials), которая упала вниз сразу на 17 пунктов.
За бортом
Бонусом предлагаю посмотреть, какие недостатки оказались ниже основного списка CWE Top 25 в 2022 году и вполне могут подняться в 2023 году:
# |
CWE ID |
Название |
Оценка |
KEV |
Изменение за год |
---|---|---|---|---|---|
26 |
|
Improper Certificate Validation |
3,12 |
2 |
- |
27 |
|
Uncontrolled Search Path Element |
3,12 |
0 |
7▲ |
28 |
|
Incorrect Authorization |
3,10 |
0 |
10▲ |
29 |
|
Improper Privilege Management |
3,06 |
3 |
- |
30 |
|
Incorrect Permission Assignment for Critical Resource |
2,93 |
1 |
8▼ |
31 |
|
Access of Resource Using Incompatible Type ('Type Confusion') |
2,87 |
10 |
5▲ |
32 |
|
Exposure of Resource to Wrong Sphere |
2,68 |
0 |
21▲ |
33 |
|
Exposure of Sensitive Information to an Unauthorized Actor |
2,49 |
2 |
13▼ |
34 |
|
Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution') |
2,48 |
0 |
новый |
35 |
|
URL Redirection to Untrusted Site ('Open Redirect') |
2,41 |
0 |
2▲ |
36 |
|
Missing Release of Memory after Effective Lifetime |
2,39 |
0 |
4▼ |
37 |
|
Improper Link Resolution Before File Access ('Link Following') |
2,38 |
4 |
6▼ |
38 |
|
Insufficiently Protected Credentials |
2,25 |
0 |
17▼ |
39 |
|
Cleartext Transmission of Sensitive Information |
2,15 |
0 |
4▼ |
40 |
|
Cleartext Storage of Sensitive Information |
2,01 |
0 |
1▲ |
Хоть данные недостатки и не попали в основной список, но они все равно являются важными т.к. при благоприятных обстоятельствах могут стать полноценными уязвимостями.
Заключение
Надеюсь, что данный материал был для вас интересен, а может быть и помог разобраться в актуальной терминологии.
К счастью, в борьбе с потенциальными уязвимостями помогают статические анализаторы, и поэтому по традиции мне хотелось бы предложить вам скачать и попробовать проверить свой проект статическим анализатором PVS-Studio. Вдруг и у вас в код закралась парочка CWE, которые только и ждут удобного момента, чтобы стать полноценными CVE :)
Дополнительные ссылки
- Технологии статического анализа кода PVS-Studio.
- Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей.
- Потенциальная уязвимость.
- Уязвимость нулевого дня.
- OWASP, уязвимости и taint анализ в PVS-Studio C#. Смешать, но не взбалтывать.
- Какая разница между DevOps и DevSecOps?