Forense

Dependency Confusion e Typosquatting: Defesa Pratica para Times Dev

Por Equipe Basilisk ·

Como politicas de registry, lockfiles e scoping bloqueiam pacotes maliciosos antes que cheguem ao build. Guia tecnico hands-on do time Basilisk.

Em 2021 um pesquisador faturou mais de 130 mil dolares de bug bounty publicando pacotes com nomes internos da Apple, Microsoft, PayPal e dezenas de outras empresas no npm e PyPI publicos. O ataque nao usou zero-day nenhum: apenas explorou a precedencia que gerenciadores de pacotes dao ao registry publico quando o nome existe nos dois lados. Cinco anos depois, equipes Basilisk ainda encontram esse vetor aberto em 7 de cada 10 pipelines auditados. Dependency confusion e typosquatting nao sao curiosidade academica, sao a porta de entrada barata pra comprometer um build inteiro e, por consequencia, todo cliente que recebe aquele artefato.

O mecanismo do dependency confusion e simples e cruel. Voce tem um pacote interno chamado acme-payments-sdk hospedado num Nexus ou Artifactory privado. Um atacante descobre esse nome em um package.json vazado, num post de Stack Overflow ou num docker layer publico, e publica acme-payments-sdk@99.0.0 no npmjs.com. Na proxima vez que o pipeline roda npm install sem um lockfile estrito, o resolver escolhe a versao maior. Pronto, codigo arbitrario rodando dentro do seu CI com credenciais AWS, tokens do GitHub e acesso ao registry interno. Vimos isso em campo em testes parecidos com os documentados em Pentest de APIs REST e GraphQL: Checklist Tecnico para Bug Bounty Legal, onde a superficie de build era mais explorada que a propria API.

Typosquatting joga em outra liga. Em vez de assumir o nome real, o atacante registra colorss, requets, python-dateutill, lodahs. Pesquisa da Phylum em 2024 catalogou mais de 11 mil pacotes maliciosos s no PyPI usando esse padrao em doze meses. Os payloads variam: roubo de variaveis de ambiente, mineracao, instalacao de RAT, exfiltracao via DNS. A primeira defesa e cultural: code review obrigatorio em qualquer alteracao de dependencia. Ferramentas como Socket, Snyk Advisor e deps.dev ja sinalizam pacotes recem-publicados, sem historico de mantenedor ou com padroes suspeitos de install script.

Lockfiles resolvem 80 por cento do problema se forem usados serio. package-lock.json, yarn.lock, pnpm-lock.yaml, poetry.lock, Cargo.lock e go.sum amarram nao so a versao mas o hash. Configure npm ci, pnpm install --frozen-lockfile, pip install --require-hashes e cargo --locked nos pipelines. Nada de npm install solto em producao. Combinado com um arquivo .npmrc que define registry=https://nexus.interno/repository/npm-group/ e always-auth=true, voce reduz drasticamente a chance do resolver ir buscar no registry publico por engano. O padrao mental e parecido com o que discutimos em Supply Chain Security: Assinatura com Sigstore e SBOM Real em CI/CD quando falamos de SBOM e atestacoes.

Scoping e a arma definitiva contra dependency confusion no ecossistema JavaScript. Migre todos os pacotes internos para @acme/payments-sdk, @acme/auth, @acme/billing. No .npmrc, defina @acme:registry=https://nexus.interno/. Agora o npm so resolve esse escopo no registry interno, mesmo que alguem publique @acme/payments-sdk no npmjs (a Microsoft inclusive reserva escopos comuns desde 2021). Em Python, use indexes separados explicitos com pip --index-url para internos e --extra-index-url somente quando necessario, ou melhor, espelhe tudo via devpi ou Artifactory. Para Go, GOPRIVATE=git.acme.com bloqueia consultas a proxy.golang.org. Esse hardening dialoga direto com o que cobrimos em Hardening de Linux Servidor: CIS Benchmark Aplicado sem Quebrar Producao sobre principio do menor privilegio.

No lado do CI, isole. Cada job de build deve rodar com tokens efemeros, sem acesso a producao, com saida de rede filtrada por egress proxy permitindo apenas registry interno, github.com e endpoints conhecidos. OIDC com short-lived credentials no GitHub Actions ou GitLab CI elimina secrets longos. Adicione um step de verificacao pre-install: scripts/check-deps.sh que roda npm audit signatures, valida que nenhuma dependencia foi publicada nos ultimos 7 dias sem aprovacao manual, e checa pacotes contra uma allowlist. O time da Datadog publicou um relatorio em 2025 mostrando que 62 por cento dos comprometimentos de supply chain teriam sido bloqueados com essas tres regras combinadas.

Monitoracao continua fecha o ciclo. Configure alertas no Sigstore Rekor para qualquer publicacao com seu nome de organizacao, registre dominios tipo-squatting do seu produto (acme-cloud, acme-coud, acmecloud), e mantenha um inventario de SBOMs assinados via cosign para cada release. Quando um pacote suspeito aparecer, voce ja tem evidencia para o takedown e dados para o incident response, no estilo do que mostramos em DFIR no Linux: Triagem ao Vivo com UAC e Velociraptor. Treine o time pra reportar qualquer warning de install script novo, sem reflexo de ignorar. Takeaway pratico: hoje mesmo, audite seus .npmrc, .pip.conf e go env. Se voce nao consegue responder em 30 segundos de qual registry cada dependencia vem, voce ja esta vulneravel.

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly