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 | Небезопасное хранение конфиденциальной информации |
|