Pinning de dependências
O que é Pinning de dependências?
Pinning de dependênciasPrática de declarar as dependências de software em versões exatas, frequentemente acompanhadas de hashes criptográficos, para que as builds consumam sempre os mesmos artefactos e resistam à manipulação da cadeia de fornecimento.
O pinning de dependências substitui intervalos amplos ("^1.0.0") por versões exatas e, idealmente, digests criptográficos num lockfile (package-lock.json, poetry.lock, Pipfile.lock, Gemfile.lock, go.sum, Cargo.lock). As builds tornam-se reprodutíveis e resistentes a atualizações silenciosas, dependency confusion, typosquatting e versões comprometidas. A prática moderna também fixa as GitHub Actions e outros plugins de CI a SHAs de commit em vez de tags mutáveis. O pinning deve ser combinado com monitorização ativa de vulnerabilidades (SCA, Dependabot, Renovate) para que os patches continuem a chegar, sob pena de as aplicações ficarem desatualizadas. O hash pinning é um controlo-chave referenciado por SLSA, NIST SSDF, OWASP e iniciativas de builds reprodutíveis.
● Exemplos
- 01
Fixar todas as GitHub Actions de terceiros a SHAs de commit em vez de tags como v3.
- 02
Utilizar pip --require-hashes com um requirements.txt totalmente hash-eado em CI.
● Perguntas frequentes
O que é Pinning de dependências?
Prática de declarar as dependências de software em versões exatas, frequentemente acompanhadas de hashes criptográficos, para que as builds consumam sempre os mesmos artefactos e resistam à manipulação da cadeia de fornecimento. Pertence à categoria Segurança de aplicações da cibersegurança.
O que significa Pinning de dependências?
Prática de declarar as dependências de software em versões exatas, frequentemente acompanhadas de hashes criptográficos, para que as builds consumam sempre os mesmos artefactos e resistam à manipulação da cadeia de fornecimento.
Como funciona Pinning de dependências?
O pinning de dependências substitui intervalos amplos ("^1.0.0") por versões exatas e, idealmente, digests criptográficos num lockfile (package-lock.json, poetry.lock, Pipfile.lock, Gemfile.lock, go.sum, Cargo.lock). As builds tornam-se reprodutíveis e resistentes a atualizações silenciosas, dependency confusion, typosquatting e versões comprometidas. A prática moderna também fixa as GitHub Actions e outros plugins de CI a SHAs de commit em vez de tags mutáveis. O pinning deve ser combinado com monitorização ativa de vulnerabilidades (SCA, Dependabot, Renovate) para que os patches continuem a chegar, sob pena de as aplicações ficarem desatualizadas. O hash pinning é um controlo-chave referenciado por SLSA, NIST SSDF, OWASP e iniciativas de builds reprodutíveis.
Como se defender contra Pinning de dependências?
As defesas contra Pinning de dependências costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Pinning de dependências?
Nomes alternativos comuns: Fixação de versões, Hash pinning.
● Termos relacionados
- appsec№ 1069
Segurança da cadeia de fornecimento de software
Disciplina que protege cada elo da produção de software - código-fonte, dependências, build, assinatura, distribuição e deploy - contra manipulação, código malicioso e perda de integridade.
- appsec№ 304
Ataque de dependency confusion
Ataque de cadeia de fornecimento em que um adversário publica num registo público um pacote malicioso com o mesmo nome de uma dependência interna, levando as ferramentas de build a obter a versão pública.
- appsec№ 971
SCA (Software Composition Analysis)
Análise automatizada dos componentes open source e de terceiros da aplicação para identificar vulnerabilidades conhecidas, problemas de licença e dependências desatualizadas ou arriscadas.
- appsec№ 921
Builds reprodutíveis
Práticas de build que garantem que compilar o mesmo código-fonte com as mesmas instruções produz um artefacto idêntico bit a bit, independentemente de quando ou onde é construído.
- appsec№ 166
Segurança de CI/CD
Conjunto de controlos que protegem os pipelines de integração e entrega contínuas contra comprometimento, injeção de código, fuga de segredos e deploys não autorizados.
- appsec№ 784
Assinatura de pacotes
Aplicação de uma assinatura criptográfica a um pacote de software para que os consumidores verifiquem a identidade do publicador e que o artefacto não foi alterado após a publicação.