
pentest-ai v1.4.0
ИИ-пентестер с открытым исходным кодом, который доказывает каждую находку. Машинные оракулы повторно запускают каждый эксплойт; подтверждённые баги поставляются с доказательной капсулой, которую вы можете воспроизвести самостоятельно.
pentest-ai
Он не помечает. Он доказывает.
Веб-сайт · Установка · Почему верификация · Бенчмарки · Ограничения · Discord
⚠️ Инструмент для атак, только авторизованное тестирование. Устанавливая, вы принимаете AUP и Условия. См. Ответственное использование ↓
Две минуты, без API-ключа, без собственной цели
pip install ptai && ptai demo
ptai demo сканирует встроенное уязвимое приложение и выводит 4 findings, 3 oracle-VERIFIED.
Он воспроизводит одну находку вживую из proof-капсулы (replay 3/3), затем запускает те же маршруты
после исправления и выводит 0 findings.
Обратите внимание на две вещи. Находки появляются и исчезают вместе с уязвимостью, а не потому, что инструмент замолчал — единственное, что изменилось между двумя запусками, это исправление. И одна из четырёх остаётся кандидатом: обход логина через SQLi реален, но ни один оракул не смог повторно доказать его на этом маршруте, поэтому он не получает бейдж. Этот пробел — работа продукта, а не баг в демо.
Что VERIFIED на самом деле означает здесь
Большинство сканеров говорят вам, что что-то может быть эксплуатируемым, и оставляют триаж вам. ptai считает находку кандидатом, пока именованный машинный оракул не перезапустит эксплойт и не воспроизведёт его N из N раз. Только тогда она получает статус VERIFIED.
Три свойства делают это чем-то большим, чем лозунг:
Ни один LLM никогда не выносит вердикт. Это правило enforced в коде, а не политикой: вердикт, который не может назвать оракула, заработавшего его, отклоняется. LLM координирует запуск и рассуждает о результатах. Он никогда не решает, реален ли баг.
У каждого оракула есть контроль, который должен провалиться. Обход доверенного заголовка должен возвращать привилегированный контент с заголовком и отказ без него. Проверка утечки учётных данных должна приниматься для реального секрета и отклоняться для намеренно повреждённого двойника. Конечная точка, отвечающая 200 на всё, не получает ничего. Это то, что не позволяет "вернулся 200" быть принятым за доказательство.
Вывод сторонних сканеров сдерживается. Результаты nuclei, nikto и zap не становятся находками по собственному авторитету. Они остаются непроверенными, пока один из собственных оракулов ptai не передокажет их независимо.
Каждая VERIFIED-находка поставляется как переносимая proof-капсула — находка,
рецепт для её повторного доказательства и квитанция. Любой может ptai replay её против
живой цели и наблюдать, как оракул повторно подтверждает, не доверяя ptai. Капсулы
намеренно не подписаны: воспроизведение — это механизм доверия, а не подпись, которую нужно
принимать на веру.
Честные цифры
| Классов уязвимостей с работающим оракулом | 14 |
| Проб в библиотеке | 64 |
| Проб, которые могут получить VERIFIED | 30 |
| Видов оракулов | 24 |
| Обёрток инструментов | 203 |
| …которые сегодня парсят вывод в находки | 18 |
| MCP-инструментов | 52 |
| Специализированных агентов | 18 |
| Тестов | 2 729 на Python 3.10 / 3.12 / 3.14 |
На намеренно уязвимом honeypot 23 находки верифицируются по этим 14 классам
со 100% точностью и нулём ложных срабатываний. На стандартном OWASP Juice Shop
17 находок верифицированы в прогоне от 2026-08-23 — отчёт по in-scope HTTP / verified /
precision, а не 17/116. Сессия Path 1 MCP от 2026-08-25 (MCP-клиент, управляющий
run_probe, цель умерла до верификации оркестратором) заработала 12 verified-доказательств
со 100% точностью против 64 in-scope HTTP-вызовов (20 will-not-chase). OSINT, Web3
и UI-only ключи Juice Shop исключены из автоматизированного табло по дизайну.
Читайте эти цифры внимательно, потому что пробелы и есть суть. Существует 64 пробы, но только 30 могут получить вердикт; остальные 34 сообщают честных кандидатов. Зарегистрировано 203 обёртки, но только 18 превращают вывод инструментов в находки — остальные запускаются и возвращают сырой текст. Ворота оракула покупают точность, а не скорость обнаружения: они убирают ложные срабатывания, но не находят больше багов.
Harness honeypot (tests/honeypot/) и ворота нулевых ложных
срабатываний на чистом приложении (tests/cleanapp/) оба поставляются
в этом репозитории и запускаются в CI, так что это воспроизводимо, а не скриншоты.
Что он не делает
Сказано прямо, потому что инструмент безопасности, который себя переоценивает, хуже бесполезного.
- Это сканер веб-приложений. Все 64 пробы и все 24 вида оракулов нацелены на HTTP. AD, облако, мобильные и беспроводные имеют агентов и обёртки инструментов, но за ними нет библиотеки проб и оракулов.
- Он не может выполнять локальную эскалацию привилегий. Для этого нужен код
выполнения на хосте, которым вы уже владеете. ptai тестирует удалённо и не имеет такого канала,
поэтому агент privesc сообщает
unsupported, а не вводящее в заблуждение ноль. - Это не CVE-сканер. Нет базы данных версия-к-CVE и нет библиотеки эксплойтов. Работа с CVE ограничена поиском osv.dev по утёкшим манифестам.
- Плейбуки планируют, но не выполняют.
ptai playbook runразрешает зависимости и печатает план. Запуск его против цели ещё не подключён. - Он не автономен. Полностью автономные LLM-агенты пентеста завершают 21–31% задач от начала до конца; setup с участием человека достигают 64%. ptai создан для второго режима. Нажмите Ctrl+C дважды, чтобы взять управление на себя в середине запуска.
Полный внутренний список дефектов, включая всё вышеперечисленное, отслеживается открыто, а не тихо. Если что-то здесь не так, откройте issue, и это будет исправлено.
Установка
Путь 1 — Управляйте им из Claude Code, Cursor или Codex (без API-ключа)
Ваша существующая подписка на ИИ — это LLM. ptai предоставляет инструменты.
pip install ptai
ptai mcp install # автоопределяет ваши MCP-клиенты и записывает их конфиги
Перезапустите клиент — и 52 инструмента на месте. На этом пути ключ Anthropic не нужен — MCP-сервер по дизайну не размещает собственный LLM.
Путь 2 — Автономный CLI
pip install ptai
export ANTHROPIC_API_KEY=sk-... # или OPENAI_API_KEY
ptai start https://target.example.com
# полностью локально, без облака:
export PENTEST_AI_LLM_PROVIDER=ollama
# или детерминированно, вообще без LLM:
ptai start https://target.example.com --no-llm
Расход по умолчанию ограничен $10 на одно engagement (PTAI_PRICE_LIMIT).
Инструменты безопасности, REST API и другие опции
ptai tools install --tier core # или recommended / full
ptai tools install nmap nuclei # или по имени
ptai serve # HTTP REST + WebSocket для дашбордов
ptai menu # интерактивный лаунчер, без LLM
В начале engagement планировщик предсказывает, какие инструменты понадобятся для запуска, и один раз спрашивает разрешение установить недостающие. Откажитесь — и ответ сохранится.
Бенчмарки
Воспроизводимо, в git, с сырыми артефактами. Никакого "98,7% уровня обнаружения", который нельзя проверить.
| Инструмент | Находки | Critical+High | Корзины OWASP | Доля FP |
|---|---|---|---|---|
| ptai | 88 | 46 | 5 | 0% |
| ZAP 2.17.0 | 593 | 0 | 1 | 47% |
| Nuclei 3.8.0 | 1 | 0 | 1 | 0% |
| HexStrike v6.0 | 11 | 0 | 1 | – |
n=1, один оценщик, один прогон на OWASP Juice Shop. Методология и сырой вывод в
benchmarks/; полное описание в docs/benchmarks/juice-shop.md.
Честное прочтение: ptai силён на SPA-веб-целях с курируемым покрытием проб. HexStrike шире (облако, бинарники, CTF) и, вероятно, превосходит ptai на традиционных сканируемых поверхностях, таких как WordPress. Juice Shop также — самое задокументированное уязвимое приложение в интернете, поэтому и LLM, и авторы проб имеют фору — именно поэтому число для частного honeypot ниже и почему публикуются оба.
Встройте его в CI
- run: pip install ptai
- run: ptai start ${{ vars.STAGING_URL }} --ci --fail-on verified --sarif pentest.sarif
- uses: github/codeql-action/upload-sarif@v3
with: { sarif_file: pentest.sarif }
--fail-on verified ломает сборку только на находке, которую оракул действительно доказал,
поэтому ворота не могут быть сработаны шумом сканера. SARIF загружается в GitHub Code
Scanning, находки публикуются как комментарий к PR. Шаблоны GitLab и Jenkins в
docs/ci-cd.md.
Как это работает
recon ──▶ auth ──▶ web ──┬──▶ ad
├──▶ cloud ┌──────────────────┐
└──▶ api ──────────▶│ findings DB │
│ scope-guarded │
└────────┬─────────┘
▼
verify (oracles, N/N)
▼
chain ─▶ validate ─▶ detect ─▶ report
md · html · pdf · SARIF · JUnit
18 специализированных агентов выполняют фазы. С API-ключом каждый использует LLM для рассуждения о результатах; без него он работает как детерминированный цикл инструментов. Порядок фаз и обнаружение идентичны в обоих случаях — пробы находят баги, LLM только координирует.
Для кого это
Команды AppSec, подключающие аутентифицированное сканирование к каждому PR, с воротами, которые срабатывают только на доказанных находках. Консультанты, которым нужен отчёт, пишущий сам себя, и капсула, которую инженеры клиента могут воспроизвести сами. Охотники за баг-баунти, которые предпочтут триаж 12 доказанных находок 600 "возможно". Пользователи Claude Code / Cursor / Codex, которым нужны реальные инструменты за их ассистентом без ещё одного счёта за API.
Работайте со мной
Инструмент — MIT и бесплатен навсегда — это не изменится.
Если вы хотите получить пентест как услугу, а не запускать его сами, или размещённое рабочее пространство с историей и доступом для команды — и то и другое на pentestai.xyz. Каждая находка в сданном engagement поставляется с proof-капсулой, которую ваши инженеры могут воспроизвести сами, — это принципиально иной артефакт, чем PDF, полный оценок серьёзности.
Вопросы: [email protected]
Ответственное использование
ptai выполняет реальные сетевые и хостовые операции против указанных вами целей. Вы несёте единоличную ответственность за наличие явного письменного разрешения на каждую цель. Тестирование систем, которыми вы не владеете, может нарушать Computer Fraud and Abuse Act, Computer Misuse Act 1990, GDPR Article 32 и аналогичные законы в других странах.
Первый запуск запрашивает принятие AUP и сохраняет его. Установите
PENTEST_AI_AUP_ACCEPTED=1 в CI. Хосты вне scope отклоняются в момент
вызова инструмента. Три защитных механизма по умолчанию выключены, и их стоит включить:
intensity=safe пропускает пробы, изменяющие состояние, respect_rate_limits уважает
429/Retry-After, а strict_scope отказывает в запросах вне хоста.
Внеполосные колбэки (OAST) — конфиденциальность
Слепые классы (blind SSRF/SQLi/XXE, stored XSS, SSTI, Log4Shell) обнаруживаются через
колбэки, которые по умолчанию маршрутизируются на публичный oast.fun от ProjectDiscovery.
Каждое engagement генерирует свежую пару ключей RSA-2048 локально. Полезные нагрузки взаимодействий шифруются AES-CTR-256 в состоянии покоя, ключ оборачивается в RSA-OAEP-SHA256 к вашему публичному ключу, так что только ваш локальный процесс может их расшифровать. Но метаданные видны серверу: что взаимодействие произошло, исходный IP-адрес цели, временная метка и протокол.
PortSwigger запрещает использование публичного collaborator в своих правилах баг-баунти, и крупные программы всё чаще требуют инфраструктуру колбэков под контролем тестировщика. Для платных engagement разместите Interactsh самостоятельно:
ptai start http://target --oast-server https://oast.example.com --oast-token <T>
ptai start http://target --no-oast # или отключите полностью
FAQ
Нужен ли мне API-ключ? Нет на MCP-пути — ваша подписка Claude Code / Cursor / Codex и есть LLM. Он нужен только автономному CLI, и даже там Ollama работает полностью локально.
Автономен ли он? Нет, и он не претендует на это. Пробы обнаруживают, LLM координирует, вы решаете. Ctrl+C дважды берёт управление на себя в середине запуска.
Безопасен ли для продакшена? Только с письменным разрешением и тремя включёнными защитными механизмами выше.
Связывается ли он с домом? Нет по умолчанию. Находки остаются на вашем диске. Вы можете
включить анонимные счётчики использования с помощью ptai telemetry enable (без целей,
без находок; схема в engine/telemetry.py). OAST-колбэки по умолчанию идут на
oast.fun от ProjectDiscovery, если вы не передадите --oast-server или --no-oast.
Чем это отличается от просьбы к Claude взломать что-то? Курируемая детерминированная библиотека проб находит баги, а машинный оракул их доказывает. Один LLM даёт вам правдоподобную догадку без возможности понять, реальна ли она.
Экосистема
| Репозиторий | Что это |
|---|---|
| pentest-ai | Этот репозиторий. CLI + MCP-сервер. |
| pentest-ai-agents | Автономные файлы субагентов Claude Code. Опционально. |
Сообщество: Discord · Обсуждения · Issues
История звёзд
Старый встроенный график (api.star-history.com) пуст: GitHub ограничил публичный API stargazers, от которого зависели эти SVG. Живой ряд на star-history.com. README не хотлинкует заменяющий хост — браузер каждого посетителя загружал бы этот SVG.
Лицензия
MIT. Делайте с ним что хотите.
Если ptai сэкономил вам воскресенье, поставьте звезду репозиторию.