Scanner de vulnerabilidades escrito em Go que usa os dados fornecidos por 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)
Use o OSV-Scanner para encontrar vulnerabilidades existentes que afetam as dependências do seu projeto.
O OSV-Scanner fornece um frontend oficialmente suportado para o [banco de dados OSV](https://osv.dev/) e uma interface CLI para o [OSV-Scalibr](https://github.com/google/osv-scalibr), que conecta a lista de dependências de um projeto às vulnerabilidades que as afetam.
O OSV-Scanner suporta uma ampla variedade de tipos de projeto, gerenciadores de pacotes e recursos, incluindo, mas não se limitando a:
- **Linguagens:** C/C++, Dart, Elixir, Go, Java, Javascript, PHP, Python, R, Ruby, Rust.
- **Gerenciadores de pacotes:** npm, pip, yarn, maven, go modules, cargo, gem, composer, nuget e outros.
- **Sistemas operacionais:** Detecta vulnerabilidades em pacotes de SO em sistemas Linux.
- **Contêineres:** Examina imagens de contêiner em busca de vulnerabilidades em suas imagens base e pacotes incluídos.
- **Remediação guiada:** Fornece recomendações para atualizações de versão de pacotes com base em critérios como profundidade de dependência, severidade mínima, estratégia de correção e retorno sobre o investimento.
O OSV-Scanner usa a biblioteca extensível [OSV-Scalibr](https://github.com/google/osv-scalibr) internamente para fornecer essa funcionalidade. Se uma linguagem ou gerenciador de pacotes não for suportado atualmente, abra uma [solicitação de recurso.](https://github.com/google/osv-scanner/issues)
#### Banco de dados subjacente
O banco de dados subjacente, [OSV.dev](https://osv.dev/), tem vários benefícios em comparação com bancos de dados de avisos e scanners de código fechado:
- Cobrindo a maioria dos ecossistemas de linguagens de código aberto e sistemas operacionais (incluindo [Git](https://osv.dev/list?q=&ecosystem=GIT)), é abrangente.
- Cada aviso vem de uma fonte aberta e autoritativa (ex.: [GitHub Security Advisories](https://github.com/github/advisory-database), [RustSec Advisory Database](https://github.com/rustsec/advisory-db), [avisos de segurança do Ubuntu](https://github.com/canonical/ubuntu-security-notices/tree/main/osv))
- Qualquer pessoa pode sugerir melhorias aos avisos, resultando em um banco de dados de altíssima qualidade.
- O formato OSV armazena de forma inequívoca informações sobre versões afetadas em um formato legível por máquina que mapeia com precisão a lista de pacotes de um desenvolvedor.
Tudo isso resulta em notificações de vulnerabilidade precisas e acionáveis, o que reduz o tempo necessário para resolvê-las. Confira o [OSV.dev](https://osv.dev/) para mais detalhes!
## Instalação básica
Para instalar o OSV-Scanner, consulte a [seção de instalação](https://google.github.io/osv-scanner/installation) da nossa documentação. As versões do OSV-Scanner podem ser encontradas na [página de releases](https://github.com/google/osv-scanner/releases) do repositório do GitHub. O método recomendado é baixar um binário pré-compilado para sua plataforma. Como alternativa, você pode usar
`go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest` para compilar a partir do código-fonte.
## Principais recursos
Para mais informações, leia nossa [documentação detalhada](https://google.github.io/osv-scanner) para aprender como usar o OSV-Scanner. Para informações detalhadas sobre cada recurso, clique nos títulos deste README.
Observação: estas são as instruções para a versão beta mais recente do OSV-Scanner V2. Se você estiver usando a V1, confira o [README](https://github.com/google/osv-scanner-v1) e a [documentação](https://google.github.io/osv-scanner-v1/) da V1.
### [Varredura de um diretório de código-fonte](https://google.github.io/osv-scanner/usage)
```bash
$ osv-scanner scan source -r /path/to/your/dir
```
Este comando fará uma varredura recursiva no diretório especificado em busca de qualquer arquivo de pacote suportado, como `package.json`, `go.mod`, `pom.xml`, etc., e exibirá quaisquer vulnerabilidades encontradas.
O OSV-Scanner tem a opção de usar análise de chamadas para determinar se uma função vulnerável está sendo realmente usada no projeto, resultando em menos falsos positivos e alertas acionáveis.
O OSV-Scanner também pode detectar código C/C++ vendorizado para varredura de vulnerabilidades. Veja [aqui](https://google.github.io/osv-scanner/usage/#cc-scanning) para detalhes.
#### Lockfiles suportados
O OSV-Scanner suporta mais de 11 ecossistemas de linguagem e mais de 19 tipos de lockfile. Para verificar se seu ecossistema é coberto, consulte nossa [documentação detalhada](https://google.github.io/osv-scanner/supported-languages-and-lockfiles/#supported-lockfiles).
### [Varredura de contêineres](https://google.github.io/osv-scanner/usage/scan-image)
O OSV-Scanner também oferece suporte a varredura abrangente e com ciência de camadas para imagens de contêiner, a fim de detectar vulnerabilidades nos seguintes pacotes de sistema operacional e dependências específicas de linguagem.
| Suporte a Distros | Suporte a Artefatos de Linguagem |
| -------------- | -------------------------- |
| Alpine OS | Go |
| Debian | Java |
| Ubuntu | Node |
| | Python |
Consulte a [documentação completa](https://google.github.io/osv-scanner/supported-languages-and-lockfiles/#supported-artifacts) para detalhes sobre o suporte.
**Uso**:
```bash
$ osv-scanner scan image my-image-name:tag
```

### [Varredura de licenças](https://google.github.io/osv-scanner/usage/license-scanning/)
Verifique as licenças das suas dependências usando dados do deps.dev. Para um resumo:
```bash
osv-scanner --licenses path/to/repository
```
Para verificar contra uma lista de licenças permitidas (formato SPDX):
```bash
osv-scanner --licenses="MIT,Apache-2.0" path/to/directory
```
### [Varredura offline](https://google.github.io/osv-scanner/usage/offline-mode/)
Escanear seu projeto contra um banco de dados OSV local. Nenhuma conexão de rede é necessária após o download inicial do banco de dados. O banco de dados também pode ser baixado manualmente.
```bash
osv-scanner --offline --download-offline-databases ./path/to/your/dir
```
### [Remediação guiada](https://google.github.io/osv-scanner/experimental/guided-remediation/) (Experimental)
> [!WARNING]
> A remediação guiada (o comando `fix`) pode ser arriscada quando executada em projetos não confiáveis. Ela pode fazer com que o gerenciador de pacotes execute scripts ou siga registros externos especificados no projeto. Certifique-se de confiar no código-fonte e nos artefatos antes de prosseguir.
O OSV-Scanner oferece remediação guiada, um recurso que sugere atualizações de versão de pacotes com base em critérios como profundidade de dependência, severidade mínima, estratégia de correção e retorno sobre o investimento.
Atualmente, oferecemos suporte à remediação de vulnerabilidades nos seguintes arquivos:
| Ecossistema | Formato do Arquivo (Tipo) | Estratégias de Remediação Suportadas |
| :-------- | :----------------------------- | :--------------------------------------------------------------------------------------------------------------------- |
| npm | `package-lock.json` (lockfile) | [`in-place`](https://google.github.io/osv-scanner/experimental/guided-remediation/#in-place-lockfile-changes) |
| npm | `package.json` (manifest) | [`relock`](https://google.github.io/osv-scanner/experimental/guided-remediation/#relock-and-relax-direct-dependencies) |
| Maven | `pom.xml` (manifest) | [`override`](https://google.github.io/osv-scanner/experimental/guided-remediation/#override-dependency-versions) |
Isso está disponível como um comando CLI headless, bem como um modo interativo.
#### Exemplo (para npm)
```bash
$ osv-scanner fix \
--max-depth=3 \
--min-severity=5 \
--ignore-dev \
--strategy=in-place \
-L path/to/package-lock.json
```
#### Modo interativo (para 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="Captura de tela da tela de resultados do relock interativo com alguns patches de relaxamento selecionados">
## Fontes de dados e privacidade
O OSV-Scanner se comunica com os seguintes serviços externos durante a operação:
### [OSV.dev API](https://osv.dev/)
A principal fonte de dados para informações de vulnerabilidade. O OSV-Scanner consulta esta API para verificar pacotes em busca de vulnerabilidades conhecidas e identificar dependências C/C++ vendorizadas. Os dados enviados incluem nomes de pacotes, versões, ecossistemas e hashes de arquivos. Use o [modo `--offline`](https://google.github.io/osv-scanner/usage/offline-mode/) para desativar solicitações de rede e escanear contra um banco de dados local.
### [deps.dev API](https://docs.deps.dev/api/)
Usada para informações complementares de pacotes:
- **Resolução de dependências**: Resolve grafos de dependência para varredura e remediação de vulnerabilidades
- **Varredura de imagens de contêiner**: Consulta metadados de imagens de contêiner para detecção de vulnerabilidades
- **Varredura de licenças** (flag `--licenses`): Recupera informações de licença dos pacotes
- **Deprecação de pacotes**: Verifica se os pacotes estão obsoletos
Os dados enviados incluem nomes de pacotes, versões e ecossistemas. Nenhum código-fonte é transmitido.
### Registros de pacotes
Ao usar o registro nativo para resolução de dependências (em vez de deps.dev), o OSV-Scanner pode consultar:
| Registro | URL | Usado Para |
| ------------- | ------------------------------ | ------------------------------------ |
| Maven Central | `repo.maven.apache.org/maven2` | Metadados de pacotes Maven e arquivos POM |
| npm Registry | `registry.npmjs.org` | Metadados de pacotes npm |
| PyPI | `pypi.org` | Metadados de pacotes Python |
## Contribua
### Relatar problemas
Se você tiver o que parece ser um bug, use o [sistema de rastreamento de issues do GitHub](https://github.com/google/osv-scanner/issues). Antes de abrir uma issue, pesquise as issues existentes para ver se a sua já está coberta.
### Contribuindo com código para `osv-scanner`
Consulte [CONTRIBUTING.md](https://github.com/google/osv-scanner/blob/main/CONTRIBUTING.md) para obter documentação sobre como contribuir com código.
## Histórico de estrelas
[](https://www.star-history.com/#google/osv-scanner&Date)