>
>
CWE Top 25 2022. Обзор изменений

Михаил Гельвих
Статей: 12

CWE Top 25 2022. Обзор изменений

Список 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

CWE-787

Out-of-bounds Write

64,20

62

C++: V512, V557, V582, V645

C#: V3106

Java: V6025

2

CWE-79

Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

45,97

2

C#: V5610

3

CWE-89

Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

22,11

7

C#: V5608

4

CWE-20

Improper Input Validation

20,63

20

C++: V739, V781, V1010, V1024, V5009

5

CWE-125

Out-of-bounds Read

17,67

1

C++: V512, V557, V582

C#: V3106

Java: V6025

6

CWE-78

Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')

17,53

32

C++: V1010, V5009

C#: V5616

7

CWE-416

Use After Free

15,50

28

C++: V623, V723, V758, V774, V1017

8

CWE-22

Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

14,08

19

C#: V5609

9

CWE-352

Cross-Site Request Forgery (CSRF)

11,53

1

Coming in the future

10

CWE-434

Unrestricted Upload of File with Dangerous Type

9,56

6

Coming in the future

11

CWE-476

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

CWE-502

Deserialization of Untrusted Data

6,68

7

C#: V5611

13

CWE-190

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

CWE-287

Improper Authentication

6,35

4

Coming in the future

15

CWE-798

Use of Hard-coded Credentials

5,66

0

C++: V5013

C#: V5601

Java: V5305

16

CWE-862

Missing Authorization

5,53

1

Coming in the future

17

CWE-77

Improper Neutralization of Special Elements used in a Command ('Command Injection')

5,42

5

C#: V5616

18

CWE-306

Missing Authentication for Critical Function

5,15

6

Coming in the future

19

CWE-119

Improper Restriction of Operations within the Bounds of a Memory Buffer

8,85

6

C++: V512, V557, V582, V769, V783, V1004

20

CWE-276

Incorrect Default Permissions

4,84

0

Coming in the future

21

CWE-918

Server-Side Request Forgery (SSRF)

4,27

8

C#: V5618

22

CWE-362

Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')

3,57

6

Coming in the future

23

CWE-400

Uncontrolled Resource Consumption

3,56

2

Coming in the future

24

CWE-611

Improper Restriction of XML External Entity Reference

3,38

0

C#: V5614

25

CWE-94

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

CWE-362

Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')

33

22

11▲

2

CWE-77

Improper Neutralization of Special Elements used in a Command ('Command Injection')

25

17

8▲

3

CWE-400

Uncontrolled Resource Consumption

27

23

4▲

4

CWE-476

NULL Pointer Dereference

15

11

4▲

5

CWE-94

Improper Control of Generation of Code ('Code Injection')

28

25

3▲

Самые крупные передвижения вниз:

#

CWE ID

Название

Позиция в 2021 г

Позиция в 2022 г

Изменение за год

1

CWE-522

Insufficiently Protected Credentials

21

38

17▼

2

CWE-200

Exposure of Sensitive Information to an Unauthorized Actor

20

33

13▼

3

CWE-732

Incorrect Permission Assignment for Critical Resource

22

30

8▼

4

CWE-306

Missing Authentication for Critical Function

11

18

7▼

"Новички" в Top 25:

#

CWE ID

Название

Позиция в 2021 г

Позиция в 2022 г

Изменение за год

1

CWE-362

Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')

33

22

11▲

2

CWE-400

Uncontrolled Resource Consumption

27

23

4▲

3

CWE-94

Improper Control of Generation of Code ('Code Injection')

28

25

3▲

Ну и в конце – дефекты, которые выбыли из CWE Top 25 в 2022 году:

#

CWE ID

Название

Позиция в 2021 г

Позиция в 2022 г

Изменение за год

1

CWE-200

Exposure of Sensitive Information to an Unauthorized Actor

20

33

13▼

2

CWE-522

Insufficiently Protected Credentials

21

23

2▼

3

CWE-732

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

CWE-295

Improper Certificate Validation

3,12

2

-

27

CWE-427

Uncontrolled Search Path Element

3,12

0

7▲

28

CWE-863

Incorrect Authorization

3,10

0

10▲

29

CWE-269

Improper Privilege Management

3,06

3

-

30

CWE-732

Incorrect Permission Assignment for Critical Resource

2,93

1

8▼

31

CWE-843

Access of Resource Using Incompatible Type ('Type Confusion')

2,87

10

5▲

32

CWE-668

Exposure of Resource to Wrong Sphere

2,68

0

21▲

33

CWE-200

Exposure of Sensitive Information to an Unauthorized Actor

2,49

2

13▼

34

CWE-1321

Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution')

2,48

0

новый

35

CWE-601

URL Redirection to Untrusted Site ('Open Redirect')

2,41

0

2▲

36

CWE-401

Missing Release of Memory after Effective Lifetime

2,39

0

4▼

37

CWE-59

Improper Link Resolution Before File Access ('Link Following')

2,38

4

6▼

38

CWE-522

Insufficiently Protected Credentials

2,25

0

17▼

39

CWE-319

Cleartext Transmission of Sensitive Information

2,15

0

4▼

40

CWE-312

Cleartext Storage of Sensitive Information

2,01

0

1▲

Хоть данные недостатки и не попали в основной список, но они все равно являются важными т.к. при благоприятных обстоятельствах могут стать полноценными уязвимостями.

Заключение

Надеюсь, что данный материал был для вас интересен, а может быть и помог разобраться в актуальной терминологии.

К счастью, в борьбе с потенциальными уязвимостями помогают статические анализаторы, и поэтому по традиции мне хотелось бы предложить вам скачать и попробовать проверить свой проект статическим анализатором PVS-Studio. Вдруг и у вас в код закралась парочка CWE, которые только и ждут удобного момента, чтобы стать полноценными CVE :)

Дополнительные ссылки