Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
Контрольные вопросы
Базовый уровень 1. Из каких частей состоит строка PURL? Разберите по компонентам
pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1. 2. Сколько полей в строке CPE 2.3 и что означает первое полеpart? Какими значениями оно ограничено? 3. Чем PURL отличается от CPE по назначению: какой источник уязвимостей матчит по каждому из них? 4. Что означает пустое поле в CPE и как оно записывается в формате 2.3?Средний уровень 5. Почему при битом или отсутствующем PURL сканер возвращает не ошибку, а просто меньше находок? Опишите механизм. 6. Что такое alias-проблема CPE? Приведите пример продукта с несколькими vendor в словаре NVD. 7. Чем идентификаторы OSV отличаются от CVE и зачем в схеме OSV нужно поле
aliases? 8. Почему БДУ ФСТЭК — это самостоятельный источник координат, а не перевод NVD? Назовите два конкретных отличия. 9. Почему для C/C++ компонентов alias-проблема CPE проявляется чаще, чем для npm/PyPI/Maven?Продвинутый уровень 10. Зачем перед публичным матчингом нормализовать PURL и снимать приватные qualifiers? Что произойдёт с
pkg:conan/openssl@3.1.1?user=org&repository_url=https://nexus.internal, если отдать его как есть? 11. Компонент имеет корректный PURL, но в отчёте «0 уязвимостей». Перечислите минимум три причины, по которым это может быть ложным нулём. 12. Почему связку PURL↔CPE нельзя получить простой склейкой строк? Покажите на примере log4j.Кейс-задачи Кейс А. Тихий ноль. Сканер по SBOM релиза показал 0 уязвимостей для
libcurl, хотя версия заведомо старая. В SBOM координата:pkg:generic/libcurl@7.74.0?repository_url=https://artifactory.internal/libs, CPE отсутствует. Что именно сломало матчинг и какие два действия вернут находки?Кейс Б. Разошлись источники. Для одного компонента osv.dev отдаёт
GHSA-jfh8-c2jp-5v3qиCVE-2021-44228, а NVD по вашему CPE — пусто. CPE в SBOM:cpe:2.3:a:apache:log4j-core:2.14.1:*:*:*:*:*:*:*. В чём ошибка координаты и как её исправить?Кейс В. Внутренний форк без координаты. Внутренняя библиотека — форк open-source-проекта с собственными патчами. Какую координату ей назначить (PURL/CPE), как пометить статус для матчинга и почему её нельзя автоматически приравнивать к upstream при поиске уязвимостей?
Ориентиры для самопроверки
- В кейсе А ломает матчинг приватный qualifier
repository_url+ отсутствие CPE: нормализовать PURL (П24. PURL нормализация и private qualifiers) и проставить CPE (cpe:2.3:a:haxx:curl:..., проверить aliascurl:curl). - В кейсе Б product в CPE должен быть
log4j, а неlog4j-core(CPE-имя продукта не равно Maven artifactId). - В кейсе В форк фиксируется как отдельная сущность с собственной координатой и пометкой «unresolved/internal»; см. П25. CPE alias worklist.