Сканер уязвимостей, написанный на Go, который использует данные, предоставленные https://osv.dev
<picture>
<source srcset="/docs/images/osv-scanner-full-logo-darkmode.svg" media="(prefers-color-scheme: dark)">
<!-- markdown-link-check-disable-next-line -->
<img src="https://raw.githubusercontent.com/google/osv-scanner/HEAD/docs/images/osv-scanner-full-logo-lightmode.svg">
</picture>
---
[](https://scorecard.dev/viewer/?uri=github.com/google/osv-scanner)
[](https://github.com/google/osv-scanner/actions/workflows/checks.yml)
[](https://codecov.io/gh/google/osv-scanner)
[](https://slsa.dev)
[](https://github.com/google/osv-scanner/releases)
Используйте OSV-Scanner для поиска существующих уязвимостей, затрагивающих зависимости вашего проекта.
OSV-Scanner предоставляет официально поддерживаемый фронтенд для базы данных [OSV](https://osv.dev/) и CLI-интерфейс для [OSV-Scalibr](https://github.com/google/osv-scalibr), который связывает список зависимостей проекта с уязвимостями, которые на них влияют.
OSV-Scanner поддерживает широкий спектр типов проектов, менеджеров пакетов и функций, включая, но не ограничиваясь:
- **Языки:** C/C++, Dart, Elixir, Go, Java, Javascript, PHP, Python, R, Ruby, Rust.
- **Менеджеры пакетов:** npm, pip, yarn, maven, go modules, cargo, gem, composer, nuget и другие.
- **Операционные системы:** Обнаруживает уязвимости в пакетах ОС в системах Linux.
- **Контейнеры:** Сканирует образы контейнеров на наличие уязвимостей в их базовых образах и включённых пакетах.
- **Управляемое исправление:** Предоставляет рекомендации по обновлению версий пакетов на основе таких критериев, как глубина зависимостей, минимальная серьёзность, стратегия исправления и окупаемость.
OSV-Scanner использует расширяемую библиотеку [OSV-Scalibr](https://github.com/google/osv-scalibr) под капотом для обеспечения этой функциональности. Если язык или менеджер пакетов в настоящее время не поддерживается, пожалуйста, оставьте [запрос на добавление функции.](https://github.com/google/osv-scanner/issues)
#### База данных, лежащая в основе
База данных, лежащая в основе, [OSV.dev](https://osv.dev/), имеет ряд преимуществ по сравнению с закрытыми базами данных рекомендаций и сканерами:
- Охватывая большинство экосистем языков с открытым исходным кодом и ОС (включая [Git](https://osv.dev/list?q=&ecosystem=GIT)), она является всеобъемлющей.
- Каждая рекомендация поступает из открытого и авторитетного источника (например, [GitHub Security Advisories](https://github.com/github/advisory-database), [RustSec Advisory Database](https://github.com/rustsec/advisory-db), [уведомления безопасности Ubuntu](https://github.com/canonical/ubuntu-security-notices/tree/main/osv))
- Любой может предложить улучшения к рекомендациям, что приводит к созданию очень качественной базы данных.
- Формат OSV однозначно хранит информацию о затронутых версиях в машиночитаемом формате, который точно сопоставляется со списком пакетов разработчика
Всё вышеперечисленное приводит к точным и применимым на практике уведомлениям об уязвимостях, что сокращает время, необходимое для их устранения. Загляните на [OSV.dev](https://osv.dev/) для получения более подробной информации!
## Базовая установка
Для установки OSV-Scanner, пожалуйста, обратитесь к [разделу установки](https://google.github.io/osv-scanner/installation) нашей документации. Релизы OSV-Scanner можно найти на [странице релизов](https://github.com/google/osv-scanner/releases) репозитория GitHub. Рекомендуемый способ — загрузить предварительно собранный двоичный файл для вашей платформы. В качестве альтернативы вы можете использовать
`go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest` для сборки из исходного кода.
## Ключевые возможности
Для получения дополнительной информации, пожалуйста, прочитайте нашу [подробную документацию](https://google.github.io/osv-scanner), чтобы узнать, как использовать OSV-Scanner. Для получения подробной информации о каждой функции нажмите на их заголовки в этом README.
Обратите внимание: Это инструкции для последней бета-версии OSV-Scanner V2. Если вы используете V1, обратитесь к [README](https://github.com/google/osv-scanner-v1) и [документации](https://google.github.io/osv-scanner-v1/) V1.
### [Сканирование исходного каталога](https://google.github.io/osv-scanner/usage)
```bash
$ osv-scanner scan source -r /path/to/your/dir
```
Эта команда рекурсивно просканирует указанный каталог на наличие любых поддерживаемых файлов пакетов, таких как `package.json`, `go.mod`, `pom.xml` и т.д., и выведет все обнаруженные уязвимости.
OSV-Scanner имеет возможность использовать анализ вызовов, чтобы определить, действительно ли уязвимая функция используется в проекте, что приводит к меньшему количеству ложных срабатываний и применимым на практике предупреждениям.
OSV-Scanner также может обнаруживать вендоренный C/C++ код для сканирования уязвимостей. Подробности см. [здесь](https://google.github.io/osv-scanner/usage/#cc-scanning).
#### Поддерживаемые файлы блокировок
OSV-Scanner поддерживает 11+ языковых экосистем и 19+ типов файлов блокировок. Чтобы проверить, покрыта ли ваша экосистема, пожалуйста, ознакомьтесь с нашей [подробной документацией](https://google.github.io/osv-scanner/supported-languages-and-lockfiles/#supported-lockfiles).
### [Сканирование контейнеров](https://google.github.io/osv-scanner/usage/scan-image)
OSV-Scanner также поддерживает комплексное сканирование образов контейнеров с учётом слоёв для обнаружения уязвимостей в следующих пакетах операционных систем и зависимостях, специфичных для языков.
| Поддержка дистрибутивов | Поддержка языковых артефактов |
| -------------- | -------------------------- |
| Alpine OS | Go |
| Debian | Java |
| Ubuntu | Node |
| | Python |
Подробности о поддержке см. в [полной документации](https://google.github.io/osv-scanner/supported-languages-and-lockfiles/#supported-artifacts).
**Использование**:
```bash
$ osv-scanner scan image my-image-name:tag
```

### [Сканирование лицензий](https://google.github.io/osv-scanner/usage/license-scanning/)
Проверьте лицензии ваших зависимостей, используя данные deps.dev. Для получения сводки:
```bash
osv-scanner --licenses path/to/repository
```
Для проверки по списку разрешённых лицензий (формат SPDX):
```bash
osv-scanner --licenses="MIT,Apache-2.0" path/to/directory
```
### [Автономное сканирование](https://google.github.io/osv-scanner/usage/offline-mode/)
Сканируйте свой проект по локальной базе данных OSV. Сетевое соединение не требуется после первоначальной загрузки базы данных. Базу данных также можно загрузить вручную.
```bash
osv-scanner --offline --download-offline-databases ./path/to/your/dir
```
### [Управляемое исправление](https://google.github.io/osv-scanner/experimental/guided-remediation/) (Экспериментально)
> [!WARNING]
> Управляемое исправление (команда `fix`) может быть рискованным при запуске на ненадёжных проектах. Оно может побудить менеджер пакетов выполнять скрипты или следовать внешним реестрам, указанным в проекте. Пожалуйста, убедитесь, что вы доверяете исходному коду и артефактам, прежде чем продолжить.
OSV-Scanner предоставляет управляемое исправление — функцию, которая предлагает обновления версий пакетов на основе таких критериев, как глубина зависимостей, минимальная серьёзность, стратегия исправления и окупаемость.
В настоящее время мы поддерживаем исправление уязвимостей в следующих файлах:
| Экосистема | Формат файла (тип) | Поддерживаемые стратегии исправления |
| :-------- | :----------------------------- | :--------------------------------------------------------------------------------------------------------------------- |
| npm | `package-lock.json` (файл блокировки) | [`in-place`](https://google.github.io/osv-scanner/experimental/guided-remediation/#in-place-lockfile-changes) |
| npm | `package.json` (манифест) | [`relock`](https://google.github.io/osv-scanner/experimental/guided-remediation/#relock-and-relax-direct-dependencies) |
| Maven | `pom.xml` (манифест) | [`override`](https://google.github.io/osv-scanner/experimental/guided-remediation/#override-dependency-versions) |
Это доступно как неинтерактивная CLI-команда, а также в интерактивном режиме.
#### Пример (для npm)
```bash
$ osv-scanner fix \
--max-depth=3 \
--min-severity=5 \
--ignore-dev \
--strategy=in-place \
-L path/to/package-lock.json
```
#### Интерактивный режим (для npm)
```bash
$ osv-scanner fix \
-M path/to/package.json \
-L path/to/package-lock.json
```
<img src="https://assets.kitploit.com/production/public/readmes/202/c3a58b2f3acf8619375afa1f7ec3ede0349494517a5812c4c09e1638c1b8cdaa.png" alt="Скриншот экрана интерактивных результатов relock с выбранными некоторыми патчами ослабления ограничений">
## Источники данных и конфиденциальность
OSV-Scanner взаимодействует со следующими внешними сервисами во время работы:
### [OSV.dev API](https://osv.dev/)
Основной источник данных об уязвимостях. OSV-Scanner обращается к этому API для проверки пакетов на наличие известных уязвимостей и для идентификации вендоренных C/C++ зависимостей. Отправляемые данные включают имена пакетов, версии, экосистемы и хеши файлов. Используйте [режим `--offline`](https://google.github.io/osv-scanner/usage/offline-mode/), чтобы отключить сетевые запросы и сканировать по локальной базе данных.
### [deps.dev API](https://docs.deps.dev/api/)
Используется для дополнительной информации о пакетах:
- **Разрешение зависимостей**: Строит графы зависимостей для сканирования уязвимостей и их исправления
- **Сканирование образов контейнеров**: Запрашивает метаданные образов контейнеров для обнаружения уязвимостей
- **Сканирование лицензий** (флаг `--licenses`): Получает информацию о лицензиях для пакетов
- **Устаревание пакетов**: Проверяет, являются ли пакеты устаревшими
Отправляемые данные включают имена пакетов, версии и экосистемы. Исходный код не передаётся.
### Реестры пакетов
При использовании собственного реестра для разрешения зависимостей (вместо deps.dev) OSV-Scanner может обращаться к:
| Реестр | URL | Используется для |
| ------------- | ------------------------------ | ------------------------------------ |
| Maven Central | `repo.maven.apache.org/maven2` | Метаданных пакетов Maven и POM-файлов |
| npm Registry | `registry.npmjs.org` | Метаданных пакетов npm |
| PyPI | `pypi.org` | Метаданных пакетов Python |
## Участие в разработке
### Сообщение о проблемах
Если у вас есть что-то похожее на ошибку, пожалуйста, используйте [систему отслеживания проблем GitHub](https://github.com/google/osv-scanner/issues). Прежде чем создавать проблему, пожалуйста, поищите существующие проблемы, чтобы увидеть, не покрыта ли ваша проблема уже.
### Внесение кода в `osv-scanner`
См. [CONTRIBUTING.md](https://github.com/google/osv-scanner/blob/main/CONTRIBUTING.md) для документации о том, как вносить код.
## История звёзд
[](https://www.star-history.com/#google/osv-scanner&Date)