
Framework de detecção de vulnerabilidades pela equipe REsearch da Binarly
O VulHunt é uma estrutura de caça a vulnerabilidades desenvolvida pela equipa de investigação da Binarly. Foi concebido para ajudar investigadores e profissionais de segurança a identificar vulnerabilidades em binários de software e firmware UEFI. O VulHunt é construído sobre o Sistema de Análise e Inspeção Binária (BIAS) da Binarly, que fornece um ambiente poderoso e flexível para analisar e compreender binários. O VulHunt integra-se com as capacidades da Plataforma de Transparência Binarly (BTP) para permitir gestão de vulnerabilidades, caça e triagem em grande escala.
O VulHunt Community Edition é uma versão gratuita e de código aberto do motor VulHunt dentro da BTP, concebida para facilitar rulepacks e integrações desenvolvidos pela comunidade.
cargo install cargo-make
cargo make --profile <development|release> build
Com suporte para Binary Ninja:
cargo make --profile <development|release> build --features=bndb
cargo make --profile <development|release> install
Com suporte para Binary Ninja:
cargo make --profile <development|release> install --features=bndb
git submodule update --init
Instale o LuaJIT com os patches necessários:
git clone https://github.com/LuaJIT/LuaJIT.git -b v2.1
cd LuaJIT
git apply /path/to/vulhunt-ce/patches/luajit-vulhunt.patch
Para macOS:
export MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion)
Para macOS e Linux:
make BUILDMODE='static'
export LUA_LIB=/path/to/LuaJIT/src/
export LUA_LIB_NAME=luajit
export LUA_LINK=static
Para Windows:
cd src
msvcbuild.bat BUILDMODE='static'
set LUA_LIB=C:\path\to\LuaJIT\src\
set LUA_LIB_NAME=lua51
set LUA_LINK=static
cargo build --release
Com suporte para Binary Ninja:
cargo build --release --features=bndb
Pré-requisitos:
cargo install cargo-make
Compilar pacotes para a plataforma atual:
cargo make prepare-package --features=...
vulhunt-ce scan <INPUT> -o <OUTPUT> -d <BIAS_DATA> -r <RULES> [OPTIONS]
Opções:
<INPUT>: Caminho para o binário, arquivo BA2 ou ficheiro BNDB a analisar-o, --output <OUTPUT>: Caminho para escrever o JSON de saída-d, --data <BIAS_DATA>: Diretório que contém dados auxiliares (especificações de processadores, etc.). Também pode ser definido através da variável de ambiente BIAS_DATA-r, --rules <RULES>: Diretório que contém regras VulHunt. Também pode ser definido através da variável de ambiente BIAS_VULHUNT_RULES-m, --modules <MODULES>: Diretório que contém módulos VulHunt (opcional). Também pode ser definido através da variável de ambiente BIAS_VULHUNT_MODULES--loader <LOADER>: Configurar o loader a utilizar (padrão: component). Loaders disponíveis:
component: Analisar ficheiros binários individuaisba2: Analisar arquivos BA2 (Binarly Archive 2) que contêm múltiplos componentesbndb: Analisar bases de dados Binary Ninja (requer --features=bndb no momento da compilação)--pretty: Formatar a saída para leitura humana e apresentar problemas no stdout--stream: Formatar a saída como um fluxo de mensagens JSONL--compress: Comprimir o fluxo JSONL de saída com ZstandardExemplo:
vulhunt-ce scan lib.so -o results.json -d /path/to/bias-data -r /path/to/rules --pretty
vulhunt-ce scan firmware.ba2 --loader ba2 -o results.json -d /path/to/bias-data -r /path/to/rules --pretty
vulhunt-ce scan project.bndb --loader bndb -o results.json -d /path/to/bias-data -r /path/to/rules --pretty
O VulHunt pode ser executado como um servidor MCP (Model Context Protocol) para integração com assistentes de IA. Por padrão, inicia um servidor HTTP de streaming com transporte SSE (Server-Sent Events) em http://127.0.0.1:8080:
vulhunt-ce mcp -d <BIAS_DATA> [OPTIONS]
Opções:
-d, --data <BIAS_DATA>: Diretório que contém dados auxiliares (obrigatório). Também pode ser definido através da variável de ambiente BIAS_DATA-m, --modules <MODULES>: Diretório que contém módulos VulHunt (opcional). Também pode ser definido através da variável de ambiente BIAS_VULHUNT_MODULES--stdio: Utilizar transporte stdio em vez de HTTP--host <HOST>: Endereço do host a vincular (padrão: 127.0.0.1)--port <PORT>: Porta para escutar (padrão: 8080)Listar componentes num arquivo BA2:
vulhunt-ce ba2 list-components <INPUT>
Extrair um componente de um arquivo BA2:
vulhunt-ce ba2 extract-component <INPUT> -o <OUTPUT> --component-id <UUID>
Opções:
<INPUT>: Caminho para o arquivo BA2-o, --output <OUTPUT>: Caminho de saída para o componente extraído--component-id <UUID>: UUID do componente a extrairInteraja com a Plataforma de Transparência Binarly (BTP). Todos os comandos requerem autenticação:
Opções comuns:
-u, --username <USERNAME>: Nome de utilizador BTP (ou variável de ambiente BTP_USERNAME)-p, --password <PASSWORD>: Palavra-passe BTP (ou variável de ambiente BTP_PASSWORD)-s, --instance-slug <SLUG>: Slug da instância, por exemplo, your-org.prod (ou variável de ambiente BTP_INSTANCE_SLUG)Comandos disponíveis:
vulhunt-ce btp push-rules <INPUTS> -r <REPOSITORY> [-t <TAG>] [--name <NAME>] [--platform <posix|uefi>] [--modules <DIR>] [--deploy-to-product <ULID> | --deploy-to-org <ULID>]
vulhunt-ce btp list-products
vulhunt-ce btp create-product --name <NAME> [--description]
vulhunt-ce btp upload <FILE> --product-id <ULID> --name <NAME> --version <VERSION> [--scan]
vulhunt-ce btp list-images --product-id <ULID>
vulhunt-ce btp list-scans --product-id <ULID> --image-id <ULID>
vulhunt-ce btp create-scan --product-id <ULID> --image-id <ULID>
vulhunt-ce btp get-scan --product-id <ULID> --image-id <ULID> --scan-id <ULID>
vulhunt-ce btp get-findings --product-id <ULID> --image-id <ULID>
vulhunt-ce btp download-ba2 --product-id <ULID> --image-id <ULID> [--scan-id <ULID>] [-o <OUTPUT>]
Este projeto está licenciado sob a GNU General Public License v3.0 - consulte o ficheiro LICENSE para mais detalhes.
Copyright (c) 2026 Binarly Inc. e programadores do VulHunt.