Motore formale di analisi della contaminazione inter-procedurale per la sicurezza delle applicazioni. Tiene traccia dei dati non affidabili attraverso i confini delle funzioni, i livelli di persistenza e il codice asincrono. Pronto per agenti AI con replay deterministico delle regole. Alternativa open-source a Semgrep Pro e 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">Il motore open source di taint analysis per l'era dell'IA</h3>
<p align="center">
Taint analysis formale per la sicurezza delle applicazioni — trova ciò che i motori di AST-pattern matching non rilevano, consente agli agenti LLM di applicare vulnerabilità come regole, scala dove nessuno dei due può farlo da solo.
</p>
<p align="center">
<a href="https://github.com/seqra/opentaint/releases"><img src="https://img.shields.io/github/release/seqra/opentaint.svg" alt="Release 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="Licenza: Apache 2.0"></a>
<a href="https://golang.org/"><img src="https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go" alt="Versione 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="Riepilogo dell'output di OpenTaint">
</picture>
</a>
</p>
<p align="center"><b>Tecnologie e integrazioni supportate</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>Il motore di analisi taint più completo per le applicazioni Spring</i></p>
<p align="center"><b>Roadmap</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>Altri screenshot</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="Risultato della scansione 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="Riepilogo dell'output di 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="Riepilogo dell'output di 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="Riepilogo dell'output di 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="Riepilogo dell'output di OpenTaint">
</picture>
</p>
</details>
</div>
---
## Perché OpenTaint?
> OpenTaint è un'alternativa open source a *Semgrep Pro* e *CodeQL* — un motore di taint formale e inter-procedurale che puoi personalizzare e ospitare in autonomia, pensato perché siano gli agenti AI a guidare la tua analisi di sicurezza senza bruciare token a ogni scansione.
L'IA genera codice di produzione più velocemente di quanto i team di sicurezza riescano a tenere il passo, e i due tipi di strumenti nati per intercettare i suoi errori impongono entrambi un brutto compromesso:
- **Gli AST-pattern matcher** (Semgrep OSS, ast-grep, linter) sono gratuiti e veloci, ma confrontano la sintassi, non il flusso dei dati — un input non attendibile che attraversa il confine di una funzione o un livello di persistenza sfugge senza problemi. L'analisi più profonda e inter-procedurale che invece *lo* intercetta è rimasta a lungo chiusa dentro strumenti proprietari.
- **Gli agenti di sicurezza LLM** trovano ciò che i pattern matcher non rilevano, ma rileggono il tuo codice a ogni esecuzione. I token si accumulano a ogni file, a ogni commit, a ogni build di CI — e un modello probabilistico comunque non può promettere di aver intercettato tutto.
OpenTaint ti offre la profondità di un agente LLM al costo di un analizzatore statico:
- **Trova ciò che gli AST-pattern matcher non rilevano.** Un motore di dataflow formale e inter-procedurale traccia i dati non attendibili attraverso i confini delle funzioni, i livelli di persistenza, gli alias e il codice asincrono.
- **Paga il modello una volta sola, non a ogni scansione.** Lascia che un agente distilli una singola scoperta in una regola di taint. Il motore deterministico riapplica poi quella regola sull'intera codebase — e su ogni commit successivo — in pochi minuti di CPU, a costo zero di token.
- **Open source, tutto incluso.** Motore, regole e integrazioni CI arrivano come un unico stack sotto Apache 2.0 e MIT.
## Avvio rapido
**Script di installazione (Linux/macOS)**
```
curl -fsSL https://opentaint.org/install.sh | bash
```
**Installazione tramite Homebrew (Linux/macOS):**
```bash
brew install --cask seqra/tap/opentaint
```
**Script di installazione (Windows PowerShell)**
```
irm https://opentaint.org/install.ps1 | iex
```
**Installazione tramite npm (Linux/macOS/Windows):**
```bash
npm install -g @seqra/opentaint
```
**Oppure esegui subito con npx — senza installazione (richiede Node.js):**
```bash
npx @seqra/opentaint scan
```
**Scansiona il tuo progetto:**
```bash
opentaint scan
```
**Oppure usa Docker:**
```bash
docker run --rm -v $(pwd):/project -v $(pwd):/output \
ghcr.io/seqra/opentaint:latest \
opentaint scan --output /output/results.sarif /project
```
Per ulteriori opzioni, consulta [Installazione](https://github.com/seqra/opentaint/blob/main/docs/README.md#installation) e [Utilizzo](https://github.com/seqra/opentaint/blob/main/docs/README.md#usage).
---
## Workflow per agenti IA
OpenTaint include skill per agenti che trasformano l'analisi statica in un workflow end-to-end di sicurezza delle applicazioni. Installale con:
```bash
npx skills add https://github.com/seqra/opentaint
```
La skill `appsec-agent` orchestra una valutazione completa del progetto: compila il progetto, esegue OpenTaint, scopre la superficie di attacco, aggiunge regole mirate, modella i flussi di dati mancanti delle librerie, effettua il triage dei risultati e, opzionalmente, genera verifiche dinamiche proof-of-concept per le vulnerabilità confermate.
Le skill incluse coprono il ciclo comune di analisi della sicurezza:
- **Scansione e triage:** `build-project`, `run-scan`, `analyze-findings`, `generate-poc`
- **Espansione della copertura:** `triage-dependencies`, `discover-attack-surface`, `create-test-project`, `create-rule`, `assemble-lib-rules`
- **Modellazione del dataflow:** `analyze-external-methods`, `create-pass-through-approximation`, `create-dataflow-approximation`, `debug-rule`, `report-analyzer-issue`
---
## Documentazione
Guide complete — installazione, utilizzo, configurazione, integrazione CI/CD: **[Documentazione](https://github.com/seqra/opentaint/blob/main/docs/README.md)**.
## Supporto
- **Segnalazioni:** [GitHub Issues](https://github.com/seqra/opentaint/issues)
- **Comunità:** [Discord](https://discord.gg/6BXDfbP4p9)
- **Email:** [[email protected]](mailto:[email protected])
## Cronologia delle stelle
<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>
## Licenza
Il [motore di analisi principale](https://github.com/seqra/opentaint/blob/main/core) è rilasciato sotto la [Licenza Apache 2.0](https://github.com/seqra/opentaint/blob/main/LICENSE.md). Il [CLI](https://github.com/seqra/opentaint/blob/main/cli), la [GitHub Action](https://github.com/seqra/opentaint/blob/main/github), il [template CI GitLab](https://github.com/seqra/opentaint/blob/main/gitlab) e le [regole](https://github.com/seqra/opentaint/blob/main/rules) sono rilasciati sotto la [Licenza MIT](https://github.com/seqra/opentaint/blob/main/cli/LICENSE).