Tabla de contenidos
Title
Tabla de contenidos
Tabla de contenidos
Title

Static Application Security Testing (SAST)

Updated

SAST (Static Application Security Testing) es un método de pruebas que analiza el código fuente, el bytecode o los binarios de una aplicación en busca de debilidades de seguridad, sin ejecutarla. La herramienta convierte el código en un árbol de sintaxis abstracta y sigue el flujo de control y de datos para encontrar dónde una entrada no confiable llega a una operación sensible. Como lee el código en sí, puede correr desde el primer commit, antes de que haya algo desplegado.

La ficha de MITRE sobre inyección SQL dice que el análisis estático automatizado detecta muchas instancias de esa debilidad y, en la misma sección, que "100% accuracy and coverage are not feasible". Las dos mitades de esa frase se pueden medir. El escáner de Fluid Attacks alcanza una tasa de verdaderos positivos del 100 % y una tasa de falsos positivos del 0 % en el conjunto de pruebas OWASP Benchmark v1.2, un resultado que cualquiera puede reproducir con un solo comando de Docker. Frente a una aplicación real con 1.201 vulnerabilidades, ese mismo escáner reportó el 22,7 %.

Esta página cubre cómo el análisis estático lee el código, qué debilidades alcanza y cuáles no, cómo funciona el SAST en Fluid Attacks, en qué se diferencia de DAST y SCA, y qué no demuestra un escaneo limpio.

¿Qué es SAST?

SAST, también llamado análisis estático o pruebas estáticas de seguridad de aplicaciones, es un método de pruebas de caja blanca: la herramienta tiene acceso completo a la estructura interna y a la lógica de la aplicación, y nunca ejecuta el programa. Examina código fuente, bytecode o binarios compilados, y reporta el archivo y la línea donde está cada debilidad.

SAST trabaja en tres etapas. El parsing convierte el código en un árbol de sintaxis abstracta que representa funciones, variables y estructuras de control. El análisis de flujo de control mapea los caminos que puede tomar la ejecución. El análisis de flujo de datos rastrea los valores mientras se mueven entre esos caminos, que es como el análisis de código fuente conecta una entrada controlada por un atacante con la operación que confía en ella.

Las reglas de detección se montan sobre ese modelo. Las herramientas SAST codifican patrones asociados a clases de debilidad conocidas, mapeadas a catálogos como el OWASP Top 10 y CWE, de modo que una coincidencia produce un hallazgo con categoría, severidad y ubicación.

Qué no es SAST

Tres técnicas se agrupan bajo "escaneo de código". Responden preguntas distintas, y la diferencia importa cuando un reporte vuelve limpio.

Técnica

Qué lee

Qué responde

Qué no puede decirte

Pruebas estáticas de seguridad de aplicaciones

Tu propio código fuente, bytecode o binarios

Dónde se escribió lógica insegura

Si la falla es explotable en el entorno desplegado

Análisis de composición de software

Dependencias de terceros y sus versiones

Qué CVE conocidas heredaste

Nada sobre el código que escribió tu equipo

Escaneo de secretos

Archivos e historial de commits

Qué credenciales se subieron

Si esas credenciales siguen vigentes

Tres escaneos, tres preguntas. Un resultado limpio en uno no dice nada de los otros dos.

Por qué importa SAST

La mayor parte del riesgo de una aplicación a la medida está en el código que escribió el equipo, y SAST es la única técnica que lo lee antes de que la aplicación exista. Ese es el argumento práctico para correrlo.

La mayoría de las vulnerabilidades está en el código que escribiste

En el benchmark de Fluid Attacks de 36 herramientas AppSec de terceros contra una aplicación con 1.201 vulnerabilidades en 105 categorías CWE, el 80 % de ellas estaba en el código, el 13 % en el backend y el resto en dependencias y en el frontend. El reporte State of Attacks 2026, que cubre 1.119.396 vulnerabilidades reportadas entre el 1 de enero y el 31 de diciembre de 2025, muestra la misma forma: 978.820 de ellas se encontraron en código fuente.

El volumen no es la severidad

La automatización encuentra casi todo lo que hay, y la parte menor de lo que importa. En ese mismo reporte, las técnicas automatizadas detectaron el 88,4 % de todas las vulnerabilidades, pero solo el 73,4 % de las altas y críticas, y la exposición al riesgo promedio por hallazgo automatizado fue de 15,5 CVSSF frente a 93,2 CVSSF por hallazgo reportado por un pentester.

Esas dos cifras fijan la expectativa para cualquier programa de SAST: cobertura amplia del código y un perfil de severidad que todavía necesita pruebas de seguridad de otro tipo encima.

La retroalimentación llega donde se escribe el código

Un hallazgo de SAST entregado en el IDE o en un pull request lo lee la persona que escribió la línea, minutos después de escribirla. Ese momento es lo que hace de la técnica parte de DevSecOps y no de una auditoría: las correcciones ocurren mientras el contexto sigue fresco, y el mismo circuito mejora la calidad general de la aplicación, no solo su seguridad.

Los hábitos de programación segura se forman igual. Un desarrollador que ve la misma regla de SAST dispararse tres veces deja de escribir el patrón.

SAST en Fluid Attacks

Fluid Attacks corre SAST como un escáner que puedes ejecutar tú, con resultados entregados en la plataforma, en el IDE y en el pipeline de CI. Lo que sigue es el alcance de nuestro SAST, la evidencia que produce y los límites que medimos.

Qué escaneamos, y bajo qué reglas

El escáner cubre 15 lenguajes de programación, seis protocolos de API, ocho formatos de infraestructura como código y 19 herramientas de CI/CD. También lee archivos de configuración y marca credenciales subidas al repositorio.

Las reglas son públicas. La Fluid Attacks Database tiene 2.200 reglas de seguridad en 45 objetivos, mapeadas a 173 estándares, que cubren código, nube, aplicaciones y binarios. Cada regla remite a una entrada de debilidad con su descripción, impacto, guía de remediación y los requisitos que hace cumplir.

La debilidad 146, inyección SQL, es un ejemplo concreto: una debilidad, 35 reglas de detección escritas para Java, C#, PHP, Python, Dart, TypeScript, Rust, Swift, Go, JavaScript, Elixir, Ruby, Scala y Kotlin, con ejemplos de remediación en 11 lenguajes. La debilidad 009 cubre credenciales y otros datos sensibles dejados en el código fuente

Reglas de detección de inyección SQL por lenguaje en Fluid Attacks Database

Una debilidad, 35 reglas de detección en catorce lenguajes y frameworks.

Cómo se ve en la práctica

Dónde corre

Cómo se dispara

Qué obtienes

CLI en un contenedor Docker

Un solo comando docker run contra un archivo de configuración

Un archivo de hallazgos en CSV

GitHub Action

Un push a la rama por defecto corre un escaneo completo; las ramas de trabajo y los pull requests corren un escaneo diferencial

Un archivo SARIF, listo para subir a la pestaña Security de GitHub

Extensiones de IDE

Abrir un archivo en el editor

El hallazgo junto a la línea que lo causó

Plataforma de gestión de vulnerabilidades

Cada escaneo

Severidad, exposición al riesgo, ubicación y guía de remediación

CI Gate

Ejecución del pipeline

Un build roto cuando un hallazgo incumple la política que definiste

El mismo escáner, cinco puntos de entrada. El modo diferencial es lo que mantiene rápida la retroalimentación en los pull requests.

Un benchmark perfecto no es una aplicación segura

El escáner de Fluid Attacks obtiene 100 % en el OWASP Benchmark: una tasa de verdaderos positivos del 100 % y una tasa de falsos positivos del 0 % en la versión 1.2 del conjunto de pruebas, casi tres veces el puntaje promedio de las herramientas comerciales de detección y más de 1,5 veces el de la mejor herramienta gratuita. La documentación publica los comandos para reproducirlo: clonar el repositorio del benchmark, correr el contenedor del escáner y generar el scorecard con el plugin de OWASP.

Scorecard del escáner SAST de Fluid Attacks en el OWASP Benchmark v1.2

El escáner alcanza una tasa de verdaderos positivos del 100 % y una tasa de falsos positivos del 0 % en el conjunto v1.2. .Fluid Attacks, 2026.

Ese número describe un conjunto de pruebas sintético en Java, construido para ser medible. No describe tu aplicación. En el benchmark contra una aplicación real, el mismo escáner reportó 273 de 1.201 vulnerabilidades —22,7 % de recall con 99 % de precisión—, mientras que un pentester trabajando el mismo objetivo reportó 1.076 de ellas, 89,6 % de recall con 100 % de precisión.

Evaluador y objetivo

Recall

Precisión

Qué es el objetivo

Escáner de Fluid Attacks en OWASP Benchmark v1.2

100 %

100 %

Un conjunto de pruebas sintético en Java

Escáner de Fluid Attacks en una aplicación real

22,7 %

99 %

1.201 vulnerabilidades reales, 105 categorías CWE

Un pentester de Fluid Attacks en la misma aplicación

89,6 %

100 %

El mismo objetivo, 49 días de trabajo

Promedio de las otras 34 herramientas de terceros

1,7 %

Varía

El mismo objetivo

Los dos resultados son del mismo escáner. La distancia entre ellos es la distancia entre un conjunto de pruebas y un código real.

Un puntaje perfecto es evidencia sobre el motor, no una afirmación sobre tu riesgo.

De un hallazgo estático a una CVE

Un hallazgo es una pista. La investigación de Fluid Attacks sobre los resultados de AI SAST describe lo que pasa en el medio: de 1.006 hallazgos generados y revisados, 163 sobrevivieron al triaje manual como verdaderos positivos, 118 quedaron tras consolidar duplicados y 28 llegaron a evaluación como candidatos a CVE. Las etapas intermedias: análisis contextual, revisión de fuente a sumidero, reproducción, deduplicación y divulgación.

Ese proceso termina en nuestros Advisories, donde las entradas detectadas por el escáner de AI SAST llevan un identificador CVE y el nombre del investigador que las divulgó.

Advisories de CVE detectadas por el escáner AI SAST de Fluid Attacks

Un hallazgo estático se convierte en CVE solo después del triaje manual, la reproducción y la divulgación.

La práctica que decide el resto

Escanear por calendario produce reportes. Escanear en cada cambio, con una compuerta, produce correcciones. Los sistemas que usan nuestro CI Gate alcanzaron una tasa de remediación del 72,2 % frente al 58 % de los que no lo usan, con una mediana de remediación de 22 días frente a 30, en el periodo de 2025 que cubre el reporte State of Attacks 2026.

Para profundizar: AI SAST explica cómo el aprendizaje automático amplía el conjunto de reglas, y nuestro benchmark contra agentes de codificación midió al AI SAST encontrando 72 de 100 vulnerabilidades reales en 52 bases de código, frente a 9 de Codex y 8 de Claude Code con el mismo prompt de auditoría.

Cómo lee el código SAST

SAST responde una pregunta, una y otra vez: ¿puede un valor que controla un atacante llegar a una operación que confía en él? Todo en el análisis sirve a esa pregunta.

  1. El parsing convierte texto en estructura. El árbol de sintaxis abstracta le da a la herramienta funciones, parámetros, asignaciones y ramas, en vez de caracteres.

  2. El análisis de flujo de control mapea el orden en que pueden ejecutarse las instrucciones, incluidas las ramas que solo corren bajo ciertas condiciones.

  3. El análisis de flujo de datos sigue los valores por ese mapa, desde las fuentes —parámetros de petición, encabezados, contenido de archivos, lecturas de base de datos— hasta los sumideros, que son las operaciones donde un valor no confiable hace daño: una consulta, un comando de shell, una respuesta HTML, una ruta de archivo.

  4. La coincidencia de reglas decide qué reporta SAST. Una regla de inyección SQL se dispara cuando un valor contaminado llega a la construcción de la consulta sin parametrización, y se queda callada cuando una sentencia parametrizada o una lista de permitidos validada rompe el camino.

Recorrido del análisis estático del código fuente al hallazgo y sus límites

Parsing, flujo de control, flujo de datos, coincidencia de reglas: de dónde sale un hallazgo y dónde se detiene. Elaboración propia.

La cadena también explica el punto ciego. Todo lo que SAST sabe viene de código presente y parseable. La configuración que se aplica al desplegar, un sanitizador implementado en un servicio que no ve, un control de autorización que impone una puerta de enlace: nada de eso está en el árbol.

Qué encuentra SAST y qué se le escapa

SAST es más fuerte con las debilidades visibles como patrón en el código: un valor que viaja desde una fuente no confiable hasta una operación peligrosa, una llamada criptográfica con un parámetro débil, una credencial escrita como literal. El análisis de código fuente las alcanza porque la evidencia está en el archivo.

Clase de debilidad

Por qué el análisis estático la alcanza

Qué sigue sin poder confirmar

Inyección SQL

El valor contaminado y la construcción de la consulta están en el código

Si los privilegios de la cuenta limitan el impacto

Cross-site scripting reflejado

Datos no confiables llegan al contenido web generado sin validación

Si un encabezado de respuesta o una CSP bloquea la ejecución

Ejecución remota de comandos

Los comandos del sistema se construyen con entradas manipulables desde fuera

Si el usuario en ejecución puede ejecutar algo útil

Inyección XML (XXE)

La configuración del parser y la resolución de entidades se declaran en el código

Si el parser desplegado usa esa configuración

Información sensible en el código fuente

Las credenciales aparecen como literales en archivos e historial

Si la credencial sigue vigente

Cada fila es una entrada de la Fluid Attacks Database, con sus reglas y su guía de remediación.

La técnica trae dos modos de fallo, y MITRE documenta los dos para inyección SQL. Los falsos positivos aparecen cuando la herramienta no reconoce que hay validación, lo que produce alertas sin consecuencia de seguridad. Los falsos negativos aparecen cuando no puede analizar funciones de API propias o librerías de terceros, "especially if the API/library code is not available for analysis". La conclusión de MITRE sobre el análisis estático automatizado es la frase que vale la pena guardar: "100% accuracy and coverage are not feasible".

Los falsos negativos son el problema silencioso. Un reporte limpio se lee como buena noticia, y nada en él distingue "aquí no hay debilidad" de "no hay regla para esto". Por eso combinamos SAST con revisiones manuales de código en el plan Advanced, y por eso la cobertura ponderada por severidad, y no el conteo de hallazgos, es la métrica que vale la pena seguir.

SAST, DAST y SCA no son alternativas

Leen material distinto en momentos distintos, y los vacíos de una son la cobertura de otra. Las diferencias entre las tres se reducen a qué puede observar cada una.

Las Pruebas Dinámicas de Seguridad de Aplicaciones (DAST) atacan una aplicación en ejecución desde fuera, sin acceso al código. El Análisis de Composición de Software (SCA) inventaría los componentes de terceros y los compara contra vulnerabilidades conocidas. SAST lee el código que escribió tu equipo, que ninguna de las otras dos ve nunca.

Característica

SAST

DAST

Método de prueba

Caja blanca, de adentro hacia afuera

Caja negra, de afuera hacia adentro

Análisis

Lee el código sin ejecutar la aplicación

Simula ataques contra una aplicación en ejecución

Cuándo aplica

Desde el primer commit

Cuando hay una aplicación desplegada y funcionando

Hallazgos típicos

Inyección, manejo inseguro de datos, criptografía débil, secretos quemados

Configuración en ejecución, fallas de autenticación, problemas del lado del servidor

Depende del lenguaje

Sí: la herramienta debe soportar el lenguaje y el framework

No: interactúa desde fuera

Detalle de remediación

Archivo y número de línea

La petición que lo disparó, no la línea

Modo de fallo principal

Falsos positivos por falta de contexto de ejecución

Falsos negativos en caminos de código que nunca alcanza

SAST y DAST no se ponen de acuerdo sobre dónde mirar, que es justo por lo que correr las dos cubre más que correr una dos veces.

Fluid Attacks las combina en una sola solución, junto con Secure Code Review (SCR), Pentesting as a Service (PTaaS) y Reverse Engineering (RE), de modo que los hallazgos de cada técnica llegan a la misma cola y con la misma escala de severidad.

Cómo correr SAST con eficacia

  1. Comprar un escáner es la decisión más pequeña de un programa de SAST. Cinco prácticas deciden si produce correcciones.

  1. Elige para tu stack, no para una lista de funciones: la herramienta SAST debe soportar los lenguajes y frameworks que tus equipos usan de verdad, y publicar cómo se midió su precisión. Un proveedor que no puede decirte cómo reproducir sus propias cifras te dio una afirmación, no una medición.

  1. Configura antes de escalar: ajusta el conjunto de reglas, delimita el escaneo al código que es tuyo y registra las exclusiones de forma explícita, para que un hallazgo suprimido sea una decisión documentada y no un vacío silencioso.

  1. Integra donde ocurre el trabajo: extensiones de IDE para el minuto en que se escribe el código, escaneos diferenciales en los pull requests para el minuto en que se propone, escaneos completos en la rama por defecto para todo lo demás. La guía de programación segura cae mejor en ese momento.

  1. Prioriza por exposición, no por conteo: tría por severidad y explotabilidad. En nuestros datos de 2025, el 4,5 % de las vulnerabilidades reportadas cargaba el 79,9 % de la exposición total al riesgo, que es la razón por la que un conteo de hallazgos es una mala cola de trabajo.

  1. Verifica la corrección y deja la compuerta: vuelve a escanear después de remediar y mantén la compuerta del pipeline haciendo cumplir la política. La alternativa es un reporte que documenta la misma vulnerabilidad durante un año.

Conclusiones

SAST lee el código que escribió tu equipo, antes de que haya algo que atacar, y señala la línea exacta. Es una capacidad estrecha y valiosa: la mayoría de las vulnerabilidades de una aplicación a la medida vive en ese código, y ninguna otra técnica lo ve tan temprano.

Los límites de SAST son tan específicos como sus fortalezas. No puede confirmar la explotabilidad en un entorno desplegado, no puede razonar sobre código que no logra parsear, y un reporte limpio no es una aplicación segura. Trata un escaneo de SAST como la primera capa de evidencia, mídelo por el riesgo que cubre y no por los hallazgos que imprime, y pon encima las técnicas que ven ejecución, dependencias y lógica de negocio.

Preguntas frecuentes

¿Cuál es la diferencia entre SAST y DAST?

SAST lee código fuente, bytecode o binarios sin ejecutar la aplicación y reporta la línea exacta. Puede correr desde el primer commit. DAST ataca una aplicación en ejecución desde fuera, sin acceso al código, así que encuentra problemas de ejecución y configuración que son invisibles en el código fuente. Fallan en direcciones opuestas: SAST produce falsos positivos por falta de contexto de ejecución, y las pruebas dinámicas se pierden los caminos de código que nunca alcanzan.

¿SAST necesita que la aplicación esté corriendo?

No. Esa es la propiedad que define la técnica: analiza código en reposo, que es por lo que puede usarse antes de que la aplicación compile o se despliegue, y por lo que no puede observar el comportamiento en ejecución.

¿SAST puede encontrar todas las vulnerabilidades de mi código?

No. MITRE afirma que para el análisis estático automatizado "100% accuracy and coverage are not feasible". En el benchmark de Fluid Attacks contra una aplicación con 1.201 vulnerabilidades, nuestro escáner reportó el 22,7 % de ellas con 99 % de precisión, mientras que un pentester trabajando el mismo objetivo reportó el 89,6 % con 100 % de precisión.

¿Cuál es la diferencia entre SAST y AI SAST?

El SAST tradicional compara el código contra reglas escritas por personas, así que encuentra los patrones que esas reglas anticipan. AI SAST suma aprendizaje automático para generar candidatos y agentes para rastrear contexto entre archivos, lo que amplía la cobertura de flujos que cruzan módulos. En nuestro benchmark sobre 52 bases de código, encontró 72 de 100 vulnerabilidades reales frente a 9 de un agente de codificación de propósito general con el mismo prompt.

¿Un reporte limpio de SAST significa que mi aplicación es segura?

No. Significa que ninguna regla coincidió con el código escaneado. El código no parseado, las librerías de terceros, la configuración que se aplica al desplegar y las fallas de lógica de negocio quedan fuera del análisis, y un falso negativo se ve exactamente igual que un resultado limpio.

¿Qué tan preciso es el escáner SAST de Fluid Attacks?

En el conjunto de pruebas OWASP Benchmark v1.2 alcanza una tasa de verdaderos positivos del 100 % y una tasa de falsos positivos del 0 %, para un puntaje de 100 %, y la documentación publica los comandos para reproducirlo. Contra una aplicación real con 1.201 vulnerabilidades reportó el 22,7 % de ellas con 99 % de precisión. Las dos cifras describen el mismo escáner contra objetivos distintos.

Lee el error antes de que alguien lo ejecute

Nuestros escáneres y pentesters revisan tu código fuente desde el primer commit, para que las vulnerabilidades se corrijan mientras todavía son baratas. Prueba gratuita · Contáctanos.

Ejecuta SAST sobre lo que cambia en cada pull request

Reduce el riesgo sin retrasar tus entregas

Resultados rápidos y exactos desde un único programa de seguridad continuo impulsado por IA, escáneres y pentesters.

Reduce el riesgo sin retrasar tus entregas

Resultados rápidos y exactos desde un único programa de seguridad continuo impulsado por IA, escáneres y pentesters.

Reduce el riesgo sin retrasar tus entregas

Resultados rápidos y exactos desde un único programa de seguridad continuo impulsado por IA, escáneres y pentesters.