Dependências
pip-audit
O pip-audit analisa dependências Python à procura de pacotes com vulnerabilidades conhecidas. Vem da Python Packaging Authority e funciona com ambientes, ficheiros requirements e ficheiros de projeto. O Python não tem um equivalente do npm audit integrado no pip, pelo que esta é a forma habitual de o obter.
Atualizado a
Como executar o pip-audit
pip install pip-audit
pip-audit # the current environment
pip-audit -r requirements.txt # a requirements file
pip-audit . # a local project
pip-audit --fix --dry-run # show what would be upgraded
pip-audit --fix # upgrade vulnerable packages
pip-audit -s osv # use OSV instead of PyPI
pip-audit -f cyclonedx-json # write a CycloneDX SBOM
Por predefinição, procura os pacotes através da API JSON do PyPI, que se baseia na Python Packaging Advisory Database, e pode usar a OSV em alternativa. Consulte a página do projeto para ver a lista completa de opções.
Tenha cuidado com o que audita
Isto surpreende muita gente. Auditar um ficheiro requirements resolve as suas dependências, e o projeto avisa que
pip-audit -r INPUT é funcionalmente equivalente a pip install -r INPUT. A instalação de pacotes pode executar código, pelo que um pacote malicioso pode ser executado durante a auditoria. A regra do próprio projeto é simples: se não faria
pip install, não faça pip audit.
Isto significa também que a verificação não o pode proteger de um pacote ainda sem aviso de segurança, como um novo typosquat ou um pacote de slopsquatting.
Executar o pip-audit na CI
Existe uma GitHub Action oficial, pypa/gh-action-pip-audit, ou pode executar o comando diretamente. Termina com um código diferente de zero quando encontra uma vulnerabilidade, pelo que um novo aviso de segurança pode fazer falhar um build sem qualquer alteração de código.
- run: pip install -r requirements.txt pip-audit
- run: pip-audit
Audite o mesmo conjunto de dependências que distribui. Requirements com versões exatas e hashes dão-lhe um resultado estável. Para saber como isto se enquadra com outras verificações, consulte onde executar análises SCA.
O que o pip-audit não cobre
- O seu código. Analisa árvores de dependências, não código-fonte. Para isso, consulte SAST vs SCA.
- Bibliotecas nativas. As wheels Python incluem muitas vezes bibliotecas C, e o projeto declara que não deteta vulnerabilidades transitivas em bibliotecas partilhadas que não sejam Python.
- Tudo o resto no build. A sua imagem base, os pacotes de sistema e as actions de CI estão fora do alcance da ferramenta.
- Novos pacotes maliciosos. Faz a correspondência com avisos de segurança conhecidos.
- O build que foi distribuído. A resolução em Python varia com o ambiente, pelo que uma auditoria noutra máquina pode ver versões diferentes das da versão lançada. Sem um lockfile, a ordem de resolução também pode variar.
pip-audit vs outros scanners de Python
| Ferramenta | Indicada para | Nota |
|---|---|---|
| pip-audit | Dependências Python, gratuitamente | Apenas Python |
| Trivy, Grype | Pacotes Python dentro de uma imagem de contentor | Cobrem também os pacotes do sistema operativo |
| Ferramentas comerciais de SCA | Políticas e fluxos de trabalho em muitas linguagens e equipas | Consulte as melhores ferramentas de SCA |
pip-audit e CRACI
O pip-audit é uma verificação sensata nos pull requests. O CRACI atua do outro lado: como seu runner de GitHub Actions, regista cada pacote que um job obteve do PyPI e de qualquer outra fonte, a qualquer profundidade da árvore, numa SBOM do build que produziu a versão. Depois, continua a verificar essa SBOM à medida que são publicadas novas vulnerabilidades, para que saiba se a versão do ano passado é afetada. Consulte SBOM geradas durante o build e geração de SBOM durante o build.
pip-audit: perguntas frequentes
O que é o pip-audit?
Uma ferramenta da Python Packaging Authority que analisa ambientes Python, ficheiros requirements e projetos à procura de pacotes com vulnerabilidades conhecidas.
Existe um npm audit para Python?
O pip-audit é o equivalente mais próximo, mas é uma ferramenta à parte e não um comando do pip, pelo que tem de o instalar.
Como corrigir as vulnerabilidades encontradas pelo pip-audit?
Execute pip-audit --fix para atualizar os pacotes vulneráveis, ou primeiro --fix --dry-run para ver o que mudaria. Depois, execute os seus testes e atualize os seus requirements fixados.
É seguro executar o pip-audit em código não fiável?
Não. Auditar um ficheiro requirements é funcionalmente equivalente a instalá-lo, e a instalação pode executar código. Se não instalaria um pacote, não o audite.
O pip-audit consegue gerar uma SBOM?
Sim. Pode escrever CycloneDX em JSON ou XML. A SBOM descreve as dependências Python que resolveu, não o resto do seu build.
Que base de dados de vulnerabilidades usa o pip-audit?
Por predefinição, a API JSON do PyPI, que se baseia na Python Packaging Advisory Database. Também pode usar a OSV.
Veja o que o seu build Python trouxe
Execute um workflow de GitHub Actions no CRACI e obtenha uma SBOM de cada pacote que o job efetivamente obteve.
Marcar demo