
Uma ferramenta de análise de variantes e visualização que examina bases de código em busca de vulnerabilidades semelhantes
![]()
O C0deVari4nt é uma ferramenta de análise e visualização de variantes que inspeciona bases de código em busca de vulnerabilidades semelhantes. Ele utiliza o CodeQL, um mecanismo de análise semântica de código, para consultar o código com base em modelos de consulta CodeQL controlados pelo usuário e passa os resultados para nossa interface de cliente construída com vis.js e React para exploração e visualização adicionais. Isso permite uma análise de variantes rápida e abrangente com base em relatórios de vulnerabilidade anteriores. O recurso de visualização vis.js fornece informações adicionais para desenvolvedores sobre caminhos de código vulneráveis e permite que eles classifiquem efetivamente possíveis variantes.

O incidente Log4Shell em dezembro de 2021 destacou as dificuldades que os desenvolvedores de código aberto enfrentam ao responder a relatórios de vulnerabilidade. Após o patch inicial para CVE-2021-44228, que permitia que invasores remotos não autenticados assumissem o controle de dispositivos executando versões vulneráveis do Log4j 2, a Apache lançou 3 patches adicionais para lidar com vulnerabilidades relacionadas e casos limites não mitigados.
Desenvolvedores de código aberto frequentemente carecem de treinamento em revisão abrangente de código e enfrentam problemas ao identificar variantes de uma vulnerabilidade, levando a patches incompletos. Embora existam suítes de consulta CodeQL para facilitar a análise rápida da base de código, os resultados retornados por essas suítes podem resultar em taxas significativas de falsos positivos. Além disso, essas suítes dependem de consultas predefinidas que não suportam análise de variantes e não são personalizadas para bases de código individuais. Como resultado, projetos de código aberto frequentemente respondem a relatórios de vulnerabilidade de forma fragmentada, perdendo possíveis variantes.
O C0deVari4nt fornece uma plataforma para que desenvolvedores realizem facilmente análises de variantes sem a sobrecarga significativa de escrever suas próprias consultas CodeQL. Isso dá aos desenvolvedores a flexibilidade de personalizar modelos CodeQL fornecendo informações específicas da base de código, como uma determinada origem e sumidouro de uma vulnerabilidade. Os resultados serão visualizados em uma visão de banco de dados gráfico alimentada por vis.js para que os desenvolvedores identifiquem rapidamente possíveis variantes. Assim, os desenvolvedores poderão lidar efetivamente com classes inteiras de bugs a partir de um único relatório de vulnerabilidade.
O C0deVari4nt é construído usando Python, CodeQL, vis.js e React para criar uma aplicação GUI interativa que recebe entrada do usuário e exibe relações entre diferentes caminhos de código vulneráveis.

O C0deVari4nt consiste nos seguintes 2 componentes principais:
Mais detalhes da interface do cliente podem ser vistos abaixo:

dbextractor.py <codeql db zip file> para descompactar o conteúdo do banco de dados codeqlpip install -r requirements.txtuvicorn main:app --reload para iniciar o servidor de desenvolvimento local na porta 8000npm inpm start para iniciar o servidor de desenvolvimento local
strcat sem verificações de limite no argumento de origemstrncpy sem verificações de limite no argumento de origemsnprintf
malloc, calloc ou realloc sem memória suficiente alocada para conter uma instância do tipo do ponteiroisAdditionalTaintStep para transferir contaminações entre 2 funções desconectadasisAdditionalTaintStep para transferir contaminações entre ponteiros que possuem os mesmos valores em tempo de execuçãoA seguir, os resultados do CodeQL para uma consulta com recvfrom como origem, mempool_alloc como etapa de contaminação adicional e memcpy como sumidouro:

Este resultado produz um total de 180 nós em 27 caminhos de código diferentes. Os resultados são representados em uma interface neo4j simples abaixo:

Ao submeter esta consulta através da nossa ferramenta, conseguimos identificar ocorrências duplicadas de cada nó, origem e sumidouro e mesclar as relações dos nós.
Isso resultou em um gráfico significativamente mais limpo com um total de 11 nós únicos enquanto ainda mantinha todos os 27 caminhos de código únicos:

Os resultados podem ser ainda mais categorizados em seus respectivos caminhos através do nosso recurso de rotulagem de caminhos:

