
Автономные ИИ-агенты для пентеста — разведка в реальном времени, обнаружение уязвимостей и оркестрация эксплуатации. Go + TypeScript.
Большинство сканеров обнаруживают. Xalgorix доказывает. Автономный LLM-агент выполняет полную методологию пентеста, а затем независимый верификатор повторно эксплуатирует каждую находку перед тем, как она будет зарегистрирована — так вы получаете доказательства, а не кучу «возможно» для триажа. Self-hosted, приватный, с поддержкой собственной LLM. Создан на Go + TypeScript.
🚀 Быстрый старт · 💡 Почему Xalgorix · ✨ Возможности · 🎯 Варианты использования · ☁️ Хостинг в облаке · 📖 Документация
🖥️ Self-hosted панель управления — работает локально на 127.0.0.1:9137
| Обзорная панель | Детали сканирования | Находки |
|---|---|---|
![]() | ![]() | ![]() |
☁️ Облачная панель управления — полностью управляемая версия на www.xalgorix.com
Установка (одной строкой):```bash curl -sSL https://www.xalgorix.com/install | bash
Это загружает предварительно собранный бинарный файл для вашей платформы (Linux или macOS, amd64/arm64) из последнего релиза. Затем запустите интерактивный мастер настройки:```bash
xalgorix --setup
Выберите провайдера, подтвердите модель и введите API-ключ по запросу. Для лучших результатов используйте современную фронтирную модель с сильным рассуждением, хорошей работой с длинным контекстом и надёжным вызовом инструментов — например, последнюю доступную вам мощную модель GPT, Claude или Gemini. Модели поменьше или локальные также поддерживаются, но могут требовать больше контроля во время длительных автономных сканирований. Xalgorix хранит ключ в приватном виде в ~/.xalgorix.env (режим 0600) и может запустить панель управления за вас. Локальному Ollama API-ключ не нужен.
Если вы решите не запускать сразу, начните позже с xalgorix --web и откройте http://127.0.0.1:9137. Вы можете сменить провайдера или расширенные параметры в любое время в разделе Settings → LLM или повторно запустить xalgorix --setup.
Или запустите с Docker — всё включено, набор инструментов не требуется:```bash
docker run --rm -p 9137:9137
--privileged
-v xalgorix-data:/data
xalgord/xalgorix:latest
`--privileged` предоставляет инструментарию такой же доступ к хосту, как при запуске нативно от root. Песочница Docker по умолчанию отбрасывает capabilities (например, `NET_ADMIN`) и применяет seccomp-фильтр, что ломает низкоуровневые инструменты (iptables/изменение маршрутов, ARP-spoof/MITM, tun/tap VPN, отладчики на основе ptrace, настройку интерфейсов masscan). Поскольку образ не может сам себе выдать эти права, их нужно задавать во время запуска. Контейнер — это одноразовая, сетевая изолированная сканирующая песочница, работающая от root — privileged — это предполагаемый режим; никогда не открывайте панель управления публично без аутентификации. Предпочитаете наименьшие привилегии? Замените `--privileged` на `--cap-add=NET_ADMIN --cap-add=NET_RAW --cap-add=SYS_PTRACE --security-opt seccomp=unconfined`.
Откройте `http://localhost:9137`. Вам **не нужен ключ LLM для запуска** — панель управления запускается и без него; задайте модель и API-ключ в разделе **Settings → LLM** (они сохраняются в томе `/data`). Если вы не передадите `XALGORIX_USERNAME`/`XALGORIX_PASSWORD`, будет сгенерирован случайный пароль администратора и выведен в логи контейнера при первом запуске.
**Самый простой способ — Docker Compose** (сам сопоставляет порт и создаёт постоянный том):```bash
curl -sSLO https://raw.githubusercontent.com/xalgorix/xalgorix/main/docker-compose.yml
docker compose up -d
docker compose logs -f # shows the generated admin password on first start
Образ поставляется с обширным набором инструментов для offensive security, предустановленных (nmap, nuclei, httpx, subfinder, katana, ffuf, gobuster, sqlmap, masscan, dalfox, feroxbuster и другие) и сохраняет доступными все менеджеры пакетов (apt, go, cargo, pipx, npm), чтобы агент мог автоматически доустановить всё недостающее во время выполнения. Он по замыслу работает как root внутри контейнера — относитесь к контейнеру как к одноразовой, изолированной от сети песочнице для сканирования и никогда не открывайте дашборд без аутентификации. Образы публикуются как для amd64, так и для arm64.
Или соберите из исходников (требуются Go 1.26+ и Node.js):```bash git clone https://github.com/xalgorix/xalgorix.git cd xalgorix make build sudo install -m 755 build/xalgorix /usr/local/bin/xalgorix
> [!TIP]
> Предпочитаете обойтись без настройки? Полностью управляемая версия работает на [www.xalgorix.com](https://www.xalgorix.com/) — клик и сканирование, без установки и API-ключей.
### 🤖 Автоматический ревью пул-реквестов — бесплатное GitHub-приложение
Нужен ревью безопасности на каждом пул-реквесте без настройки? Установите **[Xalgorix GitHub App](https://github.com/apps/xalgorix)**. Оно читает diff каждого PR и оставляет комментарий с ревью безопасности — инъекции, сломанная аутентификация/IDOR, SSRF, секреты, небезопасные паттерны — прямо в пул-реквесте. Обновляется на месте при новых коммитах, а вы можете написать **`@xalgorix review`**, чтобы запустить повторно по запросу. Без workflow-файла, без API-ключа, без аккаунта — и это бесплатно.
<div align="center">
[**➕ Добавить Xalgorix в GitHub →**](https://github.com/apps/xalgorix/installations/new)
</div>
Для контроля слияния и полных пентестов с подтверждёнными эксплойтами в CI используйте [хостируемый сканер](https://www.xalgorix.com/) или GitHub Action.
> [!IMPORTANT]
> Используйте Xalgorix только на системах, которыми вы владеете или на тестирование которых у вас есть явное разрешение.
> [!TIP]
> Не хотите разворачивать самостоятельно? Полностью управляемая версия доступна на [www.xalgorix.com](https://www.xalgorix.com/) — клик и сканирование, без установки и API-ключей.
## 📚 Содержание
| | | |
| --- | --- | --- |
| 📸 [Скриншоты](#-screenshots) | 🔩 [Конфигурация](#-configuration) | 🧾 [Переменные окружения](#-environment-variables) |
| 🚀 [Быстрый старт](#-quick-start) | 🆙 [Обновление](#-upgrading-from-previous-versions) | 🔤 [Префиксы провайдеров](#-provider-prefixes) |
| 🔎 [Обзор](#-overview) | 🏃 [Запуск](#-running) | 💻 [Справочник CLI](#-cli-reference) |
| 💡 [Почему Xalgorix](#-why-xalgorix) | 🧰 [Сервисный режим](#-service-mode) | 📡 [Сводка API](#-api-summary) |
| 🎯 [Варианты использования](#-use-cases) | 🔁 [Рабочий процесс Web UI](#-web-ui-workflow) | 💾 [Хранение данных](#-data-storage) |
| ✨ [Возможности](#-features) | 🔀 [Режимы сканирования](#-scan-modes) | 🧪 [Разработка](#-development) |
| 📥 [Установка](#-installation) | 📂 [Сканируйте свой код](#-scan-your-code-no-target-needed) | 🚨 [Примечания по безопасности](#-safety-notes) |
| 🧭 [Методология](#-methodology) | 📄 [Отчёты](#-reports) | 📜 [Лицензия](#-license) |
| 🔧 [Настройки](#-settings) | 🔗 [Ссылки](#-links) | |
## 🔎 Обзор
Xalgorix — это самохостинговая платформа ИИ-пентестинга для авторизованного тестирования безопасности, оценки уязвимостей и рабочих процессов bug bounty. Она объединяет автономного агента на основе LLM, автоматизацию браузера, терминальные инструменты, комплексную методологию тестирования из 22 фаз, живую телеметрию через WebSocket, управление находками с оценкой CVSS, генерацию фирменных PDF-отчётов и интеграции с AgentMail, Discord и Telegram.
В отличие от облачных DAST-сканеров, Xalgorix полностью работает на вашей машине. Вы подключаете собственного LLM-провайдера (OpenAI, Anthropic, DeepSeek, Gemini, Groq, Ollama, MiniMax) и контролируете модель, усилия рассуждения, лимиты скорости и конфигурацию прокси. Никакие данные сканирования, API-ключи или информация о целях не покидают вашу инфраструктуру.
Основной интерфейс — Web UI. С единой локальной панели вы можете запускать сканирования, отслеживать активные запуски, просматривать находки, настраивать параметры модели/провайдера, управлять переменными окружения, генерировать фирменные PDF-отчёты и удалять или возобновлять исторические сканирования.
## 💡 Почему Xalgorix
Большинство сканеров **обнаруживают**. Xalgorix **доказывает**. Автономный агент проходит методологию из 22 фаз, а затем независимый верификатор повторно тестирует каждую кандидатную находку перед тем, как она будет зарегистрирована — поэтому вы получаете результаты, подтверждённые эксплойтом, с доказательствами, а не стену «возможно» для триажа.
- 🧠 **ИИ-агент, а не шаблонный движок** — рассуждает о потоках аутентификации, бизнес-логике, IDOR/BOLA и цепочках эксплойтов, которые пропускают сигнатурные сканеры.
- ✅ **Находки, подтверждённые эксплойтом** — отдельный верификатор независимо воспроизводит каждую находку; неубедительные помечаются для проверки и никогда не выдаются за подтверждённые.
- 🔒 **Самохостинг и приватность** — работает на вашей машине с вашим LLM-ключом; никакие данные о целях, ключи или находки не покидают вашу инфраструктуру.
- 🧩 **Свой LLM** — OpenAI, Anthropic, DeepSeek, Gemini, Groq, Ollama или MiniMax — или любой OpenAI-совместимый шлюз, например [LiteLLM](#-litellm--openai-compatible-gateways-github-copilot-claude-opus-codex-openrouter-azure-local-models) (GitHub Copilot, Codex, OpenRouter, Azure). Вы контролируете модель, усилия рассуждения и стоимость.
- 📄 **Отчёты, готовые к аудиту** — фирменные PDF с оценками CVSS, proof-of-concept и рекомендациями по устранению.
### 📊 Сравнение
| | **Xalgorix** | Шаблонные сканеры (напр. Nuclei) | Краулинговые сканеры (напр. OWASP ZAP) | Коммерческий DAST |
| -------------------------------------------- | ------------------------ | ------------------------------- | ---------------------------------- | ---------------------- |
| Подход | Автономный ИИ-агент | Сигнатуры / шаблоны | Паук + активные правила | Сигнатуры + эвристики |
| Покрытие бизнес-логики / IDOR / обхода аутентификации | ✅ | Ограниченное | Ограниченное | Частичное |
| Подтверждение эксплойтом (доказывает воздействие) | ✅ независимый верификатор | ❌ | ❌ | Частичное |
| Нагрузка ложных срабатываний | Низкая (подтверждённая) | Зависит от шаблонов | Высокая | Средняя |
| Самохостинг / данные остаются локальными | ✅ | ✅ | ✅ | Обычно облако |
| Свой LLM | ✅ | — | — | ❌ |
| Фирменные PDF-отчёты | ✅ | ❌ | Базовые | ✅ |
| Стоимость | Open source + ваш LLM | Бесплатно | Бесплатно | $$$ |
> Ориентировочное сравнение — Nuclei и ZAP отлично справляются со своими задачами. Xalgorix добавляет поверх слой обнаружения, требующий рассуждений, и верификацию эксплойтов.
### ☁️ Самохостинг vs Хостируемое облако
Xalgorix бесплатен и имеет открытый исходный код — разворачивайте его самостоятельно сколько угодно, без каких-либо обязательств. [Хостируемое облако](https://www.xalgorix.com/) работает на **том же** движке с подтверждением эксплойтов; оно существует для тех, кто предпочитает не управлять API-ключами, инфраструктурой и непредсказуемыми счетами за LLM. Оба варианта полноценны — выбирайте, что подходит.
| | **Самохостинг** (этот репозиторий) | **[Хостируемое облако](https://www.xalgorix.com/)** |
| ---------------------------------- | ---------------------------------------- | ----------------------------------------------- |
| Цена старта | Бесплатно, Apache-2.0 | Бесплатный тариф · один полный скан от $1 |
| LLM API-ключ | Свой — приносите и управляйте | Включён — не нужно возиться |
| Стоимость за скан | Сырые LLM-токены — переменная, может скакать | 1 кредит за живой хост — предсказуемо |
| Настройка и эксплуатация | Вы устанавливаете, обновляете и запускаете инструментарий | Нечего запускать — скан за ~60 секунд |
| Внеполосная инфраструктура (SSRF/слепой RCE) | Поднимайте свой OOB-сервер | Управляемый OOB включён |
| Планирование · команда · RBAC | Делайте сами | Встроено |
| Обновления | `git pull` + пересборка | Всегда на последней версии движка |
| Размещение данных / офлайн | ✅ остаётся на вашей инфраструктуре · air-gap OK | Работает на нашей инфраструктуре (доступен DPA) |
**Выбирайте самохостинг**, если данные должны оставаться в вашей сети, вам нужен полный контроль или вы будете работать офлайн/в изолированной среде — именно для этого он и создан. **Используйте облако**, если хотите пропустить API-ключи, инфраструктуру и неожиданные счета за токены и платить только за живые хосты, которые реально сканируете.
<div align="center">
[**☁️ Попробуйте хостируемое облако — бесплатно →**](https://www.xalgorix.com/) · [**⚖️ Сравните реальную стоимость (калькулятор) →**](https://www.xalgorix.com/hosted-vs-self-hosted)
</div>
Если Xalgorix экономит вам цикл триажа, пожалуйста, **[⭐ поставьте звезду репозиторию](https://github.com/xalgorix/xalgorix)** — это действительно помогает другим найти его.
## 🎯 Варианты использования
| Вариант использования | Как помогает Xalgorix |
| -------- | ------------------ |
| **Пентестинг** | Запускает полную методологию из 22 фаз против авторизованных целей. ИИ-агент выполняет разведку, обнаружение уязвимостей, тестирование инъекций, SSRF, IDOR, обход аутентификации, гонки и многое другое — затем проверяет находки перед отчётом. |
| **Охота за багами (bug bounty)** | Направьте Xalgorix на цель, входящую в scope, и агент перечислит поверхность атаки, протестирует распространённые классы уязвимостей и выведет подтверждённые находки с оценками CVSS и доказательствами proof-of-concept. |
| **Операции red team** | Используйте режимы сканирования с wildcard и несколькими целями, чтобы составить карту внешней поверхности атаки организации. Браузерный DAST обрабатывает потоки аутентификации, формы и поведение во время выполнения, которые пропускают статические сканеры. |
| **Исследования в области безопасности** | Фаза обнаружения новых уязвимостей выводит агента за пределы известного сопоставления шаблонов. Подключайте свой LLM (OpenAI, Anthropic, DeepSeek, Gemini, Ollama, MiniMax), чтобы контролировать глубину рассуждений и стоимость. |
| **Непрерывное тестирование безопасности** | Запускайте как системный сервис с `xalgorix --start`. Сканируйте по расписанию, передавайте находки в Discord или Telegram и генерируйте фирменные PDF-отчёты для заинтересованных сторон. |
| **Автоматизация DAST** | Тестирование веб-приложений через браузер — потоки аутентификации, формы, контент, отрисованный JavaScript, и поведение во время выполнения. Интеграция с Caido для инспекции прокси-трафика. |
## ✨ Возможности
| Область | Возможности |
| -------------- | --------------------------------------------------------------------------------------------------------------------------- |
| 📊 Панель управления | Локальный Web UI на `127.0.0.1:9137` по умолчанию, управление сканированиями, живой статус, массовые действия со сканированиями и восстановление исторических сканирований. |
| 🔍 Сканирование | Потоки с одной целью, DAST, wildcard и несколькими целями с выбираемыми фазами методологии. |
| 📡 Живая телеметрия | Вызовы инструментов, сообщения агента, находки, ошибки, HTTP-активность и активность LLM через WebSocket. |
| 🐞 Находки | Страницы деталей сканирования, фильтры по серьёзности, детали CVSS, индекс находок и рабочие процессы подтверждённых находок. |
| 📄 Отчётность | Фирменные PDF-отчёты с именем цели/компании, загруженным логотипом, список отчётов, действия открыть/скачать/удалить. |
| 🔔 Интеграции | Тестовые почтовые ящики AgentMail, письма верификации, OTP-потоки, события триажа почты, уведомления Discord и Telegram. |
| ⚙️ Конфигурация | Настройки панели для LLM, AgentMail, Discord, Telegram, прокси, среды выполнения, браузера, аутентификации, лимитов скорости и ресурсов. |
| 🛡️ Безопасность среды выполнения | Ограничения экземпляров с учётом ресурсов и привязка только к loopback, если внешний доступ не настроен явно с аутентификацией. |
## 📥 Установка
Самые быстрые пути вообще не требуют инструментария.
### ⚡ Установка одной строкой (собранный бинарник)```bash
curl -sSL https://www.xalgorix.com/install | bash
Скачивает последний релизный бинарник для вашей платформы (Linux или macOS, amd64/arm64) и устанавливает его в /usr/local/bin (или ~/.local/bin без sudo). Можно переопределить с помощью XALGORIX_INSTALL_DIR или зафиксировать версию через XALGORIX_VERSION=vX.Y.Z.
Выполняет полную первоначальную настройку в интерактивном режиме — ручное редактирование файла окружения не требуется:```bash xalgorix --setup
Мастер сохраняет существующие настройки при повторном запуске, скрывает ввод API-ключа в терминале и при желании запускает веб-интерфейс по завершении.
### 🐳 Docker```bash
docker run --rm -p 9137:9137 \
--privileged \
-e XALGORIX_LLM=openai/gpt-5.6 \
-e XALGORIX_API_KEY=your_openai_api_key \
-v xalgorix-data:/data \
ghcr.io/xalgord/xalgorix:latest
--privileged (или более узкий вариант --cap-add=NET_ADMIN --cap-add=NET_RAW --cap-add=SYS_PTRACE --security-opt seccomp=unconfined) даёт набору инструментов доступ уровня хоста. Песочница Docker по умолчанию отбрасывает capabilities и фильтрует системные вызовы, что ломает низкоуровневые инструменты (изменения iptables/route/интерфейсов, ARP-spoof/MITM, VPN на tun/tap, отладчики на основе ptrace). Образ не может выдать их сам себе — это решение на этапе запуска, — поэтому передайте флаг или используйте прилагаемый docker-compose.yml, который задаёт его за вас.
Образ включает всё необходимое: обширный набор инструментов offensive-security предустановлен (nmap, nuclei, httpx, subfinder, dnsx, naabu, katana, ffuf, gobuster, dalfox, feroxbuster, sqlmap, masscan, nikto, whatweb, hydra и другие), плюс Chromium для DAST с поддержкой браузера. Также сохраняется полный набор пакетных менеджеров (apt, go, cargo, pipx, npm), поэтому агент автоматически доустанавливает всё недостающее во время выполнения. Данные сканирования сохраняются в том /data, а сервер внутри контейнера привязывается к 0.0.0.0 — задайте XALGORIX_USERNAME/XALGORIX_PASSWORD перед тем, как открывать доступ за пределами localhost.
Контейнер по замыслу работает от root (движок включает автоматическую установку во время выполнения только для uid 0, а установкам apt/go/cargo нужен доступ на запись в систему). Относитесь к нему как к одноразовой, изолированной от сети песочнице для сканирования. Те же теги публикуют мультиплатформенный манифест для linux/amd64 и linux/arm64, поэтому Docker автоматически выбирает нативный образ.
При первом запуске, если вы не задали аутентификацию панели, контейнер генерирует случайный пароль администратора и выводит его в логи (образ привязывается к 0.0.0.0, чего движок не сделает без аутентификации). Задайте XALGORIX_USERNAME + XALGORIX_PASSWORD (или XALGORIX_PASSWORD_HASH), чтобы использовать собственные значения. Бинарник никогда не обновляется сам внутри контейнера (XALGORIX_NO_AUTO_UPDATE=1) — для обновления подтяните новый тег образа. Движок nuclei и его шаблоны уязвимостей обновляются до последних версий при каждой сборке образа (это обеспечивают CI релизов и redeploy.sh); передайте --build-arg NUCLEI_VERSION=vX.Y.Z, чтобы зафиксировать версию движка, или NUCLEI_REFRESH=0 ./redeploy.sh, чтобы переиспользовать кэш Docker.
| Требование | Примечания |
|---|
Проверьте версию Go:```bash go version
### 🔨 Сборка из исходного кода```bash
git clone https://github.com/xalgorix/xalgorix.git
cd xalgorix
make build
sudo install -m 755 build/xalgorix /usr/local/bin/xalgorix
make build собирает React Web UI в internal/web/static, а затем собирает Go-бинарник.
GOPROXY=direct GOSUMDB=off go install github.com/xalgord/xalgorix/v4/cmd/xalgorix@latest
## 🔩 Конфигурация
Xalgorix загружает конфигурацию в следующем порядке. Более поздние источники переопределяют более ранние.
| Порядок | Источник |
| ------- | --------------------------------------------------------------- |
| 1 | `/etc/xalgorix.env` |
| 2 | `/home/<sudo-user>/.xalgorix.env` при запуске через `sudo` |
| 3 | `~/.xalgorix.env` |
| 4 | Переменные окружения, уже присутствующие в процессе |
Создайте локальный файл окружения:```bash
nano ~/.xalgorix.env
Для получения наиболее сильных результатов автономного сканирования выбирайте актуальную модель frontier-класса. Указанный ниже идентификатор модели — это конкретный пример; более новые совместимые идентификаторы моделей можно вводить без ожидания выхода релиза Xalgorix.```bash XALGORIX_LLM=openai/gpt-5.6 XALGORIX_API_KEY=your_openai_api_key
### 🔌 Примеры провайдеров
OpenAI:```bash
XALGORIX_LLM=openai/gpt-5.6
XALGORIX_API_KEY=sk-...
Пользовательский провайдер, совместимый с OpenAI:```bash XALGORIX_LLM=custom/security-model XALGORIX_API_BASE=https://your-provider.example/v1 XALGORIX_API_KEY=your_provider_api_key
#### 🌉 LiteLLM / OpenAI-совместимые шлюзы (GitHub Copilot, Claude Opus, Codex, OpenRouter, Azure, локальные модели)
Поскольку `XALGORIX_API_BASE` принимает любую OpenAI-совместимую конечную точку `/v1/chat/completions`,
Xalgorix работает с прокси [LiteLLM](https://docs.litellm.ai/) из коробки — без
каких-либо изменений на стороне Xalgorix. LiteLLM обрабатывает аутентификацию вышестоящего провайдера (device
login Copilot, ключи Azure, OpenRouter, Ollama и т. д.); Xalgorix просто общается с шлюзом по протоколу OpenAI.
Запустите LiteLLM (пример `config.yaml`):```yaml
model_list:
- model_name: claude-opus-5
litellm_params:
model: github_copilot/claude-opus-5 # or openrouter/…, azure/…, ollama/…
general_settings:
master_key: sk-local-litellm-key
Укажите Xalgorix на него — используйте префикс custom/, чтобы имя модели отправлялось без изменений и использовался протокол OpenAI chat-completions:```bash
XALGORIX_LLM=custom/claude-opus-5 # the LiteLLM model_name
XALGORIX_API_BASE=http://localhost:4000/v1 # your LiteLLM proxy
XALGORIX_API_KEY=sk-local-litellm-key # LiteLLM master_key / virtual key
Тот же шаблон охватывает GitHub Copilot Business/CLI, Claude Opus, модели в стиле Codex,
OpenRouter, Azure OpenAI и локальные модели Ollama — всё, что LiteLLM может маршрутизировать. Сохраняйте
префикс `custom/` (или `openai/`) и не-Anthropic/Gemini `XALGORIX_API_BASE`, чтобы Xalgorix
использовал стандартную форму запроса OpenAI, которую ожидает LiteLLM.
### 🔔 Необязательные интеграции```bash
GEMINI_API_KEY=AIza...
AGENTMAIL_POD=am_us_pod_47
AGENTMAIL_API_KEY=ak_...
XALGORIX_DISCORD_WEBHOOK=https://discord.com/api/webhooks/...
XALGORIX_DISCORD_MIN_SEVERITY=high
XALGORIX_USERNAME=admin XALGORIX_PASSWORD=change-this-password
> [!TIP]
> Для продакшн-развертываний предпочтительно использовать `XALGORIX_PASSWORD_HASH`.
## 🆙 Обновление с предыдущих версий
Этот релиз включает улучшение стабильности и изоляции рабочих пространств с одним критическим изменением и несколькими новыми параметрами, о которых стоит знать.
### 💥 Критическое изменение: рабочее пространство по умолчанию перемещено в `~/.xalgorix/data/`
Результаты сканирования, заметки, расписания и другие создаваемые артефакты теперь хранятся в `~/.xalgorix/data/` вместо `$CWD` (каталога, из которого был запущен бинарный файл).
Чтобы сохранить прежнее поведение, укажите `XALGORIX_DATA_DIR` на ваш текущий рабочий каталог:```bash
export XALGORIX_DATA_DIR=$(pwd)
A [MIGRATION] warning is emitted at startup when legacy markers (notes.json, _schedules/, vulnerabilities.json, or YYYY-MM-DD/scan-* directories) are detected in $CWD and XALGORIX_DATA_DIR is unset. Xalgorix never reads, copies, or deletes those legacy files automatically; the warning is informational and only fires once per process.
| Variable | Default | Description |
|---|---|---|
XALGORIX_LLM_MAX_INFLIGHT | 4 × EffectiveMaxInstances | Caps simultaneous outbound LLM calls across all running scans. Minimum 1. Cancelled waiters do not consume a slot. |
GET /api/status now exposes:
xalgorix --web
Откройте:```text
http://127.0.0.1:9137
Используйте другой порт:```bash xalgorix --web --port 8080
### 🌐 Внешний доступ
Привязывайтесь к другому интерфейсу только после включения аутентификации панели управления:```bash
XALGORIX_USERNAME=admin XALGORIX_PASSWORD=change-this xalgorix --web --bind 0.0.0.0
[!WARNING] Сервер отказывает во внешней привязке без аутентификации на панели управления.
xalgorix --target https://example.com
С пользовательскими инструкциями:```bash
xalgorix --target https://app.example.com --instruction "Focus on SQL injection, IDOR, and auth bypass. Avoid destructive tests."
Установка и запуск в качестве системного сервиса:```bash sudo xalgorix --start
Управляйте службой:```bash
sudo xalgorix --restart
sudo xalgorix --stop
sudo xalgorix --uninstall
Журналы просмотра:```bash journalctl -u xalgorix -f
### 🌍 Удалённый доступ к сервису
Открывайте доступ к сервису для удалённых браузеров только после включения аутентификации в панели управления:```bash
sudo tee -a /root/.xalgorix.env >/dev/null <<'EOF'
XALGORIX_BIND=0.0.0.0
XALGORIX_USERNAME=admin
XALGORIX_PASSWORD=change-this
EOF
sudo xalgorix --restart
Затем откройте http://<server-ip>:9137.
Если процесс прослушивает порт, но страница всё равно не загружается удалённо, разрешите TCP-порт 9137 в брандмауэре сервера или в группе безопасности облака.
По умолчанию Xalgorix отказывается сканировать адреса loopback, localhost, частные диапазоны или
адреса собственных интерфейсов — это машина, на которой работает Xalgorix, а не
цель. На самостоятельно размещённом, однопользовательском сервере вы можете разрешить сканирование
локально размещённого демо/промежуточного приложения:```bash
echo 'XALGORIX_ALLOW_LOCAL_TARGETS=true' | sudo tee -a /root/.xalgorix.env
sudo xalgorix --restart
Панель управления имеет собственный прослушиватель, который **всегда** защищён, даже если эта опция включена.
> **⚠️ Общие / мультитенантные / хостинговые развёртывания: держите эту опцию ВЫКЛЮЧЕННОЙ.** Её включение
> позволит скану пользователя достичь собственной машины оператора и внутренней сети.
> По умолчанию она выключена, поэтому для безопасности не требуется никаких действий — не задавайте
> `XALGORIX_ALLOW_LOCAL_TARGETS` (или зафиксируйте `XALGORIX_ALLOW_LOCAL_TARGETS=false`),
> и не открывайте страницу настроек движка недоверенным пользователям.
## 🔁 Рабочий процесс веб-интерфейса
1. Откройте панель управления по адресу `http://127.0.0.1:9137`.
2. Перейдите в «Настройки» и подтвердите LLM-провайдера, API-ключ, лимиты запросов и дополнительные интеграции.
3. Создайте сканирование через «Новое сканирование».
4. Выберите режим сканирования.
5. Выберите этапы методологии, если нужен целенаправленный запуск.
6. Задайте фильтры по критичности, если в реальном времени должны сообщаться только определённые уровни серьёзности. Фильтр влияет только на ленту панели управления в реальном времени и уведомления; PDF-отчёт и `/api/findings` всегда включают все уязвимости, обнаруженные агентом.
7. Добавьте название компании и загрузите логотип для фирменных отчётов.
8. Отслеживайте прогресс в разделах «Обзор», «Детали сканирования» или «Живая лента».
9. Открывайте детали уязвимостей, скачивайте отчёты или управляйте историческими сканированиями в разделах «Сканирования» и «Отчёты».
## 🔀 Режимы сканирования
| Режим | Для чего лучше всего |
| ---------------- | ------------------------------------------------------------------------------- |
| 🎯 Одиночная цель | Тестирование одного известного URL или хоста. |
| 🌐 Подстановочный / множественный | Перечисление связанных целей и сканирование обнаруженной поверхности атаки. |
| 🧭 DAST | Тестирование с помощью браузера для веб-приложений, потоков аутентификации, форм и поведения в рантайме. |
## 📂 Сканирование вашего кода (цель не требуется)
Укажите Xalgorix на кодовую базу — Git-URL, локальный путь или загруженный zip-архив — и
он просканирует исходный код напрямую. Никакого развёрнутого URL, никакой инфраструктуры для запуска.```bash
# Source review (SAST): audit the code, no running target required
xalgorix --source ./my-app --code-scan review
# Provision + DAST: build & run the app locally, then pentest the running instance
xalgorix --source https://github.com/org/app.git --code-scan provision
--source принимает Git URL (мелкое клонирование), локальную директорию или путь к
загруженному/извлечённому архиву. В веб-интерфейсе / хостируемом приложении вы также можете загрузить
.zip вашей кодовой базы (POST /api/upload-source).Режим provision запускает команды сборки/запуска вашего приложения в песочнице агента и тестирует только один loopback-порт, на котором оно было поднято — панель управления и всё остальное на машине остаётся вне области тестирования.
Xalgorix организует автономное тестирование в 22 фазы.
Выбор фаз в веб-интерфейсе позволяет запустить все фазы или только подмножество, необходимое для конкретного задания.
Отчёты генерируются в виде PDF-файлов и могут включать:
| Раздел | Включённое содержимое |
|---|
Отчёты доступны со страницы деталей сканирования и страницы «Отчёты». Строки отчётов поддерживают открытие, скачивание и удаление.
Большинство операционных настроек можно изменить в веб-интерфейсе в разделе «Настройки».
Некоторые настройки требуют перезапуска, поскольку они влияют на запуск процесса или привязку сервера. Интерфейс помечает такие поля.
Когда XALGORIX_API_BASE пуст, Xalgorix выводит значения по умолчанию провайдера из префикса модели.
Названия моделей не жёстко привязаны к этому списку. Страница настроек принимает вводимые идентификаторы моделей, поэтому новые модели провайдеров можно использовать без ожидания обновления выпадающего списка в интерфейсе.
Данные сканирования в веб-режиме хранятся в:```text
~/xalgorix-data/
|-- _saved/
|-- logos/
|-- queue_state.json
-- <target>/ -- /
-- <scan-id>/ |-- scan.json -- report.pdf
Сервер хранит исторические записи сканирования на диске, чтобы интерфейс мог восстановиться после обновления страницы или перезапуска.
## 🧪 Разработка
| Задача | Команда |
| --------------------------- | ----------------------------- |
| 📦 Установка зависимостей Web UI | `make webui-install` |
| 🔨 Сборка всего | `make build` |
| ✅ Запуск тестов | `go test ./...` |
| 🖥️ Запуск Web UI из исходников | `go run ./cmd/xalgorix --web` |
| ⚡ Запуск dev-сервера фронтенда | `make webui-dev` |
## 🚨 Примечания по безопасности
- Используйте Xalgorix только против авторизованных целей.
- Не проводите активное тестирование сторонних систем без разрешения.
- Изучайте инструкции по сканированию перед запуском.
- Настраивайте ограничения скорости и параметры прокси в соответствии с правилами взаимодействия.
- Открытие панели управления для внешнего доступа требует аутентификации.
- Автоустановка отключена по умолчанию для пользователей без прав root и должна включаться только при доверии к окружению.
## 📜 Лицензия
Xalgorix выпущен под лицензией Apache License 2.0. См. [LICENSE](https://github.com/xalgord/xalgorix/blob/main/LICENSE).
## 🔗 Ссылки
| Ресурс | Ссылка |
| ------------- | -------------------------------------------------------------------------------- |
| ☁️ Хостинг (облако) | [www.xalgorix.com](https://www.xalgorix.com/) |
| 📖 Документация | [docs.xalgorix.com](https://docs.xalgorix.com) |
| 🐛 Проблемы | [github.com/xalgorix/xalgorix/issues](https://github.com/xalgorix/xalgorix/issues) |
| ☕ Поддержка | [buymeacoffee.com/xalgord](https://buymeacoffee.com/xalgord) |
| ОС | Linux или macOS (amd64/arm64). |
| Go | 1.26 или новее. |
| Node.js + npm | Требуется при сборке встроенного React Web UI из исходников. |
| Инструменты безопасности | Устанавливаются по требованию, только когда включена автоматическая установка. |
| Field | Meaning |
|---|
panics_recovered | Goroutine, HTTP handler, and tool panics that were recovered without crashing. |
path_rejections | Filesystem writes refused by Path_Policy (outside data_dir / ~/.xalgorix/ / /tmp). |
watchdog_kills | Subprocesses terminated by the per-tool hard-timeout watchdog. |
admission_refusals | Scan admission requests denied due to the concurrency ceiling. |
llm_inflight_cap | Effective XALGORIX_LLM_MAX_INFLIGHT value for this process. |
data_dir | Resolved Data_Dir in use. |
allow_list | Filesystem roots accepted by Path_Policy. |
| Режим сканирования кода | Что делает | Уровень верификации |
|---|
review | Читает исходный код, прослеживает пользовательский ввод от точки входа → опасного стока и сообщает о достижимых уязвимостях. Живая цель не требуется. | Подтверждено по исходному коду — доказана достижимость в коде (явно помечено как не эксплуатируемое в рантайме). |
provision | Проверяет репозиторий, собирает и запускает приложение на loopback-порту, затем выполняет DAST с белым ящиком против запущенного экземпляра. Откатывается к review, если приложение не удаётся собрать. | Подтверждено эксплуатацией — воспроизведено против запущенного приложения. |
| Фаза | Направление |
|---|
| 1 | Разведка |
| 2 | Ручное обнаружение уязвимостей |
| 3 | Обнаружение директорий и файлов |
| 4 | Анализ CORS и cookie |
| 5 | Тестирование аутентификации и сессий |
| 6 | Тестирование инъекций |
| 7 | Тестирование SSRF |
| 8 | IDOR и нарушенный контроль доступа |
| 9 | Тестирование API и GraphQL |
| 10 | Тестирование загрузки файлов |
| 11 | Десериализация и RCE |
| 12 | Гонки и бизнес-логика |
| 13 | Перехват поддоменов |
| 14 | Тестирование открытых редиректов |
| 15 | Тестирование безопасности email |
| 16 | Облако и инфраструктура |
| 17 | Тестирование WebSocket |
| 18 | Тестирование CMS-специфичное |
| 19 | Перехват битых ссылок и подмена контента |
| 20 | Проверка эксплуатации |
| 21 | Обнаружение новых уязвимостей |
| 22 | Итоговый отчёт |
| 📌 Сводка | Исполнительное резюме, метаданные цели, метаданные сканирования и обзор серьёзности. |
| 🐞 Находки | Подтверждённые находки, детали CVSS, технический анализ и доказательство эксплуатации. |
| 🔬 Доказательства | Команды proof of concept, скрипты, заметки о полезных нагрузках и подтверждающие наблюдения. |
| 🩹 Исправление | Рекомендации по исправлению и приоритетные следующие шаги. |
| 🎨 Брендинг | Название компании/цели и загруженный логотип. |
| Область | Примеры |
|---|
| 🤝 Взаимодействие | Лимиты запросов к панели управления |
| 🧠 LLM | Модель, ключ API, базовый URL API, усилие рассуждения, повторы, максимум итераций |
| 📬 AgentMail | Pod и ключ API |
| 🔔 Уведомления | Discord webhook и минимальная серьёзность, токен бота Telegram, ID чата, минимальная серьёзность и сводки о завершении сканирования по выбору |
| 🕵️ Прокси | URL прокси, файл прокси, ротация, проверка TLS |
| 🧱 Среда выполнения | Рабочая область, путь к браузеру, элементы управления автоустановкой |
| 🔐 Безопасность | Имя пользователя панели, пароль, хэш пароля, адрес привязки |
| 📈 Ресурсы | Пороги CPU/RAM/диска и бюджет параллелизма сканирования |
| Переменная | По умолчанию | Описание |
|---|
XALGORIX_LLM | нет | Идентификатор модели провайдера, используемый для запросов LLM. |
XALGORIX_LLM_PROVIDER | нет | Провайдер, выбранный на панели управления, хранится отдельно от идентификатора модели. |
XALGORIX_API_KEY | нет | Обязательный ключ API провайдера LLM. |
XALGORIX_API_BASE | по умолчанию провайдера | Пользовательский базовый URL API, совместимый с OpenAI. |
XALGORIX_REASONING_EFFORT | high | Усилие рассуждения: none, low, medium, high или xhigh (xhigh сопоставляется с high для Ollama). |
XALGORIX_LANGUAGE | en | Язык вывода для текста, созданного ИИ (рассуждения агента, заметки, находки, содержимое отчёта, чат после сканирования). en или zh-CN. Технические токены (полезные нагрузки, команды, URL, идентификаторы CVE/CWE) всегда остаются в исходной форме. Нелатинские языки отображаются на панели управления и в HTML-отчёте автоматически. |
XALGORIX_PDF_CJK_FONT | нет | Абсолютный путь к шрифту TrueType (.ttf) с глифами CJK, используемому для отображения нелатинских языков (например, упрощённого китайского) в экспортируемом PDF-отчёте. Поддерживается только .ttf (не .ttc/.otf). Без него PDF откатывается к базовым шрифтам, и нелатинские глифы не будут отображаться (HTML-отчёт не затрагивается). |
XALGORIX_OLLAMA_COMPATIBLE | false | Применять семантику рассуждений Ollama к пользовательской конечной точке на нестандартном порту. Порт 11434 определяется автоматически. |
XALGORIX_LLM_MAX_RETRIES | 5 | Количество повторов при временных сбоях LLM. |
XALGORIX_MEMORY_COMPRESSOR_TIMEOUT | 30 | Таймаут в секундах для сжатия контекста. |
XALGORIX_MAX_ITERATIONS | 0 | Лимит итераций агента. 0 означает без ограничений. |
XALGORIX_PPROF_ADDR | нет | Опциональный профилировщик Go. При установке (например, 127.0.0.1:6060) запускает отдельный сервер pprof по адресу /debug/pprof/ для диагностики CPU/памяти. По умолчанию отключён. Раскрывает внутренности процесса — привязывайте к loopback и обращайтесь через SSH-туннель; никогда не открывайте публично. |
GEMINI_API_KEY | нет | Опциональный ключ Gemini для обогащения веб-поиска. |
| Переменная | По умолчанию | Описание |
|---|
XALGORIX_BIND | 127.0.0.1 | Адрес прослушивания веб-сервера. |
XALGORIX_ALLOW_LOCAL_TARGETS | false | Разрешить сканирование локально размещённых приложений (localhost / 127.0.0.1 / частные IP) на самостоятельной установке. Собственный слушатель панели управления всегда защищён. Оставляйте выключенным на общих/хостируемых развёртываниях. |
XALGORIX_USERNAME | нет | Имя пользователя панели управления. |
XALGORIX_PASSWORD | нет | Пароль панели управления. |
XALGORIX_PASSWORD_HASH | нет | Предпочтительный bcrypt-хэш пароля. |
XALGORIX_WORKSPACE | текущая директория | Корень рабочей области для выполнения сканирования. |
| Переменная | По умолчанию | Описание |
|---|
AGENTMAIL_POD | нет | Идентификатор пода AgentMail. |
AGENTMAIL_API_KEY | нет | Ключ API AgentMail. |
XALGORIX_DISCORD_WEBHOOK | нет | Глобальный Discord webhook. |
XALGORIX_DISCORD_MIN_SEVERITY | нет | Минимальная серьёзность, отправляемая в Discord. |
XALGORIX_TELEGRAM_BOT_TOKEN | нет | Токен бота Telegram от @BotFather. |
XALGORIX_TELEGRAM_CHAT_ID | нет | ID чата/канала Telegram (числовой или @username). |
XALGORIX_TELEGRAM_MIN_SEVERITY | нет | Минимальная серьёзность, отправляемая в Telegram. |
XALGORIX_NOTIFY_SCAN_COMPLETE | false | Отправлять сводки о завершении сканирования в настроенные Discord/Telegram-назначения. Это по выбору и не влияет на оповещения об отдельных уязвимостях. |
CAIDO_PORT | 0 | Порт прокси Caido. 0 означает автодетект. |
CAIDO_API_TOKEN | нет | Токен API Caido. |
| Переменная | По умолчанию | Описание |
|---|
XALGORIX_RATE_LIMIT_REQUESTS | 60 | Запросы к панели управления за окно. |
XALGORIX_RATE_LIMIT_WINDOW | 60 | Окно лимита скорости панели управления в секундах. |
XALGORIX_RATE_RPS | 10 | Устойчивая скорость исходящих запросов. |
XALGORIX_RATE_BURST | 20 | Размер исходящего всплеска. |
XALGORIX_USE_PROXY | false | Включить маршрутизацию через прокси. |
XALGORIX_PROXY_URL | нет | Одиночный URL прокси. Переопределяет файл прокси. |
XALGORIX_PROXY_FILE | нет | Файл, содержащий по одному прокси на строку. |
XALGORIX_PROXY_ROTATION | roundrobin | Стратегия ротации прокси: roundrobin или random. |
XALGORIX_TLS_SKIP_VERIFY | false | Пропустить проверку TLS для тестового трафика. |
XALGORIX_DISABLE_BROWSER | false | Отключить автоматизацию браузера. |
XALGORIX_BROWSER_PATH | авто | Пользовательский путь к исполняемому файлу Chrome/Chromium. |
XALGORIX_ALLOW_AUTO_INSTALL | только root | Разрешить автоматическую установку пакетов. |
XALGORIX_AUTO_INSTALL_SUDO | false | Разрешить автоустановки с префиксом sudo. |
| Префикс | Базовый URL API по умолчанию |
|---|
openai/ | https://api.openai.com/v1 |
anthropic/ | https://api.anthropic.com |
deepseek/ | https://api.deepseek.com/v1 |
groq/ | https://api.groq.com/openai/v1 |
google/ | https://generativelanguage.googleapis.com/v1 |
gemini/ | https://generativelanguage.googleapis.com/v1 |
ollama/ | http://localhost:11434/v1 |
minimax/ | https://api.minimax.io/v1 |
| Флаг | Псевдоним | Описание |
|---|
--web | -w | Запустить веб-интерфейс. |
--port <port> | -p | Порт веб-интерфейса. По умолчанию: 9137. |
--bind <addr> | нет | Адрес привязки. По умолчанию: 127.0.0.1. |
--target <target> | -t | URL цели, хост, IP или путь. Повторяемый. |
--instruction <text> | -i | Пользовательские инструкции сканирования. |
--model <model> | -m | Переопределить XALGORIX_LLM для этого запуска. |
--update | -up | Обновить до последнего релиза. |
--version | -v | Вывести версию. |
--start | нет | Установить и запустить системную службу. |
--stop | нет | Остановить системную службу. |
--restart | нет | Перезапустить системную службу. |
--uninstall | нет | Удалить системную службу. |
--help | -h | Показать справку. |
| Метод | Конечная точка | Назначение |
|---|
POST | /api/scan | Запустить или сохранить сканирование. |
POST | /api/stop | Остановить все запущенные сканирования. |
GET | /api/status | Текущий глобальный статус. |
GET | /api/scans | Список сканирований. |
GET | /api/scans/:id | Получить детали сканирования. |
DELETE | /api/scans/:id | Удалить сканирование и его данные отчёта. |
GET | /api/findings | Список всех находок (дедуплицированных по сканированиям). |
GET | /api/findings/summary | Подсчёт серьёзности по всем сканированиям. |
GET | /api/report/:id | Скачать PDF-отчёт. |
GET | /api/instances | Список активных и исторических экземпляров. |
GET | /api/instances/:id/events | Получить буферизованную историю событий. |
POST | /api/instances/:id/stop | Остановить конкретный экземпляр. |
POST | /api/instances/:id/start | Запустить сохранённое или завершённое сканирование как новый запуск. |
POST | /api/instances/:id/restart | Перезапустить с той же конфигурацией. |
POST | /api/instances/:id/pause | Приостановить запущенное сканирование. |
POST | /api/instances/:id/resume | Возобновить приостановленное сканирование. |
POST | /api/upload-logo | Загрузить логотип отчёта. |
POST | /api/upload-targets | Загрузить список целей. |
GET | /api/settings/environment | Список редактируемых настроек окружения. |
POST | /api/settings/environment | Сохранить настройки окружения. |
GET | /api/settings/llm | Получить настройки LLM. |
POST | /api/settings/llm | Сохранить настройки LLM. |
GET | /api/settings/agentmail | Получить настройки AgentMail. |
POST | /api/settings/agentmail | Сохранить настройки AgentMail. |
GET | /ws | Поток событий WebSocket в реальном времени. |