形式的手続き間汚染解析エンジン。アプリケーションセキュリティにおいて、関数境界、永続化レイヤー、非同期コードをまたいで信頼できないデータを追跡します。決定論的ルールリプレイにより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">AI 時代のオープンソーステイント解析エンジン</h3>
<p align="center">
アプリケーションセキュリティのための形式的なテイント解析——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>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* のオープンソース代替であり、カスタマイズしてセルフホストできる形式的な手続き間テイント解析エンジンです。AI エージェントがスキャンごとにトークンを消費することなく、セキュリティ解析を駆動できるよう設計されています。
AI はセキュリティチームが追いつけないほどの速さで本番コードを生成しており、その誤りを捉えるために作られた 2 種類のツールは、いずれも好ましくないトレードオフを強いてきました:
- **AST パターンマッチャー**(Semgrep OSS、ast-grep、各種リンター)は無料で高速ですが、データフローではなく構文を照合するため、関数境界や永続化層をまたぐ信頼できない入力はそのまますり抜けてしまいます。それを実際に捉えるより深い手続き間解析は、長らくプロプライエタリなツールの中に閉じ込められてきました。
- **LLM セキュリティエージェント**はパターンマッチャーが見逃すものを発見しますが、実行のたびにコードを読み直します。トークンはファイルごと、コミットごと、CI ビルドごとに積み重なり——それでも確率的なモデルは、すべてを捉えたと保証することはできません。
OpenTaint は、静的解析ツールのコストで LLM エージェントの深さを提供します:
- **AST パターンマッチャーが見逃すものを発見。** 形式的な手続き間データフローエンジンが、関数境界、永続化層、エイリアス、非同期コードを横断して信頼できないデータを追跡します。
- **スキャンごとではなく、モデルには一度だけ支払う。** エージェントに単一の検出結果をテイントルールへと蒸留させます。決定的なエンジンはそのルールをコードベース全体——そしてその後のすべてのコミット——に対して、数分の CPU 時間で、トークンコストゼロで再生します。
- **オープンソース、すぐに使える。** エンジン、ルール、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)をご覧ください。
---
## AI エージェントワークフロー
OpenTaint には、静的解析をエンドツーエンドのアプリケーションセキュリティワークフローへと変えるエージェントスキルが含まれています。以下のコマンドでインストールできます:
```bash
npx skills add https://github.com/seqra/opentaint
```
`appsec-agent` スキルは、プロジェクト評価の全体をオーケストレーションします:プロジェクトのビルド、OpenTaint の実行、攻撃対象領域の発見、対象を絞ったルールの追加、不足しているライブラリのデータフローのモデリング、検出結果のトリアージ、さらにオプションで、確認された脆弱性に対する動的な概念実証チェックの生成までを行います。
含まれるスキルは、一般的なセキュリティ解析のループをカバーします:
- **スキャンとトリアージ:** `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 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)、[GitLab CI テンプレート](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)の下で公開されています。