Список CWE Top 25 отражает наиболее серьёзные недостатки безопасности ПО. Предлагаю вам ознакомиться с обновлённым топом в обзоре изменений за прошедший год.
Мы позиционируем анализатор PVS‑Studio не только как средство для поиска ошибок в коде, но и как инструмент для статического тестирования защищённости приложений (Static Application Security Testing, сокр. SAST). Для лучшего понимания трендов и планирования диагностических правил нет ничего лучше, чем заглянуть в свежий список наиболее актуальных проблем безопасности. Таких списков несколько, например, OWASP Top 10, SANS Top 25, и уже названный ранее CWE Top 25.
Кстати, в прошлом году мы уже писали обзор изменений в CWE Top 25 2021. При желании с ним можно ознакомиться здесь.
Для лучшего понимания контекста не помешает освежить в памяти основные моменты. Для этого я кратко пробегусь по следующим темам:
Если вы чувствуете себя подкованным в этих вопросах, то можете спокойно пропустить этот раздел. Остальным рекомендую ознакомиться для удобства дальнейшего чтения. Далее довольно вольный перевод и интерпретация некоторых пунктов CWE FAQ и CVE FAQ:
Чем "дефект" (недостаток) отличается от уязвимости в ПО?
Дефекты (недостатки) – это ошибки, сбои и прочие проблемы реализации, проектирования или архитектуры программного обеспечения, которые могут привести к уязвимостям.
Уязвимости – уже найденные кем-то ошибки, которые могут быть напрямую использованы злоумышленниками для получения доступа к системе или сети, нарушения работы сервисов и так далее.
Что такое CWE, чем отличается от CVE, при чем тут CVSS и откуда взялся KEV?
И зачем мне вообще знать про CWE?
Сегодня CWE используется как основное средство при обсуждении устранения и/или смягчения недостатков безопасности в архитектуре, дизайне, коде и реализации программного обеспечения. Организации используют CWE в качестве стандартной меры для оценки инструментов проверки безопасности ПО и в качестве общего базового стандарта для идентификации, предупреждения и смягчения негативных последствий.
Что такое CWE Top 25?
CWE Top 25 – это список наиболее опасных и распространённых недостатков. Эти недостатки опасны потому, что часто их легко найти и использовать. Они могут позволить злоумышленникам помешать работе приложения, украсть данные или даже полностью захватить систему. CWE Top 25 – это значимый ресурс сообщества, который может помочь получить представление о наиболее распространённых и опасных на данный момент недостатках безопасности.
Каков алгоритм составления и ранжирования списка CWE Top 25 2022?
Основными источниками информации для исследования в этом году являлись:
Полученные данные команда исследователей преобразовала согласно методу "View-1003" для уменьшения специфичности записей. Благодаря этому, например, CWE-122 (Heap-Based Buffer Overflow) будет преобразована к базовой CWE-787 (Out-of-Bounds Write). Также были отфильтрованы следующие категории записей:
Далее команда исследователей применила собственную формулу для расчёта порядка ранжирования, учитывающую частоту, с которой какой-либо недостаток (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
В целом методология анализа данных в этом году не претерпела существенных изменений. А вот уже в следующем году авторы планируют более значительные перемены. Вот некоторые из них:
Более подробно о методологии подготовки и анализа данных можно прочитать в дополнительных сведениях к исследованию.
Насколько большая выборка в этом году?
Набор данных для анализа в этом году включал в себя 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#: 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 |
||
5 |
Out-of-bounds Read |
17,67 |
1 |
C#: V3106 Java: V6025 |
|
6 |
Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') |
17,53 |
32 |
C#: V5616 |
|
7 |
Use After Free |
15,50 |
28 |
||
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 |
|
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 |
||
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 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 :)