Executando verificação de segurança...
2

Identificando Pacotes Vulneráveis antes que possuam CVEs.

Fala, pessoal!

Recentemente, durante uma apresentação no estande da OWASP BH no evento BHack (focado em segurança em Belo Horizonte), tive a oportunidade de conhecer o trabalho da equipe da Aikido Security e seu banco de dados de inteligência. O que mais me chamou a atenção foi o enfoque em rastrear vulnerabilidades diretamente "na fonte" (como issues e PRs), frequentemente antes mesmo de receberem um identificador oficial (CVE).

Fiquei pensando: "Será que dá para criar um SCA (Software Composition Analysis) leve, que use essa base para escanear os projetos antes das CVEs serem lançadas?"

E então eu fiz a SCAikido.

A ideia e o desafio técnico

A premissa era simples: pegar o output do Syft (que gera o SBOM) e cruzar com o repositório de Intel da Aikido. Mas logo no começo esbarrei em um problema na forma que estava fazendo a filtragem pelos pacotes, pacotes com o mesmo nome em ecossitemas diferentes porém igualmente vulneráveis.

Eu tinha pacotes em C++ (via Conan) sendo detectados como vulneráveis porque tinham o mesmo nome de Gems do Ruby. O scanner olhava apenas nome e versão.

Para tornar a ferramenta viável, implementei uma lógica de validação de ecossistema em Node.js.

O script agora não compara apenas strings. Ele pega o package_type do SBOM (npm, maven, apk, gem, etc.) e verifica se é compatível com a linguagem da vulnerabilidade reportada no banco de dados.

Resultado: Se o pacote é openssl do ecossistema npm, ele ignora falhas que afetam o openssl de outros frameworks/linguagens.

Como funciona por baixo do capô

  1. Syft: Gera o mapa de dependências.
  2. Node.js Engine: Indexa o banco de dados da Aikido em memória (para performance) e roda a lógica de fuzzy matching e validação de versão.
  3. Bash: Cola tudo isso numa CLI fácil de usar em CI/CD.

O Projeto

O código é 100% Open Source. Quem quiser testar em seus projetos para ver se encontra algo que o npm audit ou outros scanners tradicionais estão deixando passar (por falta de CVE), fica o convite.

Fiquem à vontade para entrar em contato comigo pela rede vizinha.
Estou disponível para conversar e trocar ideias! 😁

Qualquer feedback sobre a lógica de detecção ou sugestões de melhoria são bem-vindas!

Carregando publicação patrocinada...