Motor formal de análisis de flujo de datos interprocedimental para seguridad de aplicaciones. Rastrea datos no confiables a través de límites de funciones, capas de persistencia y código asíncrono. Listo para agentes de IA con reproducción determinista de reglas. Alternativa de código abierto a Semgrep Pro y 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">El motor de analisis de taint de codigo abierto para la era de la IA</h3>
<p align="center">
Analisis de taint formal para la seguridad de aplicaciones — encuentra lo que los motores de coincidencia de patrones AST pasan por alto, permite a los agentes LLM aplicar vulnerabilidades como reglas, escala donde ninguno puede hacerlo por si 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="Lanzamiento en 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="Licencia: Apache 2.0"></a>
<a href="https://golang.org/"><img src="https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go" alt="Version de 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="Salida de resumen de OpenTaint">
</picture>
</a>
</p>
<p align="center"><b>Tecnologias e integraciones compatibles</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>El motor de análisis de taint más exhaustivo para aplicaciones Spring</i></p>
<p align="center"><b>Hoja de ruta</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>Mas capturas de pantalla</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="Salida de escaneo de 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="Salida de resumen de 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="Salida de resumen de 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="Salida de resumen de 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="Salida de resumen de OpenTaint">
</picture>
</p>
</details>
</div>
---
## Por que OpenTaint?
> OpenTaint es una alternativa de codigo abierto a *Semgrep Pro* y *CodeQL* — un motor de taint interprocedimental formal que puedes personalizar y autoalojar, creado para que los agentes de IA dirijan tu analisis de seguridad sin quemar tokens en cada escaneo.
La IA genera codigo de produccion mas rapido de lo que los equipos de seguridad pueden seguir, y los dos tipos de herramientas creadas para atrapar lo que falla cada una impone un mal compromiso:
- **Los motores de coincidencia de patrones AST** (Semgrep OSS, ast-grep, linters) son gratuitos y rapidos, pero coinciden con la sintaxis, no con el flujo de datos — la entrada no confiable que cruza un limite de funcion o una capa de persistencia pasa de largo. El analisis mas profundo e interprocedimental que *si* lo atrapa lleva mucho tiempo encerrado en herramientas propietarias.
- **Los agentes de seguridad LLM** encuentran lo que los motores de coincidencia de patrones pasan por alto, pero releen tu codigo en cada ejecucion. Los tokens se acumulan con cada archivo, cada commit, cada build de CI — y un modelo probabilistico aun no puede prometer que lo haya detectado todo.
OpenTaint te da la profundidad de un agente LLM al costo de un analizador estatico:
- **Encuentra lo que los motores de coincidencia de patrones AST pasan por alto.** Un motor de flujo de datos interprocedimental formal rastrea datos no confiables a traves de limites de funciones, capas de persistencia, alias y codigo asincrono.
- **Paga el modelo una vez, no en cada escaneo.** Deja que un agente destile un solo hallazgo en una regla de taint. El motor determinista luego reproduce esa regla en toda la base de codigo — y en cada commit posterior — en minutos de CPU, con cero costo de tokens.
- **Codigo abierto, con todo incluido.** Motor, reglas e integraciones de CI vienen como una sola pila bajo Apache 2.0 y MIT.
## Inicio rapido
**Script de instalacion (Linux/macOS)**
```
curl -fsSL https://opentaint.org/install.sh | bash
```
**Instalar via Homebrew (Linux/macOS):**
```bash
brew install --cask seqra/tap/opentaint
```
**Script de instalacion (Windows PowerShell)**
```
irm https://opentaint.org/install.ps1 | iex
```
**Instalar via npm (Linux/macOS/Windows):**
```bash
npm install -g @seqra/opentaint
```
**O ejecuta al instante con npx — sin necesidad de instalacion (requiere Node.js):**
```bash
npx @seqra/opentaint scan
```
**Escanea tu proyecto:**
```bash
opentaint scan
```
**O usa Docker:**
```bash
docker run --rm -v $(pwd):/project -v $(pwd):/output \
ghcr.io/seqra/opentaint:latest \
opentaint scan --output /output/results.sarif /project
```
Para mas opciones, consulta [Instalacion](https://github.com/seqra/opentaint/blob/main/docs/README.md#installation) y [Uso](https://github.com/seqra/opentaint/blob/main/docs/README.md#usage).
---
## Flujos de trabajo de agentes de IA
OpenTaint incluye habilidades de agente que convierten el analisis estatico en un flujo de trabajo de seguridad de aplicaciones de extremo a extremo. Instalalas con:
```bash
npx skills add https://github.com/seqra/opentaint
```
La habilidad `appsec-agent` orquesta una evaluacion completa del proyecto: compilar el proyecto, ejecutar OpenTaint, descubrir la superficie de ataque, agregar reglas especificas, modelar flujos de datos de bibliotecas faltantes, hacer triaje de los hallazgos y, opcionalmente, generar comprobaciones dinamicas de prueba de concepto para las vulnerabilidades confirmadas.
Las habilidades incluidas cubren el ciclo habitual de analisis de seguridad:
- **Escaneo y triaje:** `build-project`, `run-scan`, `analyze-findings`, `generate-poc`
- **Ampliacion de cobertura:** `triage-dependencies`, `discover-attack-surface`, `create-test-project`, `create-rule`, `assemble-lib-rules`
- **Modelado de flujo de datos:** `analyze-external-methods`, `create-pass-through-approximation`, `create-dataflow-approximation`, `debug-rule`, `report-analyzer-issue`
---
## Documentacion
Guias completas — instalacion, uso, configuracion, integracion CI/CD: **[Documentacion](https://github.com/seqra/opentaint/blob/main/docs/README.md)**.
## Soporte
- **Issues:** [GitHub Issues](https://github.com/seqra/opentaint/issues)
- **Comunidad:** [Discord](https://discord.gg/6BXDfbP4p9)
- **Correo electronico:** [[email protected]](mailto:[email protected])
## Historial de estrellas
<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>
## Licencia
El [motor de analisis principal](https://github.com/seqra/opentaint/blob/main/core) se distribuye bajo la [Licencia Apache 2.0](https://github.com/seqra/opentaint/blob/main/LICENSE.md). La [CLI](https://github.com/seqra/opentaint/blob/main/cli), [GitHub Action](https://github.com/seqra/opentaint/blob/main/github), [plantilla de CI de GitLab](https://github.com/seqra/opentaint/blob/main/gitlab) y las [reglas](https://github.com/seqra/opentaint/blob/main/rules) se distribuyen bajo la [Licencia MIT](https://github.com/seqra/opentaint/blob/main/cli/LICENSE).