
Автоматизированный конвейер анализа безопасности, который выполняет запросы CodeQL в репозиториях GitHub и использует LLM для классификации и фильтрации истинных уязвимостей от ложных срабатываний.
Подробный обзор исследования и мотивации Vulnhalla — в официальном блоге CyberArk Threat Research:
Vulnhalla: Выбирая истинные уязвимости из стога сена CodeQL
Перед началом убедитесь, что у вас есть:
Python 3.10 – 3.13 (рекомендуется Python 3.11 или 3.12)
CodeQL CLI
codeql находится в PATH, или укажите путь в .env (см. Шаг 2)(Необязательно) Токен GitHub API
Ключ API LLM
Вся конфигурация находится в одном файле: .env
git clone https://github.com/cyberark/Vulnhalla
cd Vulnhalla
.env.example в .env:cp .env.example .env # macOS / Linux
Copy-Item .env.example .env # Windows (PowerShell)
.env и заполните свои значения:Пример для 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
# Опционально: настройки журналирования
LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR
LOG_FILE= # Опционально: путь к файлу журнала (например, logs/vulnhalla.log)
LOG_FORMAT=default # default или json
# LOG_VERBOSE_CONSOLE=false # Если true, WARNING/ERROR используют полный формат (timestamp - logger - level - message)
📖 Полную справочную информацию по конфигурации: см. Справочник по конфигурации ниже — все поддерживаемые провайдеры (OpenAI, Azure, Gemini, Bedrock), обязательные/опциональные переменные и подробные примеры.
Windows (PowerShell):
# Показать доступные версии Python
py -0p
# Выберите любую поддерживаемую версию: 3.10 / 3.11 / 3.12 / 3.13
py -3.12 -m pip install --user -U pipx
py -3.12 -m pipx ensurepath
# Закройте и снова откройте терминал (обязательно)
pipx install poetry
poetry --version
macOS / Linux:
# Проверьте версию Python
python3 --version
# Используйте любую поддерживаемую версию: 3.10 / 3.11 / 3.12 / 3.13
python3 -m pip install --user -U pipx
python3 -m pipx ensurepath
# Перезапустите терминал (обязательно)
pipx install poetry
poetry --version
Windows (PowerShell):
# Выберите одну поддерживаемую версию, которая у вас есть: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12 # Принудительно укажите Poetry поддерживаемую версию Python, если у вас установлено несколько версий
poetry install
poetry run vulnhalla-setup
macOS / Linux:
# Выберите одну поддерживаемую версию, которая у вас есть: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12 # Принудительно укажите Poetry поддерживаемую версию Python, если у вас установлено несколько версий
poetry install
poetry run vulnhalla-setup
# Анализ конкретного репозитория, например:
poetry run vulnhalla redis/redis
# Повторная загрузка, даже если база данных уже существует
poetry run vulnhalla redis/redis --force
# Показать справку
poetry run vulnhalla --help
Это автоматически:
output/results/Если у вас уже есть база данных CodeQL на диске (например, созданная вручную или из предыдущего запуска), вы можете пропустить этап получения с GitHub, используя флаг --local / -l:
Windows (PowerShell):
poetry run vulnhalla --local C:\path\to\my-codeql-db
macOS / Linux:
poetry run vulnhalla --local /path/to/my-codeql-db
Примечание: Флаг
--localожидает каталог базы данных CodeQL, а не папку с исходным кодом. Убедитесь, что в папке есть файлcodeql-database.yml.
# Открыть интерфейс для просмотра существующих результатов (без запуска анализа)
poetry run vulnhalla-ui
# Проверить конфигурацию: CodeQL, LLM, журналирование (без запуска анализа)
poetry run vulnhalla-validate
# Список проанализированных репозиториев и количество проблем в них
poetry run vulnhalla-list
# Запустить пример конвейера (анализирует videolan/vlc и redis/redis)
poetry run vulnhalla-example
Vulnhalla включает полнофункциональный пользовательский интерфейс для просмотра и изучения результатов анализа.
poetry run vulnhalla-ui
Интерфейс отображает две панели в верхней части и панель управления внизу:
Верхняя часть (рядом, с изменяемыми размерами):
Левая панель (Список проблем):
Правая панель (Детали):
Нижняя панель управления:
↑/↓ - Навигация по списку проблем (построчно)Tab / Shift+Tab - Переключение фокуса между панелямиEnter - Показать детали выбранной проблемы/ - Фокус на поле поиска (в левой панели)Esc - Очистить поиск и вернуть фокус на таблицу проблемr - Перезагрузить результаты с диска[ / ] - Изменить размер левой/правой панели (настройка разделителя)q - Выйти из приложения