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

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

Практическая работа: координаты компонентов и эффект битого PURL

Цель

Собрать корректные координаты (PURL, CPE, идентификаторы уязвимостей) для четырёх компонентов и на собственном опыте увидеть, как порча координаты превращает уязвимый компонент в «чистый» в отчёте сканера.

Что понадобится

Часть 1. Таблица координат (4 компонента)

Заполните таблицу для OpenSSL, zlib, libcurl и одной внутренней библиотеки Организации. Версии берите фиксированные (как в реальном релизе).

Компонент PURL CPE 2.3 CVE / GHSA BDU Источник координаты
OpenSSL 3.0.7 pkg:generic/openssl@3.0.7 или экосистемный cpe:2.3:a:openssl:openssl:3.0.7:*:*:*:*:*:*:* … … NVD CPE Search / osv.dev
zlib 1.2.11 pkg:generic/zlib@1.2.11 cpe:2.3:a:zlib:zlib:1.2.11:*:*:*:*:*:*:* … … …
libcurl 7.74.0 pkg:deb/debian/curl@7.74.0-1.3?arch=amd64 cpe:2.3:a:haxx:curl:7.74.0:*:*:*:*:*:*:* … … проверить alias curl:curl
внутренняя библиотека pkg:generic/<name>@<ver> (приватный) назначить вручную или пометить «нет CPE» — — реестр Организации

Где брать значения PURL экосистемного пакета часто берётся из самого SBOM. Для C/C++ компонента CPE приходится искать вручную: вбейте product в NVD CPE Search и посмотрите, под какими vendor он зарегистрирован. Для libcurl специально проверьте обе формы — haxx:curl и curl:curl.

Шаги

  1. Зафиксируйте вход: компонент, версию, дату анализа, версии инструментов.
  2. Для каждого компонента найдите PURL и проверьте его в osv.dev → выпишите CVE/GHSA.
  3. Найдите CPE в NVD CPE Search; для libcurl зафиксируйте обе vendor-формы (alias).
  4. Проверьте каждый CVE по БДУ ФСТЭК — выпишите BDU:YYYY-NNNNN, где есть; отметьте записи без CVE.
  5. Для внутренней библиотеки решите: есть ли публичная координата вообще; если нет — пометьте как «unresolved, требует ручной разметки».

Часть 2. Эксперимент «битый PURL → тихий ноль»

  1. Возьмите lockfile или manifest с заведомо уязвимым пакетом (например, устаревший npm/PyPI). Запустите базовый скан:
osv-scanner scan source --lockfile=package-lock.json

Зафиксируйте число находок (например, N уязвимостей).

  1. Смоделируйте порчу координаты. В SBOM (CycloneDX JSON) у этого компонента добавьте приватный qualifier и/или измените type, затем прогоните скан по SBOM:
# было:  pkg:npm/lodash@4.17.20
# стало: pkg:npm/lodash@4.17.20?repository_url=https://nexus.internal/repo
osv-scanner scan --sbom=bom.cdx.json
  1. Сравните: число находок упало (часто до нуля по этому компоненту), при этом скан завершился без ошибок. Запишите результат.

  2. Снимите приватный qualifier (нормализуйте PURL по правилам П24. PURL нормализация и private qualifiers) и повторите — находки должны вернуться.

Главный вывод части 2 Снижение числа находок не сопровождается ошибкой. Это и есть механизм false negative: компонент «выпал» из матчинга, а отчёт выглядит благополучно.

Ожидаемый результат

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

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

Показать преподавателю: (1) таблицу координат с alias для libcurl; (2) воспроизведённый эффект «битый PURL → падение находок → восстановление после нормализации» с конкретными числами; (3) список unresolved-координат.

Практики

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

NIST SP 800-218 SSDF RV.1 (поиск уязвимостей опирается на корректную идентификацию), CISA Minimum Elements for SBOM (уникальные идентификаторы), BSI TR-03183-2 v2.1.0 (качество SBOM), БДУ ФСТЭК.