Формальный межпроцедурный движок анализа потоков данных (taint analysis) для безопасности приложений. Отслеживает недоверенные данные через границы функций, уровни постоянного хранения и асинхронный код. Готов к работе с AI-агентами с детерминированным повторением правил. Открытая альтернатива Semgrep Pro и CodeQL.
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../logos/opentaint-logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="../../logos/opentaint-logo-light.svg">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/opentaint-logo-light.svg" alt="OpenTaint" height="100">
</picture>
</p>
<h3 align="center">Открытый движок taint-анализа для эпохи ИИ</h3>
<p align="center">
Формальный taint-анализ для безопасности приложений — находит то, что пропускают движки сопоставления с AST-шаблонами, позволяет LLM-агентам оформлять уязвимости в виде правил, масштабируется там, где ни один из них не справляется в одиночку.
</p>
<p align="center">
<a href="https://github.com/seqra/opentaint/releases"><img src="https://img.shields.io/github/release/seqra/opentaint.svg" alt="Релиз GitHub"></a>
<a href="https://goreportcard.com/report/github.com/seqra/opentaint/cli"><img src="https://goreportcard.com/badge/github.com/seqra/opentaint/cli" alt="Go Report Card"></a>
<a href="https://github.com/seqra/opentaint/blob/main/LICENSE.md"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="Лицензия: Apache 2.0"></a>
<a href="https://golang.org/"><img src="https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go" alt="Версия Go"></a>
<a href="https://discord.gg/6BXDfbP4p9"><img src="https://img.shields.io/discord/1403357427176575036?logo=discord&label=Discord" alt="Discord"></a>
</p>
<p align="center">
<a href="https://github.com/seqra/opentaint/blob/main/README.md">English</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.zh.md">简体中文</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.zht.md">繁體中文</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ko.md">한국어</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.de.md">Deutsch</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.es.md">Español</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.fr.md">Français</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.it.md">Italiano</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.da.md">Dansk</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ja.md">日本語</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.pl.md">Polski</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ru.md">Русский</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.bs.md">Bosanski</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ar.md">العربية</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.no.md">Norsk</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.sv.md">Svenska</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.br.md">Português (Brasil)</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.th.md">ไทย</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.tr.md">Türkçe</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ua.md">Українська</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.bn.md">বাংলা</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.hi.md">हिन्दी</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.gr.md">Ελληνικά</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.vi.md">Tiếng Việt</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.id.md">Bahasa Indonesia</a>
</p>
<p align="center">
<a href="http://opentaint.org/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-demo-dark.gif">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-demo-light.gif">
<img src="https://assets.kitploit.com/production/public/readmes/13793/562b0290a09060eff941363dd673b805d145664f68b1074b35b7b670ede8cd66.gif" alt="Сводка результатов OpenTaint">
</picture>
</a>
</p>
<p align="center"><b>Поддерживаемые технологии и интеграции</b></p>
<p align="center">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/java-logo.svg" alt="Java" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/kotlin-logo.svg" alt="Kotlin" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/spring-boot-logo.svg" alt="Spring" height="60">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../logos/github-logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="../../logos/github-logo-light.svg">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/github-logo-light.svg" alt="GitHub" height="60">
</picture>
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/gitlab-logo.svg" alt="GitLab" height="60">
</p>
<p align="center"><i>Самый тщательный движок taint-анализа для Spring-приложений</i></p>
<p align="center"><b>Дорожная карта</b></p>
<p align="center">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/python-logo.svg" alt="Python" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/go-logo.svg" alt="Go" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/csharp-logo.svg" alt="C#" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/javascript-logo.svg" alt="JavaScript" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/typescript-logo.svg" alt="TypeScript" height="60">
</p>
<div align="center">
<details>
<summary><b>Больше скриншотов</b></summary>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-1.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-1.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/8d9998e1918080fb841ec0ad473f51269941b9b5536ff7ac24480a600ad2f648.png" alt="Результат сканирования OpenTaint">
</picture>
</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-2.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-2.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/3f916c30b3f3b64064e428101084005a58f4ae3d988703946a899f6fb5f6f22a.png" alt="Сводка результатов OpenTaint">
</picture>
</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-3.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-3.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/a9f747d50d24686930d7fb97c3539bb8f34c42f3c24a79c7f21b8e1d55a7ba43.png" alt="Сводка результатов OpenTaint">
</picture>
</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-4.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-4.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/6f527df53125d8b57390c691e3ab37080b3ed7c6c0f9614af7dbbe4e7883c046.png" alt="Сводка результатов OpenTaint">
</picture>
</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-5.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-5.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/063464f019e0d1ec835eedd8e14fb1553c50030d193a8dc6739c079bce648126.png" alt="Сводка результатов OpenTaint">
</picture>
</p>
</details>
</div>
---
## Почему OpenTaint?
> OpenTaint — это альтернатива с открытым исходным кодом для *Semgrep Pro* и *CodeQL*: формальный межпроцедурный движок taint-анализа, который можно настраивать и размещать у себя, созданный для того, чтобы ИИ-агенты управляли вашим анализом безопасности, не сжигая токены на каждом сканировании.
ИИ генерирует продакшн-код быстрее, чем команды безопасности успевают за ним, и оба типа инструментов, созданных для отлова его ошибок, навязывают неудачный компромисс:
- **Движки сопоставления с AST-шаблонами** (Semgrep OSS, ast-grep, линтеры) бесплатны и быстры, но они сопоставляют синтаксис, а не потоки данных — ненадёжный ввод, который пересекает границу функции или слой хранения, проскальзывает мимо них. Более глубокий межпроцедурный анализ, который *действительно* его ловит, давно заперт внутри проприетарных инструментов.
- **LLM-агенты безопасности** находят то, что пропускают движки сопоставления с шаблонами, но они перечитывают ваш код при каждом запуске. Токены накапливаются с каждым файлом, каждым коммитом, каждой сборкой CI — и вероятностная модель всё равно не может гарантировать, что обнаружила всё.
OpenTaint даёт вам глубину LLM-агента по цене статического анализатора:
- **Находите то, что пропускают движки сопоставления с AST-шаблонами.** Формальный межпроцедурный движок анализа потоков данных отслеживает ненадёжные данные через границы функций, слои хранения, псевдонимы и асинхронный код.
- **Платите модели один раз, а не на каждом сканировании.** Позвольте агенту дистиллировать одну находку в taint-правило. Затем детерминированный движок воспроизводит это правило по всей кодовой базе — и по каждому последующему коммиту — за минуты процессорного времени и с нулевым расходом токенов.
- **Открытый исходный код, всё включено.** Движок, правила и CI-интеграции поставляются единым стеком под лицензиями Apache 2.0 и MIT.
## Быстрый старт
**Скрипт установки (Linux/macOS)**
```
curl -fsSL https://opentaint.org/install.sh | bash
```
**Установка через Homebrew (Linux/macOS):**
```bash
brew install --cask seqra/tap/opentaint
```
**Скрипт установки (Windows PowerShell)**
```
irm https://opentaint.org/install.ps1 | iex
```
**Установка через npm (Linux/macOS/Windows):**
```bash
npm install -g @seqra/opentaint
```
**Или запустите мгновенно через npx — без установки (требуется Node.js):**
```bash
npx @seqra/opentaint scan
```
**Сканируйте ваш проект:**
```bash
opentaint scan
```
**Или используйте Docker:**
```bash
docker run --rm -v $(pwd):/project -v $(pwd):/output \
ghcr.io/seqra/opentaint:latest \
opentaint scan --output /output/results.sarif /project
```
Дополнительные параметры описаны в разделах [Установка](https://github.com/seqra/opentaint/blob/main/docs/README.md#installation) и [Использование](https://github.com/seqra/opentaint/blob/main/docs/README.md#usage).
---
## Рабочие процессы ИИ-агентов
OpenTaint включает навыки агентов, которые превращают статический анализ в сквозной рабочий процесс безопасности приложений. Установите их командой:
```bash
npx skills add https://github.com/seqra/opentaint
```
Навык `appsec-agent` оркеструет полную оценку проекта: сборка проекта, запуск OpenTaint, обнаружение поверхности атаки, добавление целевых правил, моделирование отсутствующих потоков данных библиотек, триаж находок и, при необходимости, генерация динамических proof-of-concept проверок для подтверждённых уязвимостей.
Включённые навыки покрывают типичный цикл анализа безопасности:
- **Сканирование и триаж:** `build-project`, `run-scan`, `analyze-findings`, `generate-poc`
- **Расширение покрытия:** `triage-dependencies`, `discover-attack-surface`, `create-test-project`, `create-rule`, `assemble-lib-rules`
- **Моделирование потоков данных:** `analyze-external-methods`, `create-pass-through-approximation`, `create-dataflow-approximation`, `debug-rule`, `report-analyzer-issue`
---
## Документация
Полные руководства — установка, использование, настройка, интеграция с CI/CD: **[Документация](https://github.com/seqra/opentaint/blob/main/docs/README.md)**.
## Поддержка
- **Проблемы:** [GitHub Issues](https://github.com/seqra/opentaint/issues)
- **Сообщество:** [Discord](https://discord.gg/6BXDfbP4p9)
- **Email:** [[email protected]](mailto:[email protected])
## История звёзд
<a href="https://www.star-history.com/?repos=seqra%2Fopentaint&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=seqra/opentaint&type=date&theme=dark&legend=top-left&sealed_token=cNibcudvsLJKQVlqN0qt2kK3b3-5zBDkzDzTamAWPRP6ny8KmCeZIooBYT7NBhjkd-T6OiiW7Iu9b1FSgL6n9IHMTPuoqKahF1NtidSTKkDXcbw8bY6k57DDstncYkKHJieEn9sJQ8oKJIYyBtYuQfk19qu5Kb1kvzCMT_dqOXXv3LM7EKZlljFcXAUh" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=seqra/opentaint&type=date&legend=top-left&sealed_token=cNibcudvsLJKQVlqN0qt2kK3b3-5zBDkzDzTamAWPRP6ny8KmCeZIooBYT7NBhjkd-T6OiiW7Iu9b1FSgL6n9IHMTPuoqKahF1NtidSTKkDXcbw8bY6k57DDstncYkKHJieEn9sJQ8oKJIYyBtYuQfk19qu5Kb1kvzCMT_dqOXXv3LM7EKZlljFcXAUh" />
<img alt="Star History Chart" src="https://assets.kitploit.com/production/public/readmes/placeholders/f0fc86cfe65f76d40e15aaec61704ec8220a56dc89d4be03c46f67cb31b9fa8c.svg" />
</picture>
</a>
## Лицензия
[Основной движок анализа](https://github.com/seqra/opentaint/blob/main/core) выпущен под [лицензией Apache 2.0](https://github.com/seqra/opentaint/blob/main/LICENSE.md). [CLI](https://github.com/seqra/opentaint/blob/main/cli), [GitHub Action](https://github.com/seqra/opentaint/blob/main/github), [шаблон CI GitLab](https://github.com/seqra/opentaint/blob/main/gitlab) и [правила](https://github.com/seqra/opentaint/blob/main/rules) выпущены под [лицензией MIT](https://github.com/seqra/opentaint/blob/main/cli/LICENSE).