NPM Adota Publicação em Etapas Para Conter Pacotes Maliciosos
Olá HaWkers, o NPM anunciou uma mudança significativa em como novos pacotes são publicados no registro. A partir de agora, pacotes passarão por um sistema de publicação gradual, com verificações em múltiplas etapas antes de ficarem totalmente disponíveis.
Essa mudança vem em resposta ao aumento de ataques à cadeia de suprimentos que afetaram o ecossistema JavaScript nos últimos anos. Você já verificou se todas as suas dependências são seguras?
O Problema: Supply Chain Attacks
Ataques à cadeia de suprimentos se tornaram uma das maiores ameaças ao ecossistema JavaScript:
Incidentes recentes notáveis:
- Pacotes typosquatting imitando bibliotecas populares
- Contas de mantenedores comprometidas
- Código malicioso em atualizações de pacotes legítimos
- Dependências transitivas infectadas
Estatísticas preocupantes:
| Ano | Pacotes maliciosos detectados | Aumento |
|---|---|---|
| 2023 | 1,200 | - |
| 2024 | 2,800 | +133% |
| 2025 | 5,500 | +96% |
🚨 Alerta: A maioria dos pacotes maliciosos é detectada apenas depois de já ter sido instalada milhares de vezes.
O Novo Sistema de Publicação
O NPM implementará um processo de publicação em etapas:
Etapa 1: Quarentena Inicial (0-24h)
Novos pacotes entram em quarentena imediata:
O que acontece:
- Pacote é publicado mas não aparece em buscas
- Análise estática automatizada do código
- Verificação de padrões maliciosos conhecidos
- Scan de dependências recursivo
# Comportamento para publishers
npm publish my-package
# Saída:
# ✓ Package uploaded successfully
# ⏳ Entering quarantine period (24h)
# ℹ️ Package will be searchable after review
# ℹ️ Direct install via URL available immediatelyEtapa 2: Análise Automatizada (24-48h)
Sistemas de IA analisam o pacote:
Verificações realizadas:
- Comportamento do código em sandbox
- Comunicações de rede suspeitas
- Acesso a arquivos sensíveis
- Padrões de ofuscação de código
- Comparação com código fonte original (se OSS)
Etapa 3: Disponibilidade Gradual (48h+)
Após passar nas verificações:
Liberação progressiva:
- Dia 1-2: Disponível para instalação direta
- Dia 3-5: Aparece em buscas com aviso "novo"
- Dia 6-14: Monitoramento ativo de comportamento
- Dia 15+: Status "verificado" se não houver problemas

Impacto Para Desenvolvedores
Publishers de Pacotes
Se você mantém pacotes no NPM:
Mudanças no workflow:
// package.json - Novas opções
{
"name": "my-package",
"version": "1.0.0",
"publishConfig": {
// Solicitar revisão acelerada
"expeditedReview": true,
// Vincular ao repositório verificado
"repository": "https://github.com/user/repo",
// Fornecer provas de identidade
"provenance": true
}
}Práticas recomendadas:
- Vincule seu pacote ao repositório GitHub
- Ative provenance para builds verificáveis
- Mantenha histórico de publicações consistente
- Use 2FA em sua conta NPM
Consumidores de Pacotes
Para quem instala dependências:
Novas flags disponíveis:
# Instalar apenas pacotes verificados
npm install --verified-only
# Ver status de verificação
npm info lodash --security
# Auditoria com novas métricas
npm audit --include-quarantine
Sistema de Verificação de Publishers
O NPM também introduz um sistema de reputação:
Níveis de Confiança
// Níveis de publisher
const publisherTrust = {
new: {
level: 0,
restrictions: 'Quarentena completa (48h)',
packagesPublished: '0-5'
},
established: {
level: 1,
restrictions: 'Quarentena reduzida (12h)',
packagesPublished: '6-50',
accountAge: '> 6 meses'
},
trusted: {
level: 2,
restrictions: 'Análise automatizada apenas',
packagesPublished: '> 50',
accountAge: '> 2 anos',
verified2FA: true
},
verified: {
level: 3,
restrictions: 'Publicação instantânea',
requirements: [
'Organização verificada',
'Auditoria de segurança aprovada',
'Contrato com NPM'
]
}
};Organizações Verificadas
Empresas podem solicitar status verificado:
Benefícios:
- Publicação instantânea
- Badge de verificação
- Suporte prioritário
- Alertas de segurança antecipados
Requisitos:
- Auditoria de segurança inicial
- Políticas de publicação documentadas
- Rotação de credenciais regular
- Resposta a incidentes definida
Proteção Contra Typosquatting
O NPM também combate pacotes com nomes similares:
Detecção Automática
// Sistema de detecção de typosquatting
const typosquatDetection = {
// Verifica similaridade com pacotes populares
checkSimilarity: (newPackage, popularPackages) => {
// Distância de Levenshtein
// Análise fonética
// Padrões de digitação comum
},
// Exemplos bloqueados automaticamente
blockedPatterns: [
'lodash' -> 'l0dash', 'lodsh', 'loadash',
'express' -> 'expres', 'expresss', 'exprees',
'react' -> 'reakt', 'raect', 'reactt'
],
// Ação quando detectado
onDetection: 'quarantine_extended' // 7 dias
};Reserva de Nomes Similares
Pacotes populares podem reservar variações:
# Proprietários de pacotes populares
npm reserve-names lodash --variations
# Reserva automaticamente:
# - lodash (original)
# - l0dash
# - lodsh
# - loadash
# - lodash-js
# etc.
Ferramentas de Auditoria Aprimoradas
Novas ferramentas para verificar dependências:
NPM Audit Expandido
# Auditoria completa com novas métricas
npm audit --full
# Saída inclui:
# - Vulnerabilidades conhecidas (padrão)
# - Status de quarentena de dependências
# - Histórico de publisher
# - Análise de comportamento
# - Score de risco agregadoIntegração com CI/CD
# GitHub Actions exemplo
name: Security Check
on: [push, pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: NPM Audit
run: |
npm audit --audit-level=moderate
npm audit --quarantine-check
npm audit --publisher-trust
- name: Block if quarantined deps
run: npm ci --verified-only
Cronograma de Implementação
O NPM implementará as mudanças gradualmente:
Fases de rollout:
| Fase | Data | Mudança |
|---|---|---|
| 1 | Janeiro 2026 | Quarentena para novos publishers |
| 2 | Março 2026 | Sistema de reputação |
| 3 | Junho 2026 | Quarentena para todos os pacotes novos |
| 4 | Setembro 2026 | Verificação obrigatória opcional |
| 5 | 2027 | Full enforcement |
Críticas e Preocupações
A comunidade tem reações mistas:
Preocupações levantadas:
- Atraso na publicação de patches urgentes
- Complexidade adicional para mantenedores
- Possíveis falsos positivos
- Custo para pequenos projetos
Respostas do NPM:
- Canal de emergência para patches críticos
- Sistema de reputação reduz atrasos
- ML treinado para minimizar falsos positivos
- Gratuito para projetos open source
O Que Fazer Agora
Como desenvolvedor, prepare-se:
Ações recomendadas:
- Ative 2FA na sua conta NPM
- Vincule pacotes a repositórios GitHub
- Revise suas dependências com
npm audit - Considere usar lockfiles estritos
- Implemente verificação em CI/CD
Conclusão
A publicação em etapas do NPM é uma resposta necessária ao crescimento de ataques à cadeia de suprimentos. Embora adicione fricção ao processo de publicação, os benefícios de segurança superam os inconvenientes.
Para o ecossistema JavaScript como um todo, isso representa um amadurecimento importante na forma como tratamos segurança de dependências.
Se você quer aprender mais sobre segurança em JavaScript, recomendo que dê uma olhada em outro artigo: Falha Grave no Node.js Permitia Ataques de Negação de Serviço onde você vai descobrir como manter seus servidores seguros.

