Руководства по безопасности
Установка и использование osv-scanner: найти CVE в ваших зависимостях
osv-scanner — бесплатный инструмент, который читает ваши lock-файлы и машинно проверяет зависимости на известные уязвимости (CVE). Установите через Go/Homebrew/Scoop/Docker, сканируйте lock-файлы или контейнеры, встраивайте в CI и выбирайте между ним, npm/pnpm audit и Dependabot — через операционную призму этого сайта.
Для всех, кто хочет проверить, не скрывают ли зависимости их приложения известные уязвимости (CVE), особенно «собрал с помощью ИИ, не уверен в безопасности зависимостей». Здесь нет шагов атаки — только защита: инспекция собственного основания (ваших собственных lock-файлов).
Взгляд этого сайта: правильный инструмент определяется ВАШЕЙ конфигурацией
Честно говоря, сам этот сайт использует pnpm audit, а не osv-scanner (этот сайт не держит репозиторий на GitHub, а его дерево — одиночный npm, так что встроенного audit достаточно). osv-scanner становится правильным выбором, когда у вас ① несколько экосистем (npm + PyPI + Go…) ② нужно автономное сканирование без зависимости от GitHub ③ есть образы контейнеров для проверки. Выбирайте его потому, что он подходит вашей конфигурации, — а не потому, что он популярен.
1. Что такое osv-scanner
Сканер с открытым исходным кодом, созданный Google и написанный на Go. Его данные об уязвимостях берутся из OSV.dev — межъязыковой открытой базы уязвимостей. Ключевое отличие от языкоспецифичного инструмента вроде npm audit — широта охвата: он читает lock-файлы npm, PyPI (Python), Go, Rust, Maven (Java) и других.
Механизм прост: он перечисляет фактически разрешённые версии из вашего lock-файла, сопоставляет каждую пару пакет+версия с OSV и возвращает релевантные CVE и версии с исправлением. То, что он читает lock-файл, а не манифест (нижнюю границу ^ из package.json), важно — это совпадает с принципом судить по работающей версии.
2. Установка
Выбирайте то, что подходит вашей ОС и вкусу, — всё официально поддерживается.
Homebrew (macOS / Linux)
brew install osv-scannerScoop (Windows)
scoop install osv-scannerGo
go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latestБинарник / Docker
download from releases, or ghcr.io/google/osv-scannerЕсли вы предпочли бы ничего не устанавливать и использовать его только в CI, запускайте прямо из Docker-образа.
# confirm it's installed
osv-scanner --version3. Запуск
Чаще всего вы будете либо «рекурсивно сканировать весь каталог», либо «указывать lock-файл».
# scan the whole project recursively (auto-detects lockfiles)
osv-scanner scan -r ./
# name a lockfile (npm / pnpm / yarn, etc.)
osv-scanner scan -L pnpm-lock.yaml
# emit JSON (to feed CI or another tool)
osv-scanner scan -L package-lock.json --format json
# inspect a container image
osv-scanner scan image my-app:latestЗапуск через Docker (установка не требуется):
docker run --rm -v "$(pwd):/src" ghcr.io/google/osv-scanner:latest scan -r /srcЧтение вывода
По каждому совпадению вы получаете имя пакета, текущую версию, идентификатор CVE/Advisory и версию с исправлением. Задача одна: поднять до версии с исправлением или выше, обновить lock-файл и перезапустить, чтобы убедиться, что она ушла. Чтобы углубиться в CVE (серьёзность, статус эксплуатации), вставьте идентификатор в поиск CVE/KEV и увидите CVSS и то, эксплуатируется ли она активно (KEV), на одном экране.
Не обязательно чинить всё сразу
Большой список не значит «бросай всё». Расставляйте приоритеты по «эксплуатируется ли она активно (KEV)», умноженному на «насколько высок CVSS». Средний балл при активной эксплуатации важнее высокого балла на пути, до которого вы никогда не доберётесь. Полный подход к исправлению изложен в гигиене CVE в Next.js.
4. Сделайте это непрерывным (встройте в CI / cron)
Однократный ручной запуск бессмыслен. Это работает, когда запускается перед каждой сборкой или ежедневно по cron. osv-scanner завершается с ненулевым кодом, когда находит уязвимость, поэтому, поместив его в шаг CI, вы останавливаете сборку в тот же миг, когда проскользнёт опасная зависимость.
Добавьте его одним шагом CI
osv-scanner scan -r ./ рядом с тестами. Ненулевой выход проваливает пайплайн — опасные зависимости останавливаются до слияния.На GitHub работает и официальный Action
google/osv-scanner-action — вариант. Но автономный запуск без GitHub — это как раз преимущество osv-scanner.Нет GitHub? Используйте cron
5. Выбор между инструментами
Правильный ход — не «всегда osv-scanner», а то, что наиболее естественно для вашей конфигурации.
osv-scanner подходит, когда
- вы смешиваете больше, чем npm (PyPI / Go / Rust / Java, многоязычность)
- вам нужно автономное сканирование без GitHub (cron, любой CI)
- вы хотите проверить образ контейнера
- вы хотите оставаться бесплатными, на открытом источнике данных (OSV.dev)
Не нужно навязывать
- одиночный npm/pnpm-проект → встроенного
npm audit/pnpm auditчасто достаточно - работа, центрированная на GitHub → Dependabot даже открывает PR за вас
- «потому что популярно» → это не причина для выбора
Короче говоря, osv-scanner, pnpm audit и Dependabot — не конкуренты, а разные роли. Нужна межъязыковая широта и независимость от GitHub? osv-scanner. Одиночный npm? Встроенный audit. Центрированность на GitHub? Dependabot — и их можно сочетать. Важно «всегда запускать хотя бы один из них, автоматически». Против отравления цепочки поставок (как взлом Codecov или бэкдор в xz-utils) непрерывные проверки зависимостей — первая линия обороны.
Что делает сам этот сайт
Этот сайт прогоняет самоаудит зависимостей через pnpm audit перед каждым развёртыванием плюс ежедневный cron (high/critical проваливает сборку и вызывает письмо). Мы не выбрали osv-scanner, потому что этот сайт не держит репозиторий на GitHub, а его дерево — одиночный npm — «бесплатно, без лишнего бинарника, без зависимости от GitHub» уже обеспечивается pnpm audit. Это стандарт, который мы написали, применённый к нам самим, и это часть доверия к продукту. А если вы хотите просто попробовать один раз, прямо сейчас, без установки, мы также предоставляем браузерный сканер уязвимостей зависимостей (вставьте lock-файл, ничего не покидает страницу).
Читать дальше
- Стек: гигиена CVE в Next.js (судить по работающей версии, машинный мониторинг)
- Глоссарий: CVE · CVSS
- Инцидент: Codecov — отравление цепочки поставок
- Инструменты: сканер зависимостей (только в браузере) · поиск CVE/KEV
FAQ
QЧто делает osv-scanner?
Он читает lock-файлы вашего проекта (package-lock.json / pnpm-lock.yaml и т. д.), затем сверяет разрешённые версии зависимостей с базой Google OSV.dev на предмет известных уязвимостей (CVE). Это не инструмент атаки — он защитно инспектирует ваше собственное основание.
QЧем он отличается от Dependabot?
Dependabot — это функция только для GitHub, которая предполагает, что ваш репозиторий находится там, и открывает PR под подходящие CVE. osv-scanner — это автономный бинарник без зависимости от GitHub: запускайте его локально, в любом CI или по cron. Он подходит для конфигураций без GitHub и многоязычных деревьев.
QРазве npm audit / pnpm audit недостаточно?
Для одиночного npm/pnpm-проекта встроенного audit часто хватает. osv-scanner проявляет себя, когда вы смешиваете npm, PyPI, Go, Rust и т. д. или хотите автономное сканирование без дополнительного инструментария и без зависимости от GitHub. Его источник данных (OSV.dev) тоже бесплатен.