
Pipeline automatizzata di analisi della sicurezza che esegue query CodeQL sui repository GitHub e utilizza LLM per classificare e filtrare le vulnerabilità reali dai falsi positivi.
Per una panoramica dettagliata della ricerca e della motivazione alla base di Vulnhalla, consulta il post ufficiale del blog CyberArk Threat Research:
Vulnhalla: Picking the True Vulnerabilities from the CodeQL Haystack
Prima di iniziare, assicurati di avere:
Python 3.10 – 3.13 (Python 3.11 o 3.12 raccomandato)
CodeQL CLI
codeql sia nel tuo PATH, oppure imposterai il percorso in .env (vedi Passo 2)(Opzionale) Token API GitHub
Chiave API LLM
Tutta la configurazione è in un unico file: .env
git clone https://github.com/cyberark/Vulnhalla
cd Vulnhalla
.env.example in .env:cp .env.example .env # macOS / Linux
Copy-Item .env.example .env # Windows (PowerShell)
.env e inserisci i tuoi valori:Esempio per OpenAI:
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
# Opzionale: Configurazione logging
LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR
LOG_FILE= # Opzionale: percorso file di log (es. logs/vulnhalla.log)
LOG_FORMAT=default # default o json
# LOG_VERBOSE_CONSOLE=false # Se true, WARNING/ERROR usano formato completo (timestamp - logger - livello - messaggio)
📖 Per il riferimento completo alla configurazione: Vedi Riferimento configurazione qui sotto per tutti i provider supportati (OpenAI, Azure, Gemini, Bedrock), variabili obbligatorie/opzionali ed esempi dettagliati.
Windows (PowerShell):
# Elenca le versioni Python disponibili
py -0p
# Scegli un Python supportato: 3.10 / 3.11 / 3.12 / 3.13
py -3.12 -m pip install --user -U pipx
py -3.12 -m pipx ensurepath
# Chiudi e riapri il terminale (obbligatorio)
pipx install poetry
poetry --version
macOS / Linux:
# Controlla la tua versione Python
python3 --version
# Usa qualsiasi Python supportato: 3.10 / 3.11 / 3.12 / 3.13
python3 -m pip install --user -U pipx
python3 -m pipx ensurepath
# Riavvia il terminale (obbligatorio)
pipx install poetry
poetry --version
Windows (PowerShell):
# Scegli una versione supportata che hai: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12 # Forza Poetry a usare una versione Python supportata se hai più versioni installate
poetry install
poetry run vulnhalla-setup
macOS / Linux:
# Scegli una versione supportata che hai: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12 # Forza Poetry a usare una versione Python supportata se hai più versioni installate
poetry install
poetry run vulnhalla-setup
# Analizza un repository specifico, ad esempio:
poetry run vulnhalla redis/redis
# Scarica di nuovo anche se il database esiste già
poetry run vulnhalla redis/redis --force
# Mostra aiuto
poetry run vulnhalla --help
Questo farà automaticamente:
output/results/Se hai già un database CodeQL su disco (ad esempio creato manualmente o da un'esecuzione precedente), puoi saltare il passaggio di recupero da GitHub usando il flag --local / -l:
Windows (PowerShell):
poetry run vulnhalla --local C:\percorso\al\mio-database-codeql
macOS / Linux:
poetry run vulnhalla --local /percorso/al/mio-database-codeql
Nota: Il flag
--localrichiede una directory di database CodeQL, non una cartella di codice sorgente. Puoi verificare controllando che la cartella contenga un filecodeql-database.yml.
# Aprire l'interfaccia utente per visualizzare i risultati esistenti (senza eseguire l'analisi)
poetry run vulnhalla-ui
# Convalidare la configurazione: CodeQL, LLM, Logging (senza eseguire l'analisi)
poetry run vulnhalla-validate
# Elencare i repository analizzati e i conteggi dei problemi
poetry run vulnhalla-list
# Eseguire la pipeline di esempio (analizza videolan/vlc e redis/redis)
poetry run vulnhalla-example
Vulnhalla include un'interfaccia utente completa per navigare ed esplorare i risultati dell'analisi.
poetry run vulnhalla-ui
L'interfaccia mostra un'area superiore a due pannelli con una barra dei controlli in basso:
Area superiore (affiancata, ridimensionabile):
Pannello sinistro (Elenco problemi):
Pannello destro (Dettagli):
Barra dei controlli in basso: