Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Vulnhalla — Pipeline automatizado de análise de segurança que executa consultas CodeQL em repositórios GitHub e usa LLMs para classificar e filtrar vulnerabilidades verdadeiras de falsos positivos. | Kitploit
Ferramentas/GitHubGitHub/cyberark/vulnhalla
Análise EstáticaAnálise de VulnerabilidadesAnálise de CódigoDevSecOpsAprendizado de MáquinaAprendizado e EducaçãoSegurança de IA
GitHubcyberark/vulnhalla

Vulnhalla

Pipeline automatizado de análise de segurança que executa consultas CodeQL em repositórios GitHub e usa LLMs para classificar e filtrar vulnerabilidades verdadeiras de falsos positivos.

Ver Repositório
2014149há 1 mêsRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Vulnhalla

Análise Automatizada de CodeQL com Classificação por LLM

Vulnhalla

Para uma visão geral detalhada da pesquisa e motivação por trás do Vulnhalla, consulte o artigo oficial no blog de Pesquisa de Ameaças da CyberArk:

Vulnhalla: Selecionando as Vulnerabilidades Reais do Palheiro do CodeQL

O Vulnhalla automatiza todo o pipeline de análise de segurança:

  1. Buscar repositórios de uma determinada linguagem de programação do GitHub
  2. Baixar seus CodeQL databases correspondentes (se disponíveis)
  3. Executar consultas CodeQL nesses databases para detectar problemas de segurança ou qualidade de código
  4. Pós-processar os resultados com um LLM (ChatGPT, Gemini, etc.) para classificar e filtrar problemas

🚀 Início Rápido

Passo 1: Pré-requisitos

Antes de começar, certifique-se de ter:

  • Python 3.10 – 3.13 (Python 3.11 ou 3.12 recomendado)

    • Python 3.14+ não é suportado (esta ferramenta usa grpcio, que não é suportado pelo Python 3.14+)
    • Baixe em python.org
  • CodeQL CLI

    • Baixe em CodeQL CLI releases
    • Certifique-se de que codeql está no seu PATH, ou você definirá o caminho no .env (veja Passo 2)
  • (Opcional) Token da API do GitHub

    • Para limites de taxa mais altos ao baixar databases
    • Obtenha em GitHub Settings > Tokens
  • Chave da API do LLM

    • Credenciais OpenAI, Azure, Gemini ou Bedrock (dependendo do seu provedor)

Passo 2: Configurar Ambiente

Toda a configuração está em um único arquivo: .env

  1. Clone o repositório:
root@kitploit:~
git clone https://github.com/cyberark/Vulnhalla
cd Vulnhalla
  1. Copie .env.example para .env:
root@kitploit:~
cp .env.example .env # macOS / Linux
Copy-Item .env.example .env # Windows (PowerShell)
  1. Edite .env e preencha seus valores:

Exemplo para OpenAI:

root@kitploit:~
CODEQL_PATH=codeql
GITHUB_TOKEN=ghp_your_token_here
PROVIDER=openai
MODEL=gpt-4o
OPENAI_API_KEY=your-api-key-here
LLM_TEMPERATURE=0.2
LLM_TOP_P=0.2

# Opcional: Configuração de Logging
LOG_LEVEL=INFO                  # DEBUG, INFO, WARNING, ERROR
LOG_FILE=                       # Opcional: caminho para arquivo de log (ex: logs/vulnhalla.log)
LOG_FORMAT=default              # default ou json
# LOG_VERBOSE_CONSOLE=false     # Se true, WARNING/ERROR usam formato completo (timestamp - logger - level - message)

📖 Para referência completa de configuração: Veja Referência de Configuração abaixo para todos os provedores suportados (OpenAI, Azure, Gemini, Bedrock), variáveis obrigatórias/opcionais e exemplos detalhados.

Passo 3: Instalar Poetry (Recomendado: pipx)

Windows (PowerShell):

root@kitploit:~
# Listar versões Python disponíveis
py -0p

# Escolha qualquer Python suportado: 3.10 / 3.11 / 3.12 / 3.13
py -3.12 -m pip install --user -U pipx
py -3.12 -m pipx ensurepath
# Feche e reabra o terminal (obrigatório)
pipx install poetry
poetry --version

macOS / Linux:

root@kitploit:~
# Verifique sua versão do Python
python3 --version

# Use qualquer Python suportado: 3.10 / 3.11 / 3.12 / 3.13
python3 -m pip install --user -U pipx
python3 -m pipx ensurepath
# Reinicie o terminal (obrigatório)
pipx install poetry
poetry --version

Passo 4: Instalar Dependências e Configurar

Windows (PowerShell):

root@kitploit:~
# Escolha uma versão suportada que você tenha: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12  # Force o Poetry a usar uma versão Python suportada se você tiver várias versões instaladas
poetry install
poetry run vulnhalla-setup

macOS / Linux:

root@kitploit:~
# Escolha uma versão suportada que você tenha: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12  # Force o Poetry a usar uma versão Python suportada se você tiver várias versões instaladas
poetry install
poetry run vulnhalla-setup

Passo 5: Executar o Pipeline

root@kitploit:~
# Analisar um repositório específico, por exemplo:
poetry run vulnhalla redis/redis

# Baixar novamente mesmo se o database já existir
poetry run vulnhalla redis/redis --force

# Exibir ajuda
poetry run vulnhalla --help

Isso irá automaticamente:

  1. Buscar databases do CodeQL
  2. Executar consultas CodeQL em todos os databases baixados
  3. Analisar resultados com LLM e salvar em output/results/
  4. Abrir a interface para navegar pelos resultados

Usando um Database CodeQL Local

Se você já tem um database CodeQL em disco (ex: criado manualmente ou de uma execução anterior), pode pular a etapa de busca no GitHub usando a flag --local / -l:

Windows (PowerShell):

root@kitploit:~
poetry run vulnhalla --local C:\caminho\para\meu-codeql-db

macOS / Linux:

root@kitploit:~
poetry run vulnhalla --local /caminho/para/meu-codeql-db

Nota: A flag --local espera um diretório de database do CodeQL, não uma pasta de código fonte. Você pode verificar se a pasta contém um arquivo codeql-database.yml.

Comandos Adicionais

root@kitploit:~
# Abrir interface para visualizar resultados existentes (sem executar análise)
poetry run vulnhalla-ui

# Validar configuração: CodeQL, LLM, Logging (sem executar análise)
poetry run vulnhalla-validate

# Listar repositórios analisados e suas contagens de problemas
poetry run vulnhalla-list

# Executar pipeline de exemplo (analisa videolan/vlc e redis/redis)
poetry run vulnhalla-example

🖥️ Interface do Usuário (UI)

O Vulnhalla inclui uma Interface do Usuário completa para navegar e explorar os resultados da análise.

Executando a UI

root@kitploit:~
poetry run vulnhalla-ui

Layout da UI

A UI exibe uma área superior de dois painéis com uma barra de controles na parte inferior:

Área Superior (lado a lado, redimensionável):

  • Painel Esquerdo (Lista de Problemas):

    • DataTable mostrando: ID, Repositório, Nome do Problema, Arquivo, Decisão do LLM, Decisão Manual
    • Contagem de problemas e indicador de ordenação
    • Caixa de busca na parte inferior, atualiza conforme você digita (case-insensitive).
  • Painel Direito (Detalhes):

    • Seção Decisão do LLM: Mostra a classificação do LLM (Verdadeiro Positivo, Falso Positivo, ou Precisa de Mais Dados)
    • Seção Metadados: Nome do problema, Repositório, Arquivo, Linha, Tipo, Nome da função
    • Seção Código:
      • 📌 Contexto Inicial do Código (primeiro trecho de código que o LLM viu)
      • 📥 Código Adicional (código que o LLM solicitou durante a conversa) - mostrado apenas se existir código adicional
      • Linha vulnerável destacada em vermelho
    • Seção Resumo: Resposta/decisão final do LLM
    • Selecionar Decisão Manual: Dropdown na parte inferior para definir veredito manual (Verdadeiro Positivo, Falso Positivo, Incerto, ou Não Definido)

Barra de Controles Inferior:

  • Linguagem: C (única linguagem atualmente suportada)
  • Filtro por decisão do llm dropdown: Todos, Verdadeiro Positivo, Falso Positivo, Precisa de Mais Informação para decidir
  • Botões de ação: Atualizar, Executar Análise
  • Texto de ajuda sobre atalhos de teclado

Atalhos de Teclado

  • ↑/↓ - Navegar na lista de problemas (linha por linha)
  • Tab / Shift+Tab - Alternar foco entre painéis
  • Enter - Mostrar detalhes do problema selecionado
  • / - Focar caixa de busca (no painel esquerdo)
  • Esc - Limpar busca e retornar foco para tabela de problemas
  • r - Recarregar resultados do disco
  • [ / ] - Redimensionar painéis esquerdo/direito (ajustar posição da divisória)
  • q - Sair da aplicação

Funcionalidades Interativas

Ordenação de Colunas

  • Clique em qualquer cabeçalho de coluna para ordenar por essa coluna
  • Ordenação padrão: por Repositório (ascendente), depois por ID (ascendente)

Painéis Redimensionáveis

  • Divisor arrastável entre os painéis Lista de Problemas e Detalhes
  • Mouse: Clique e arraste o divisor para redimensionar
  • Teclado: Use [ para mover o divisor para a esquerda, ] para mover para a direita
  • A posição da divisória é lembrada durante a sessão

📊 Estrutura de Saída

Após executar o pipeline, os resultados são organizados em output/results/<LANG>/<ISSUE_TYPE>/:

root@kitploit:~
output/results/c/Copy_function_using_source_size/
├── 1_raw.json      # Dados originais do problema CodeQL
├── 1_final.json    # Conversa e classificação do LLM
├── 2_raw.json
├── 2_final.json
└── ...

Cada *_final.json contém:

  • Conversa completa do LLM (prompts do sistema, mensagens do usuário, respostas do assistente, chamadas de ferramenta)
  • Código de status final (1337 = vulnerável, 1007 = seguro, 7331/3713 = precisa de mais informações)

Cada *_raw.json contém:

  • Dados originais do problema CodeQL
  • Contexto da função
  • Caminho do database (inclui informações org/repo: output/databases/<LANG>/<ORG>/<REPO>)
  • Localização do problema

🛠 Solução de Problemas

  • CodeQL CLI não encontrado:
    Defina CODEQL_PATH no seu arquivo .env com o caminho completo do executável CodeQL. No Windows: O caminho deve terminar com .cmd (ex: C:\caminho\para\codeql\codeql.cmd).

  • Limites de taxa do GitHub:
    Defina GITHUB_TOKEN no seu arquivo .env (obtenha o token em https://github.com/settings/tokens).

  • Problemas com LLM:
    Verifique suas chaves de API no arquivo .env correspondentes ao provedor selecionado.

  • Erros de importação na UI:
    Certifique-se de estar executando a partir do diretório raiz do projeto, ou use python examples/ui_example.py que gerencia a configuração de caminho.


⚙️ Referência de Configuração

Variáveis de Ambiente

Toda a configuração é gerenciada através de variáveis de ambiente no seu arquivo .env. Aqui está uma referência completa:

Variáveis Obrigatórias

VariávelObrigatória ParaDescrição
CODEQL_PATHTodosCaminho para o executável CodeQL. Padrão é codeql se CodeQL estiver no PATH. Use caminho completo se não estiver no PATH (ex: C:\caminho\para\codeql\codeql.cmd no Windows)
PROVIDERTodosProvedor LLM: openai, azure, gemini, bedrock, anthropic, mistral, groq, openrouter, ollama, etc.
MODELTodosNome do modelo (ex: gpt-4o, gpt-4-turbo, gemini-2.5-flash)

Variáveis Obrigatórias Específicas do Provedor

OpenAI:

VariávelDescrição
OPENAI_API_KEYSua chave de API OpenAI de platform.openai.com

Azure OpenAI:

VariávelDescrição
AZURE_OPENAI_API_KEY ou AZURE_API_KEYSua chave de API Azure OpenAI
AZURE_OPENAI_ENDPOINT ou AZURE_API_BASEURL do endpoint Azure OpenAI (ex: https://seu-recurso.openai.azure.com)
AZURE_OPENAI_API_VERSION ou AZURE_API_VERSIONVersão da API (padrão: 2024-08-01-preview)

Gemini (Google):

VariávelDescrição
GOOGLE_API_KEYSua chave de API Google de Google AI Studio

AWS Bedrock:

VariávelObrigatórioDescrição
AWS_REGION_NAMESimRegião AWS (ex: us-east-1, us-west-2)
AWS_PROFILENão*Nome do perfil AWS para autenticação SSO/arquivo de credenciais
AWS_ACCESS_KEY_IDNão*Chave de acesso AWS (se não estiver usando perfil)
AWS_SECRET_ACCESS_KEYNão*Chave secreta AWS (se não estiver usando perfil)
AWS_SESSION_TOKENNãoToken de sessão para credenciais STS temporárias

* Autenticação: Use AWS_PROFILE ou AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY (+ opcional AWS_SESSION_TOKEN para STS).

Exemplo .env Bedrock (SSO):

root@kitploit:~
PROVIDER=bedrock
MODEL=anthropic.claude-3-5-sonnet-20241022-v2:0
AWS_REGION_NAME=us-east-1
AWS_PROFILE=seu-perfil

⚠️ Pré-requisitos:

  • As credenciais AWS devem estar configuradas (SSO, perfil IAM ou chaves de acesso) com permissões para invocar modelos Bedrock
  • Para usuários SSO: Execute aws sso login --profile seu-perfil antes de usar o Vulnhalla

🔧 Importante - Seleção de Modelo: Ao selecionar um modelo Bedrock, certifique-se de que ele suporta tool calling/function calling (nem todos os modelos Bedrock suportam). Tool calling é uma parte fundamental do fluxo de análise do Vulnhalla, então escolher um modelo compatível faz uma grande diferença na funcionalidade e nos resultados. Modelos compatíveis incluem: Claude 3.x, Mistral ou Cohere Command R.

Variáveis Opcionais

VariávelPadrãoDescrição
GITHUB_TOKEN-Token da API GitHub para limites de taxa mais altos. Obtenha em GitHub Settings > Tokens
GITHUB_API_URLhttps://api.github.comURL da API GitHub. Para GitHub Enterprise, defina a URL da API do seu servidor (ex: https://github.sua-empresa.com/api/v3)
GITHUB_SSL_VERIFYtrueVerificação de certificado SSL. Defina como false para GitHub Enterprise com certificados autoassinados ou de CA interna
LLM_TEMPERATURE0.2Temperatura do LLM (0.0-2.0). Menor = mais determinístico. Recomendado: manter em 0.2
LLM_TOP_P0.2Amostragem top-p do LLM (0.0-1.0). Menor = mais focado. Recomendado: manter em 0.2
LOG_LEVELINFONível de logging: DEBUG, INFO, WARNING ou ERROR. Controla a verbosidade da saída no console
LOG_FILE-Caminho opcional para arquivo de log (ex: logs/vulnhalla.log). Se definido, logs são escritos tanto no console quanto no arquivo. O logging em arquivo usa nível DEBUG para saída detalhada
LOG_FORMATdefaultEstilo de formato de log: default (legível por humanos) ou json (formato JSON estruturado)
LOG_VERBOSE_CONSOLEfalseSe true, WARNING/ERROR/CRITICAL usam formato completo (timestamp - logger - level - message). Padrão: WARNING/ERROR usam formato simples (LEVEL - message), INFO sempre mínimo (message apenas)
THIRD_PARTY_LOG_LEVELERRORNível de log para bibliotecas de terceiros (LiteLLM, urllib3, requests). Opções: , , , . Padrão suprime a maior parte do ruído de terceiros

⚠️ Importante: Não aumente LLM_TEMPERATURE ou LLM_TOP_P a menos que você entenda completamente o impacto. Valores mais baixos mantêm o modelo estável e determinístico, o que é crítico para análise de segurança. Valores mais altos podem fazer o modelo se tornar inconsistente, criativo ou alucinar resultados.

📝 Nota: Para exemplos adicionais de configuração, veja o arquivo .env.example na raiz do projeto.

Validação de Configuração

O Vulnhalla valida sua configuração na inicialização. Se variáveis obrigatórias estiverem ausentes ou inválidas, você verá mensagens de erro claras indicando o que precisa ser corrigido.

Erros comuns de validação:

  • Chave de API ausente para o provedor selecionado
  • Nome de provedor inválido (veja PROVIDER para valores suportados)
  • Endpoint Azure ausente (obrigatório para provedor Azure)
  • Credenciais AWS ou região ausentes (obrigatório para provedor Bedrock)
  • Caminho CodeQL inválido (se CODEQL_PATH estiver definido mas o arquivo não existir)

📝 Códigos de Status

O LLM usa os seguintes códigos de status:

  • 1337: Vulnerabilidade de segurança encontrada (Verdadeiro Positivo)
  • 1007: Código seguro, sem vulnerabilidade (Falso Positivo)
  • 7331: Mais código/informação necessária para validar segurança
  • 3713: Provavelmente não é um problema de segurança, mas mais informação necessária (usado com 7331)

A UI mapeia estes para:

  • 1337 → "Verdadeiro Positivo"
  • 1007 → "Falso Positivo"
  • 7331 ou 3713 → "Precisa de Mais Dados"

🔧 Desenvolvimento

Executando Testes

O projeto inclui infraestrutura básica de testes usando pytest:

root@kitploit:~
# Executar todos os testes
poetry run pytest

# Executar com saída verbosa
poetry run pytest -v

A suíte de testes inclui testes smoke para verificar se a infraestrutura de testes está configurada corretamente.

Verificação de Tipos

O projeto usa mypy para verificação estática de tipos:

root@kitploit:~
poetry run mypy src

A verificação de tipos está configurada em pyproject.toml sob [tool.mypy]. A configuração usa uma linha de base conservadora com substituições por módulo para permitir adoção gradual.

Dependências do Projeto

As dependências são gerenciadas via Poetry em pyproject.toml:

  • requests - Requisições HTTP para API do GitHub
  • pySmartDL - Gerenciador de download inteligente para databases CodeQL
  • litellm - Interface LLM unificada suportando múltiplos provedores
  • python-dotenv - Gerenciamento de variáveis de ambiente
  • PyYAML - Parsing YAML para arquivos de pacotes CodeQL
  • textual - Framework de interface de terminal
  • pytest - Framework de teste (dependência de desenvolvimento)
  • mypy - Verificador de tipos estático (dependência de desenvolvimento)

Consultas CodeQL

As consultas CodeQL estão organizadas em data/queries/<LANG>/:

  • issues/ - Consultas de detecção de problemas de segurança
  • tools/ - Consultas auxiliares (árvores de função, classes, variáveis globais, macros)

Cada diretório contém um arquivo qlpack.yml definindo o pacote CodeQL.


📄 Licença

Copyright (c) 2025 CyberArk Software Ltd. Todos os direitos reservados.

Este repositório está licenciado sob a Licença Apache, Versão 2.0 - veja LICENSE.txt para mais detalhes.


🤝 Contribuindo

Aceitamos contribuições de todos os tipos para este repositório. Para instruções sobre como começar e descrições de nossos fluxos de trabalho de desenvolvimento, consulte nosso guia de contribuição.


Código de Conduta

Por favor, leia e siga nosso Código de Conduta. Estamos comprometidos em fornecer um ambiente acolhedor e inclusivo para todos os contribuidores.


📧 Contato

Sinta-se à vontade para nos contatar através de issues no GitHub se tiver alguma solicitação de funcionalidade ou problema com o projeto.

Baixar ferramenta
DEBUG
INFO
WARNING
ERROR