O CVE Lite CLI, projeto incubador da OWASP dedicado ao scan de vulnerabilidades em dependências JavaScript e TypeScript, tornou-se numa ferramenta de referência para programadores que precisam de verificar lockfiles antes de publicar código. A ferramenta lê ficheiros de lock localmente, consulta a base de dados OSV e produz comandos de correção prontos a executar — sem conta, sem nuvem e sem custo.

Pontos-chave

O scanner suporta npm, pnpm, Yarn e Bun a partir de um único binário. Lê o lockfile do projeto na máquina do programador, cruza os pacotes com a base de dados OSV e devolve um plano de remediação com comandos npm install, pnpm add, yarn add ou bun add adequados ao gestor de pacotes detectado. Nenhum código-fonte sai do ambiente local.

A diferença central face a outras ferramentas está na distinção entre dependências diretas e transitivas. O CVE Lite CLI identifica se uma vulnerabilidade reside num pacote instalado diretamente ou enterrada três níveis abaixo na cadeia de dependências. Para casos transitivos em npm, recomenda npm update do pacote-pai quando a versão atual pode resolver um filho sem vulnerabilidade conhecida, ou indica quando a própria versão do pai precisa de atualização.

Scan no terminal, não no pipeline

A maioria das ferramentas de segurança está desenhada para pipelines, não para pessoas. O Dependabot abre pull requests que se resolvem eventualmente. Scanners em CI bloqueiam merges horas depois. Dashboards de segurança apresentam listas de identificadores CVE sem caminho claro para resolução. Quando o programador chega ao resultado da análise, o código já foi revisto e aguarda publicação.

O ciclo de feedback é lento demais para ser útil e ruidoso demais para ser confiável. Programadores aprendem a ignorá-lo. Existe ainda um problema mais fundamental: as ferramentas dizem o que está vulnerável, mas raramente dizem o que fazer. O resultado é um fosso entre detecção e remediação que as equipas de segurança tapam com triagem manual.

O CVE Lite CLI no GitHub propõe um modelo diferente: o scan pertence ao terminal do programador, não ao fim de um pipeline. O projeto descreve a sua filosofia numa frase direta — a maioria das ferramentas diz o que está errado, esta diz o que executar.

Análise de reachability e modo automático

Para reduzir ruído, a ferramenta oferece análise estática opcional com a flag --usage. Esta funcionalidade verifica se os pacotes vulneráveis são efetivamente importados no código-fonte. A flag --only-used filtra resultados para mostrar apenas vulnerabilidades em pacotes com import ativo. O projeto mantém esta funcionalidade como opt-in por design: scan de lockfile é quase instantâneo, enquanto análise estática em milhares de ficheiros consome mais tempo.

O modo --fix aplica correções validadas em dependências diretas e reexecuta o scan automaticamente. Usa o gestor de pacotes detectado, escolhe a versão não-vulnerável mais baixa conhecida e não aplica overrides transitivos nem garante compatibilidade da aplicação. O programador mantém controlo sobre as alterações.

Um relatório HTML autónomo, gerado com --report, produz um dashboard com cartões de severidade, tabela de findings pesquisável e comandos de correção prontos a copiar. Para ambientes empresariais e redes restritas, a sincronização prévia da base de dados de advisories permite scans completamente offline — cerca de 217 mil registros em menos de nove segundos.

Comparação com ferramentas existentes

A equipa publica uma tabela comparativa com npm audit, OSV-Scanner, Snyk CLI e Socket CLI. O CVE Lite CLI destaca-se em três áreas: não requer conta, oferece comandos de correção prontos a executar e inclui orientação de atualização de pacotes-pai para dependências transitivas. Snyk e Socket exigem registro e têm planos pagos. O npm audit não suporta pnpm, Yarn nem Bun de forma nativa.

A orientação transitiva de pacotes-pai é uma diferença decisiva. A ferramenta evita recomendar instalações diretas para pacotes que só existem de forma transitiva. Em lockfiles npm, consegue identificar quando npm update do pacote-pai chega para re-resolver um filho sem vulnerabilidade conhecida dentro do intervalo atual, e quando o pacote-pai precisa de uma atualização de versão. Esta capacidade de analisar cadeias de dependências é crítica num cenário onde pacotes maliciosos exploram relações transitivas para escapar à detecção.

Projeto OWASP com validação real

A OWASP reconheceu o CVE Lite CLI como projeto incubador após revisão por pares. O estatuto implica governação comunitária, desenvolvimento transparente e neutralidade face a fornecedores. O projeto ocupa um nicho específico no ecossistema OWASP: scan local de lockfiles para JavaScript e TypeScript, com foco em remediação. Complementa ferramentas mais amplas como OWASP Dependency-Check, dep-scan e Dependency-Track, sem as substituir.

A validação decorreu contra projetos reais de código aberto. OWASP Juice Shop, uma aplicação deliberadamente vulnerável, serviu para confirmar detecção de problemas conhecidos. NestJS, um framework Node.js amplamente utilizado, permitiu testar sequências de remediação transitiva. Analog, um monorepo Angular em pnpm v9 com mais de 3.300 pacotes, revelou vulnerabilidades de toolchain inesperadas. Estes casos estão documentados com scans registados antes e depois de aplicar comandos de correção.

As releases são assinadas com GPG via tags Git anotadas e com Sigstore Artifact Attestations no tarball de build, fornecendo proveniência de construção equivalente a SLSA Nível 2. O pacote npm carrega uma assinatura ECDSA independente do registo. A pegada de dependências em runtime é de quatro pacotes — yaml, yarn-lockfile, better-sqlite3 e fflate — mantida intencionalmente mínima para uma ferramenta de segurança.

O que fazer agora

Programadores JavaScript e TypeScript devem instalar a ferramenta com npm install -g cve-lite-cli e executar cve-lite . antes de abrir um pull request. A flag --fail-on high integra-se em CI para bloquear builds com vulnerabilidades críticas. A flag --fix aplica correções validadas e reanalisa automaticamente. Para equipas em redes restritas, a sincronização prévia da base de dados de advisories permite scans sem qualquer chamada de rede em runtime.