Vulnhuntr

by Protect AI (open source) · GPT, Claude, Ollama, Python

Assistant AI Assistants Open Source v1.x >1 года

AI-агент для статического анализа, автоматически находящий сложные, многошаговые уязвимости удалённой эксплуатации (RCE, SSRF, SQLi, XSS, LFI и др.) в Python-репозиториях. В отличие от классических SAST-сканеров, трассирует путь пользовательского ввода от точки входа до потенциально опасного sink через весь проект, используя LLM (Claude/GPT/Ollama) для пошагового рассуждения о потоке данных. Уже находил реальные 0-day в популярных open-source проектах.

v1.x
current

Установка
# Claude Desktop / Claude Code / OpenCode — Vulnhuntr работает как автономный
# CLI-агент поверх LLM-бэкенда, не как MCP-сервер:
git clone https://github.com/protectai/vulnhuntr
cd vulnhuntr
pipx install .

export ANTHROPIC_API_KEY=sk-...
vulnhuntr -r /path/to/target/repo
показать оригинал переведено ИИ

Логотип Vulnhuntr

Инструмент для выявления удалённо эксплуатируемых уязвимостей с использованием LLM и статического анализа кода.

Первые в мире автономно обнаруженные ИИ уязвимости нулевого дня (0day)

Описание

Vulnhuntr использует возможности LLM для автоматического создания и анализа полных цепочек вызовов кода, начиная с удалённого пользовательского ввода и заканчивая выводом на сервере, для обнаружения сложных, многоэтапных уязвимостей, обходящих механизмы безопасности, которые выходят далеко за рамки возможностей традиционных инструментов статического анализа кода. Подробности, включая вывод Vulnhuntr для всех уязвимостей нулевого дня, можно найти здесь: Блог Protect AI Vulnhuntr

Найденные уязвимости

[!TIP] Нашли уязвимость с помощью Vulnhuntr? Отправьте отчёт на huntr.com, чтобы получить вознаграждение и создайте PR для добавления её в список ниже!

[!NOTE] В этой таблице представлена лишь часть найденных уязвимостей. Мы будем раскрывать остальные по мере окончания периодов ответственного раскрытия информации.

Репозиторий Звёзды Уязвимости
gpt_academic 67k LFI, XSS
ComfyUI 66k XSS
Langflow 46k RCE, IDOR
FastChat 37k SSRF
Ragflow 31k RCE
LLaVA 21k SSRF
gpt-researcher 17k AFO
Letta 14k AFO

Ограничения

  • Поддерживаются только кодовые базы на Python.
  • Может выявлять только следующие классы уязвимостей:
    • Включение локальных файлов (LFI)
    • Произвольная перезапись файлов (AFO)
    • Удалённое выполнение кода (RCE)
    • Межсайтовый скриптинг (XSS)
    • SQL-инъекция (SQLI)
    • Подделка запросов на стороне сервера (SSRF)
    • Небезопасные прямые ссылки на объекты (IDOR)

Установка

[!IMPORTANT] Vulnhuntr строго требует Python 3.10 из-за ряда ошибок в Jedi, который используется для парсинга Python-кода. Он не будет работать надёжно при установке с другими версиями Python.

Рекомендуем использовать pipx или Docker для простой установки и запуска Vulnhuntr.

С использованием Docker:

docker build -t vulnhuntr https://github.com/protectai/vulnhuntr.git#main

С использованием pipx:

pipx install git+https://github.com/protectai/vulnhuntr.git --python python3.10

Альтернативно можно установить напрямую из исходников с помощью poetry:

git clone https://github.com/protectai/vulnhuntr
cd vulnhuntr && poetry install

Использование

Этот инструмент предназначен для анализа репозитория GitHub на предмет потенциальных удалённо эксплуатируемых уязвимостей. Для работы инструмента требуется API-ключ и локальный путь к репозиторию GitHub. Также можно дополнительно указать пользовательскую конечную точку для сервиса LLM.

[!CAUTION] Всегда устанавливайте лимиты расходов или внимательно следите за затратами у поставщика LLM. Этот инструмент может привести к значительным расходам, так как пытается уместить как можно больше кода в контекстное окно LLM.

[!TIP] Мы рекомендуем использовать Claude в качестве LLM. В ходе тестирования он показал лучшие результаты по сравнению с GPT.

Интерфейс командной строки

usage: vulnhuntr [-h] -r ROOT [-a ANALYZE] [-l {claude,gpt,ollama}] [-v]

Analyze a GitHub project for vulnerabilities. Export your ANTHROPIC_API_KEY/OPENAI_API_KEY before running.

options:
  -h, --help            show this help message and exit
  -r ROOT, --root ROOT  Path to the root directory of the project
  -a ANALYZE, --analyze ANALYZE
                        Specific path or file within the project to analyze
  -l {claude,gpt,ollama}, --llm {claude,gpt,ollama}
                        LLM client to use (default: claude)
  -v, --verbosity       Increase output verbosity (-v for INFO, -vv for DEBUG)

Примеры

При установке через pipx проанализируйте весь репозиторий с использованием Claude:

export ANTHROPIC_API_KEY="sk-1234"
vulnhuntr -r /path/to/target/repo/

[!TIP] Мы рекомендуем указывать Vulnhuntr конкретные файлы, обрабатывающие удалённый пользовательский ввод, и сканировать их по отдельности.

При установке через pipx проанализируйте файл /path/to/target/repo/server.py с использованием GPT-4o. Можно также указать подкаталог вместо файла:

export OPENAI_API_KEY="sk-1234"
vulnhuntr -r /path/to/target/repo/ -a server.py -l gpt 

При установке через Docker запустите с использованием Claude и пользовательской конечной точки для анализа /local/path/to/target/repo/repo-subfolder/target-file.py:

docker run --rm -e ANTHROPIC_API_KEY=sk-1234 -e ANTHROPIC_BASE_URL=https://localhost:1234/api -v /local/path/to/target/repo:/repo vulnhuntr:latest -r /repo -a repo-subfolder/target-file.py

Экспериментальная функция

Ollama включён в качестве опции, однако у нас не было успеха с открытыми моделями в плане корректного структурирования вывода.

export OLLAMA_BASE_URL=http://localhost:11434/api/generate
export OLLAMA_MODEL=llama3.2
vulnhuntr -r /path/to/target/repo/ -a server.py -l ollama

Логическая схема

Логика работы VulnHuntr Вот переведённый фрагмент README инструмента «Vulnhuntr» на русский язык:


  • LLM суммирует README и включает это в системный промпт
  • LLM проводит первоначальный анализ всего файла и сообщает о любых потенциальных уязвимостях
  • Затем Vulnhuntr передаёт LLM промпт, специфичный для уязвимости, для вторичного анализа
  • Каждый раз, когда LLM анализирует код, она запрашивает дополнительный контекст функций/классов/переменных из других файлов проекта
  • Процесс продолжается до тех пор, пока не будет полностью проанализирована вся цепочка вызовов от пользовательского ввода до обработки на сервере, после чего предоставляется окончательный анализ
  • Окончательный анализ включает её рассуждения, эксплойт для доказательства концепции и оценку уверенности

[!TIP] Обычно оценки уверенности < 7 означают, что уязвимость маловероятна. Оценки уверенности 7 означают, что её следует изучить, а оценки 8+ означают, что это, скорее всего, действительная уязвимость.

Вывод

Инструмент генерирует подробный отчёт об уязвимостях, найденных в проанализированных файлах. Отчёт включает:

  • Результаты первоначальной оценки для каждого файла.
  • Результаты вторичной оценки с контекстом функций и ссылками на классы.
  • Оценки уверенности для найденных уязвимостей.
  • Логи процесса анализа.
  • PoC-эксплойт

Ниже приведён пример отчёта Vulnhuntr, описывающего уязвимость нулевого дня для удалённого выполнения кода в Ragflow (исправлено):

scratchpad:
  1. Analyzing the add_llm function in llm_app.py. 2. Identified user input used as keys to access dictionaries: EmbeddingModel, ChatModel, RerankModel,
CvModel, and TTSModel. 3. These dictionaries contain class references, which are instantiated with user-supplied parameters. 4. The factory variable is 
directly used from user input (req['llm_factory']) without proper validation. 5. The llm_name is also derived from user input in most cases. 6. The 
instantiation of these classes occurs in try-except blocks, but exceptions are only used for error messages, not preventing execution. 7. The api_key 
and other sensitive information are passed directly to these instantiated classes. 8. There's no comprehensive input validation or sanitization for the 
factory or llm_name variables. 9. The vulnerability is in a route decorated with @login_required, indicating it's accessible to authenticated users. 10.
Reviewing the EmbeddingModel, ChatModel, RerankModel, CvModel, and TTSModel dictionaries to understand their contents and potential for exploitation.
----------------------------------------

analysis:
  The add_llm function in llm_app.py contains a critical Remote Code Execution (RCE) vulnerability. The function uses user-supplied input 
(req['llm_factory'] and req['llm_name']) to dynamically instantiate classes from the EmbeddingModel, ChatModel, RerankModel, CvModel, and TTSModel 
dictionaries. This pattern of using user input as a key to access and instantiate classes is inherently dangerous, as it allows an attacker to 
potentially execute arbitrary code. The vulnerability is exacerbated by the lack of comprehensive input validation or sanitization on these 
user-supplied values. While there are some checks for specific factory types, they are not exhaustive and can be bypassed. An attacker could potentially
provide a malicious value for 'llm_factory' that, when used as an index to these model dictionaries, results in the execution of arbitrary code. The 
vulnerability is particularly severe because it occurs in a route decorated with @login_required, suggesting it's accessible to authenticated users, 
which might give a false sense of security.
----------------------------------------

poc:
  POST /add_llm HTTP/1.1
  Host: target.com
  Content-Type: application/json
  Authorization: Bearer <valid_token>

  {
      "llm_factory": "__import__('os').system",
      "llm_name": "id",
      "model_type": "EMBEDDING",
      "api_key": "dummy_key"
  }

  This payload attempts to exploit the vulnerability by setting 'llm_factory' to a string that, when evaluated, imports the os module and calls system. 
The 'llm_name' is set to 'id', which would be executed as a system command if the exploit is successful.
----------------------------------------

confidence_score:
  8
----------------------------------------

vulnerability_types:
  - RCE
----------------------------------------

Логирование

Инструмент сохраняет процесс анализа и результаты в файл с именем vulhuntr.log. Этот файл содержит подробную информацию о каждом этапе анализа, включая первоначальную и вторичную оценки.

Авторы

  • Дэн Макинерни: dan@protectai.com, @DanHMcInerney
  • Марчелло Сальвати: marcello@protectai.com, @byt3bl33d3r
Войдите, чтобы оставить комментарий