Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
OSV-Scanner
Для чего
OSV-Scanner — официальный клиент базы OSV.dev. Он читает не SBOM, а сами lockfiles проекта (package-lock.json, poetry.lock, go.mod, Cargo.lock, pom.xml и др.), извлекает точные версии и опрашивает OSV по каждой паре «экосистема + версия». Сила в том, что OSV хранит уязвимые диапазоны в виде машинных событий introduced/fixed, поэтому совпадение по версии точное, а не по эвристике CPE.
Как применяют
Базовый прогон — по дереву проекта или конкретному lockfile; для гейтов используют машинный вывод и call-graph анализ (Go), отсекающий недостижимый код:
Команда
# рекурсивно найти и просканировать все lockfiles
osv-scanner scan --recursive ./
# конкретный lockfile + анализ достижимости (Go) + JSON для гейта
osv-scanner scan --lockfile=go.mod --call-analysis=all --format=json ./ > osv.json
# просканировать готовый SBOM
osv-scanner scan --sbom=sbom.cdx.json
Запрос к API можно сделать и руками — это полезно показать студентам:
Прямой запрос к OSV API
curl -s https://api.osv.dev/v1/query -d \
'{"package":{"ecosystem":"PyPI","name":"requests"},"version":"2.19.0"}'
В ответ — массив записей с
id(напримерGHSA-...,PYSEC-...), полемaffected.rangesи ссылками. Подавление FP делается файлом конфигурации с записями[[02 Справочник/Глоссарий/IgnoredVulns|IgnoredVulns]]поidи сроком.
Сильные стороны
- Точный матчинг по версии через машинные диапазоны OSV (
introduced/fixed) — заметно меньше FP, чем у CPE-эвристик. - Работает прямо с lockfiles десятков экосистем без предварительной генерации SBOM; покрывает npm, PyPI, Go, Maven, crates, RubyGems и др.
- Call-graph анализ для Go: отсекает уязвимости в коде, который фактически не вызывается, — снижает шум в гейте.
- Единый идентификатор и схема записи (OSV schema) — удобно агрегировать advisories из разных источников (GHSA, PYSEC, RUSTSEC, дистрибутивы).
Ограничения
- Покрытие держится на наличии экосистемы в OSV: для C/C++ без пакетного менеджера и для приватных пакетов данных почти нет.
- Идентификаторы — преимущественно GHSA/экосистемные; маппинг на классический CVE и на БДУ ФСТЭК не гарантирован и требует отдельной сверки.
- Call-analysis достижимости из коробки полноценно работает только для части языков (Go); для остальных это обычный матчинг по версии.
- Не оценивает эксплуатируемость (нет EPSS/KEV в выводе) — приоритизация остаётся на стороне процесса.
Offline / on-premise
Частично. По умолчанию сканер ходит в api.osv.dev. Для закрытого контура существует офлайн-режим: предварительно выгружается локальная копия БД (osv-scanner --offline --download-offline-databases или зеркало zip-дампов экосистем из бакета OSV), после чего матчинг идёт без сети. Минус — данные актуальны на момент выгрузки, нужен регламент регулярного обновления зеркала.
Связанные темы
М06 Поиск уязвимостей и VDR/VEX · М04 Идентификаторы компонентов и уязвимостей Практика: П07. OSV-Scanner и lockfiles · П09. VDR и VEX Смежные карточки: OSV.dev · Package URL (PURL) · GitHub Security Advisory · Grype · EPSS · БДУ ФСТЭК