Common Weakness Enumeration (CWE™) - это словарь распространенных типов слабостей программного обеспечения, которые могут происходить в программной архитектуре, проекте, коде или реализации. Эти недостатки могут привести к уязвимостям безопасности.
Словарь CWE присваивает уникальный идентификатор каждому типу слабости программного обеспечения. Эти идентификаторы служат общим языком для описания недостатков безопасности программного обеспечения и стандартом для инструментов безопасности программного обеспечения, нацеленных на эти недостатки. Для получения дополнительной информации см. «Общий перечисление слабостей».
Polyspace® Результаты Bug Finder™ могут быть сопоставлены с идентификаторами CWE. Используя Bug Finder, можно проверить и документировать, есть ли у вашего программного обеспечения недостатки, перечисленные в словаре CWE. Bug Finder поддерживает следующие аспекты Программы совместимости и эффективности CWE:
CWE Searchable: Для каждого поддерживаемого идентификатора CWE в коде можно увидеть все образцы, которые имеют недостатки, соответствующие идентификатору.
Выход CWE: Для каждого дефекта Polyspace Bug Finder:
Можно просмотреть связанный идентификатор CWE.
Вы можете сообщить связанный идентификатор CWE.
Результаты Bug Finder сопоставляются с идентификаторами CWE (идентификаторами). Используя результаты Bug Finder, можно оценить код по стандарту CWE. Например, CWE ID 119 (Неподходящее ограничение операций в границах буфера памяти) сопоставляется с дефектами, Array access out of bounds и Pointer access out of bounds Bug Finder.
Для получения дополнительной информации о Программе совместимости и эффективности CWE, смотрите Совместимость CWE.
Используйте следующий рабочий процесс, если вы хотите фокусировать свой анализ Bug Finder на стандарте CWE.
Анализ: Проверьте свой код только на те дефекты Bug Finder, которые соответствуют стандарту. Используйте опцию Find defects (-checkers) со значением CWE.
Результаты: Если вы активируете только дефектные шашки, соответствующие стандарту CWE, вы видите только дефекты, которые соответствуют стандарту. Исправьте или разъясните каждый дефект.
Вместе с дефектами можно увидеть идентификаторы CWE, сопоставленные с каждым дефектом в столбце CWE ID на панели Results List. Если столбец не включен по умолчанию, щелкните правой кнопкой мыши любой заголовок столбца и выберите CWE ID.
Отчет: Когда вы генерируете отчет, выберите SecurityCWE шаблон, адаптированный для стандарта CWE. В отчете показаны идентификаторы CWE, соответствующие каждому результату.
В следующей таблице перечислены идентификаторы CWE (версия 3.3), адресованные Polyspace Bug Finder с соответствующими дефектными шашками. Используя дефектные шашки Polyspace Bug Finder, можно проверить наличие 133 идентификаторов CWE.
Существует три типа идентификаторов CWE: Class, основа и вариант. Идентификаторы типа Class задают слабые стороны безопасности на абстрактном уровне, независимом от определенного языка или технологии, в то время как идентификаторы типа Base и Variant являются более конкретными. С другой стороны, результаты Polyspace Bug Finder разработаны таким образом, чтобы пользователи могли иметь точный диагноз дефекта в коде и быстро понимать дефект. Поэтому:
Результаты Bug Finder сопоставляются с определенными идентификаторами Основы и Варианта типов, а не с общими идентификаторами Класса типов.
Только когда результат покрывает больше заземления, чем определенный идентификатор CWE, результат сопоставляется с его более общим родительским типом. Например, Array access out of bounds проверки дефектов покрывает многие виды переполнения буфера, в то время как CWE-788 ссылается только на «Доступ к местоположению памяти после окончания буфера». Поэтому проверка дефекта сопоставлена с его родительским элементом CWE-119, который ссылается на «Неподходящее ограничение операций в границах буфера памяти». Однако, чтобы сохранить отображение точным, делается попытка сопоставить с конкретными идентификаторами CWE.
Часто, более одного результата Bug Finder сопоставляется с определенным идентификатором CWE.
Например, CWE-908 ссылается на «Использование неинициализированного ресурса». Чтобы выделить конкретные виды неинициализированных ресурсов, Bug Finder имеет три различных шашки: Member not initialized in constructor, Non-initialized pointer и Non-initialized variable.
Для отображения с подмножествами CWE-658 и CWE-659 смотрите Отображение между CWE-658 или 659 и Результаты Polyspace.
| ИДЕНТИФИКАТОР CWE | Описание идентификатора CWE | Polyspace Bug Finder Defect Checker |
|---|---|---|
| 15 | Внешнее управление системой или настройкой строения | |
| 20 | Неподходящая проверка входных валидаций | |
| 22 | Неправильное ограничение имени пути ограниченной директории ('Path Traversal') | |
| 23 | Относительный ход пути | |
| 36 | Абсолютный ход пути | |
| 67 | Неправильная обработка имен устройств Windows | |
| 77 | Неправильная нейтрализация специальных элементов, используемых в команде | |
| 78 | Неправильная нейтрализация специальных элементов, используемых в команде OS | |
| 88 | Инъекция или изменение аргумента | |
| 114 | Управление процессами |
|
| 119 | Неподходящее ограничение операций в границах буфера памяти | |
| 120 | Буферная копия без проверки размера входа ('Classic buffer overflow') |
|
| 121 | Переполнение буфера на основе стека | |
| 122 | Переполнение буфера на основе кучи | |
| 124 | Подземная запись буфера ('Buffer underflow') |
|
| 125 | Считайте вне границ |
|
| 126 | Перечитать буфер | |
| 127 | Перечитать буфер | |
| 128 | Ошибка переноса |
|
| 129 | Неправильная валидация индекса массива | |
| 130 | Неправильная обработка несогласованности параметра длины | |
| 131 | Неправильное вычисление buffer size |
|
| 134 | Строка неконтролируемого формата | |
| 135 | Неправильное вычисление длины многобайтовой строки |
|
| 170 | Неправильное завершение по умолчанию | |
| 188 | Опора на размещение данных/памяти |
|
| 189 | Числовые ошибки |
|
| 190 | Целочисленное переполнение или обтекание |
|
| 191 | Целочисленное нижнее течение (Wrap или wraparound) |
|
| 192 | Целочисленная ошибка принуждения |
|
| 194 | Неожиданное расширение знака | |
| 195 | Ошибка преобразования подписи в неподписанную | |
| 196 | Ошибка преобразования без подписи в подпись | |
| 197 | Числовая ошибка усечения | |
| 198 | ||
| 226 | Конфиденциальная информация, неубранная перед релизом | |
| 227 | Ненадлежащее выполнение контракта API |
|
| 240 | Неправильная обработка несогласованных элементов конструкции | |
| 242 | Использование неотъемлемо опасной функции | |
| 243 | Создание тюрьмы chroot без изменения рабочей директории | |
| 244 | Неправильная очистка памяти кучки перед релизом | |
| 250 | Выполнение с ненужными привилегиями | |
| 251 | Часто не используется: управление строками | |
| 252 | Неконтролируемое значение возврата | |
| 253 | Неправильная проверка возвращаемого значения функции |
|
| 273 | Неподходящая проверка на сброшенные привилегии | |
| 287 | Неправильная аутентификация | |
| 297 | Неправильная валидация сертификата с несоответствием хоста | |
| 304 | Отсутствующий критический шаг в аутентификации | |
| 310 | Криптографические проблемы |
|
| 311 | Отсутствует шифрование конфиденциальных данных | |
| 312 | Хранение конфиденциальной информации в чистом виде | |
| 316 | Хранение конфиденциальной информации в памяти в формате Cleartext | |
| 320 | Ключевые ошибки управления | |
| 321 | Использование жестко закодированного криптографического ключа | |
| 322 | Обмен ключами без аутентификации сущности | |
| 325 | Отсутствует необходимый криптографический шаг |
|
| 326 | Недостаточная прочность шифрования |
|
| 327 | Использование сломанного или рискованного криптографического алгоритма |
|
| 328 | Обратимый односторонний хеш | |
| 329 | Не используйте случайный IV с режимом CBC |
|
| 330 | Использование недостаточно случайных значений |
|
| 336 | Тот же seed в PRNG | |
| 337 | Предсказуемый seed в PRNG | |
| 338 | Использование криптографически слабого генератора псевдослучайных чисел (PRNG) | |
| 353 | Отсутствующая поддержка проверки целостности | |
| 354 | Неправильная валидация значения проверки целостности | |
| 362 | Параллельное выполнение с использованием общего ресурса с неподходящей синхронизацией ('Race Condition') | |
| 364 | Условие гонки обработчика сигналов |
|
| 366 | Условие гонки в потоке |
|
| 367 | Условие гонки во время проверки использования (TOCTOU) | |
| 369 | Разделите на нули |
|
| 372 | Неполное внутреннее различие состояний |
|
| 375 | Возврат изменяемого объекта ненадежному вызывающему абоненту | |
| 377 | Небезопасный временный файл | |
| 387 | Ошибки сигнала |
|
| 391 | Выключенное условие ошибки | |
| 398 | Показатель низкого качества кода | |
| 401 | Неподходящий релиз памяти перед удалением последней ссылки | |
| 404 | Неправильное завершение работы или релиз ресурса | |
| 413 | Неподходящая блокировка ресурса |
|
| 415 | Double free | |
| 416 | Использование после бесплатного | |
| 426 | Ненадежный путь поиска файлов | |
| 427 | Неконтролируемый элемент пути поиска файлов |
|
| 456 | Отсутствует инициализация переменной | |
| 457 | Использование неинициализированной переменной | |
| 465 | Проблемы с указателем | |
| 466 | Возврат значения указателя за пределы ожидаемой области значений | |
| 467 | Использование sizeof () для типа указателя | |
| 468 | Неправильное масштабирование указателя | |
| 469 | Использование вычитания указателя для определения размера |
|
| 471 | Изменение предполагаемых неизменяемых данных | |
| 474 | Использование функции с несогласованными реализациями | |
| 475 | Неопределенное поведение для входа в API | |
| 476 | Удаление указателя NULL | |
| 477 | Использование устаревших функций | |
| 478 | Отсутствует случай по умолчанию в операторе switch | |
| 479 | Использование обработчиком сигналов функции, не входящей в систему |
|
| 480 | Использование неправильного оператора | |
| 481 | Назначение вместо сравнения | |
| 482 | Сравнение вместо назначения | |
| 483 | Неправильное разделение блоков | |
| 484 | Опущенный оператор пропуск в switch | |
| 522 | Недостаточно защищенные учетные данные | |
| 532 | Воздействие информации через файлы журнала | |
| 534 | Воздействие информации через файлы журнала отладки | |
| 535 | Информационное воздействие через сообщение об ошибке интерпретатора | |
| 547 | Использование жестко закодированных, релевантных для безопасности констант | |
| 558 | Использование гетлогина () в многопоточном приложении | |
| 560 | Использование umask () с аргументом в стиле chmod | |
| 561 | Мертвый код | |
| 562 | Возврат адреса переменной стека |
|
| 573 | Неправильное следование спецификации вызывающим абонентом |
|
| 587 | Назначение фиксированного адреса указателю | |
| 590 | Без памяти не на куче | |
| 606 | Выключенный вход для условия цикла | |
| 628 | Вызов функции с неправильно заданными аргументами |
|
| 658 | Смотрите Отображение между CWE-658 или 659 и Результаты Polyspace. | |
| 659 | Смотрите Отображение между CWE-658 или 659 и Результаты Polyspace. | |
| 663 | Использование не входящей функции в параллельном контексте |
|
| 664 | Неподходящее управление ресурсом в течение его жизни |
|
| 665 | Неправильная инициализация | |
| 666 | Операция на ресурсе в неправильной фазе срока службы | |
| 667 | Неправильная блокировка | |
| 672 | Операция на ресурсе после истечения срока действия или релиза | |
| 675 | Повторяющиеся операции на ресурсе | |
| 676 | Использование потенциально опасной функции | |
| 681 | Неправильное преобразование между числовыми типами | |
| 682 | Неправильное вычисление |
|
| 683 | Вызов функции с неправильным порядком аргументов | |
| 685 | Вызов функции с неправильным количеством аргументов |
|
| 686 | Вызов функции с неправильным типом аргумента |
|
| 687 | Вызов функции с неправильно заданным значением аргумента | |
| 690 | Снятое значение возврата к нулевому разыменованию указателя |
|
| 691 | Недостаточное управление потоком управления | |
| 693 | Отказ механизма защиты | |
| 696 | Неправильный порядок поведения | |
| 703 | Неправильная проверка или обработка исключительных условий | |
| 704 | Неправильное преобразование или приведение типов |
|
| 705 | Неправильное определение потока управления | |
| 710 | Нарушение стандарта кодирования | |
| 732 | Неправильное назначение разрешений для критического ресурса | |
| 754 | Неподходящая проверка на необычные или исключительные условия | |
| 755 | Неправильное обращение с исключительными условиями | |
| 758 | Зависимость от неопределенного, неопределенного или определяемого реализацией поведения |
|
| 759 | Использование одностороннего хэша без соли | |
| 762 | Несовпадающие стандартные программы управления памятью | |
| 764 | Несколько блокировок критического ресурса | |
| 765 | Несколько разблокировок критического ресурса | |
| 767 | Доступ к критической частной переменной через общедоступный метод | |
| 770 | Распределение ресурсов без пределов или регулирования | |
| 772 | Отсутствующий релиз ресурса после эффективного срока службы | |
| 780 | Использование алгоритма rsa без oaep | |
| 783 | Логическая ошибка приоритета оператора |
|
| 785 | Использование функции манипуляции путями без буфера максимального размера |
|
| 786 | Доступ к местоположению памяти перед запуском буфера | |
| 787 | Внеплановая запись | |
| 789 | Неконтролируемое выделение памяти |
|
| 805 | Доступ к буферу с неправильным значением длины | |
| 822 | Ненадежное разыменование указателя | |
| 823 | Использование смещения указателя вне области допустимого значения | |
| 824 | Доступ к неинициализированному указателю | |
| 825 | Просроченное дереферентство указателя |
|
| 826 | Преждевременный релиз ресурса в течение ожидаемого срока службы | |
| 828 | Обработчик сигналов с функциями, которые не являются асинхронными-безопасными |
|
| 832 | Разблокировка ресурса, который не заблокирован | |
| 833 | Тупик | |
| 843 | Доступ ресурса с использованием несовместимого типа ('Type confusion') | |
| 872 | CERT C++ Secure Coding Section 04 - Целые числа (INT) | |
| 873 | CERT C++ Secure Coding Section 05 - Арифметика с плавающей точкой (FLP) | |
| 908 | Использование неинициализированного ресурса | |
| 910 | Использование дескриптора файла с истекшим сроком действия |
|
| 922 | Небезопасное хранение конфиденциальной информации |
|