Пиков / КАПО
Как читать авторский курс и нормативные материалы

Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.

П25. CPE alias worklist

Цель

Составить рабочий список C/C++ зависимостей, у которых нет CPE (а значит, нет матчинга на NVD), и для каждой подобрать корректный CPE с учётом alias-проблемы (один продукт — несколько разных vendor:product). Проверяемый результат: таблица-worklist «компонент → найденный CPE → альтернативные написания vendor/product → статус», отсортированная по приоритету.

Команда или действие

Это аналитическая практика без инструмента: вы вручную сверяете компоненты с форматом CPE 2.3 и ищете совпадения в NVD CPE Dictionary. Алгоритм worklist:

1. Выгрузить из SBOM C/C++ компоненты, у которых cpe == пусто (но есть purl/имя).
2. Для каждого — найти в NVD CPE Dictionary кандидатов по имени продукта.
3. Зафиксировать ВСЕ варианты vendor:product (alias!), а не первый попавшийся.
4. Проставить приоритет: критичные/сетевые библиотеки (openssl, libcurl) — выше.
5. Собрать рабочий CPE-шаблон cpe:2.3:a:<vendor>:<product>:<version>:*:*:*:*:*:*:*

Alias-проблема CPE У одного продукта в NVD исторически бывает несколько vendor:product. OpenSSL встречается и как openssl:openssl, и как openssl_project:openssl; для других библиотек vendor мог меняться при смене мейнтейнера. Если в SBOM записан один alias, а CVE привязан к другому — находка теряется. Поэтому в worklist фиксируют не один CPE, а все известные написания.

Что вы должны увидеть

Worklist в виде таблицы:

Компонент Версия Подобранный CPE Alias / альт. написания Приоритет Статус
OpenSSL 3.0.11 cpe:2.3:a:openssl:openssl:3.0.11:*:*:*:*:*:*:* openssl_project:openssl высокий подтверждён
libcurl 7.88.1 cpe:2.3:a:haxx:curl:7.88.1:*:*:*:*:*:*:* curl:curl высокий проверить vendor
zlib 1.2.13 cpe:2.3:a:zlib:zlib:1.2.13:*:*:*:*:*:*:* gnu:zlib (ошибочный) средний подтверждён
внутренняя libcustom 1.0 — — — CPE отсутствует (internal)

Ориентир: worklist охватывает все C/C++ компоненты без CPE из вашего SBOM; для публичных OSS у каждого должен появиться хотя бы один CPE-кандидат, для внутренних — пометка «CPE отсутствует, internal». Строки с несколькими alias — самые ценные: именно они закрывают потенциальные false negative.

Зачем worklist, а не разовая правка CPE проставляется руками и устаревает: NVD добавляет/депрекейтит записи. Worklist с приоритетом и статусом — это передаваемый артефакт для сервиса аудита/вердиктов, а не разовое действие. Критичные сетевые библиотеки размечаются первыми.

Если не получилось

Критерий зачёта

Показать преподавателю: worklist по всем C/C++ компонентам без CPE из учебного SBOM, где для публичных библиотек заполнены CPE и альтернативные alias, проставлен приоритет и статус, а внутренние помечены CPE отсутствует. Отдельно объяснить на примере OpenSSL, как два разных alias могли бы привести к пропуску CVE.

Нормативная связка

Полнота и корректность CPE — условие матчинга на NVD и БДУ ФСТЭК; без них RV.1 NIST SP 800-218 SSDF (поиск уязвимостей в компонентах) даёт false negative. Качество идентификаторов SBOM — критерий BSI TR-03183-2 v2.1.0; alias-проблема CPE — ядро модуля М04. Смежные практики: П24. PURL нормализация и private qualifiers (вторая координата — PURL), П23. Статическая линковка как слепая зона и П22. ELF dynamic dependencies (откуда берутся безымянные C/C++ компоненты). Шаблон: Реестр unresolved libraries.