SAST — cómo encontrar vulnerabilidades en el código antes de que las encuentren los hackers
Publicado el 15.01.2026
¿Alguna vez te has preguntado cómo los programadores experimentados encuentran errores en el código ajeno con solo mirarlo? Buscan patrones. Saben que si los datos del usuario entran directamente en una consulta SQL —eso es malo. Si la contraseña se compara con un == en lugar de una función segura —es un riesgo.
Pero una persona no puede revisar 100 000 líneas de código sin pasar algo por alto. Aquí entra en escena SAST (Static Application Security Testing).
¿Qué es SAST y cómo funciona?
SAST es una tecnología de análisis de código fuente que funciona sin ejecutar la aplicación. Imagina que es un «corrector ortográfico» muy avanzado (spell-checker), solo que no busca errores tipográficos sino vulnerabilidades arquitectónicas y lógicas.
¿Cómo lo hace?
- Escaneo: la herramienta descompone tu código en sus partes (construye el llamado árbol sintáctico abstracto — AST).
- Análisis de flujo de datos (Taint Analysis): esta es la parte más “inteligente”. El escáner sigue la ruta de los datos desde la “fuente” (por ejemplo, un campo de entrada en el navegador) hasta el “sumidero” (una función que escribe en la base de datos o muestra en pantalla).
- Búsqueda de coincidencias: si los datos siguen un camino desde el usuario hasta una función peligrosa sin una limpieza previa (validación), SAST da la alarma.
¿Para qué sirve si ya hay tests?
Muchos novatos piensan: «Tengo tests unitarios y pruebas de integración, ellos comprobarán que todo funciona». El problema es que los tests verifican funcionamiento, no seguridad.
- Test: verifica que al introducir el nombre de usuario
Ivanse guardeIvanen la base de datos. - SAST: verifica qué ocurre si el usuario introduce
' OR 1=1 --. Ve que tu código no está preparado para ese escenario, incluso si funcionalmente todo parece perfecto.
La herramienta principal: introducción a Semgrep
Hoy la industria se aleja de herramientas pesadas y caras hacia opciones ligeras y rápidas. Semgrep es el estándar de oro para el desarrollador moderno. Es gratuito para Open Source, soporta decenas de lenguajes y funciona increíblemente rápido.
¿Por qué Semgrep?
A diferencia de los escáneres antiguos que inundaban al desarrollador con miles de “falsos positivos”, Semgrep trabaja con reglas simples y comprensibles. Tú mismo puedes escribir una regla para tu proyecto en 5 minutos.
Ejemplo práctico: inyección SQL
Veamos el error clásico en Python/Flask:
@app.route("/user")
def get_user():
user_id = request.args.get("id")
# PELIGRO: la variable se inserta directamente en la cadena de consulta
query = "SELECT * FROM users WHERE id = %s" % user_id
db.execute(query)
Semgrep lo detectará mediante una regla que dice más o menos: «Encontrar cualquier llamada a db.execute() donde se pase una cadena formada con % o f-strings, si en ella intervienen datos de request».
Cómo ejecutar Semgrep localmente
Instalación:
pip install semgrep
o
brew install semgrep
Ejecución en la carpeta del proyecto:
semgrep scan --config auto
La herramienta detectará el lenguaje del código, descargará las reglas de seguridad actuales de la comunidad y generará un informe.
Integrando SAST en el proceso (Shift Left)
En DevSecOps existe el concepto Shift Left («mover hacia la izquierda»). Esto significa que la seguridad debe comenzar lo antes posible —en la etapa de desarrollo del código— y no justo antes del lanzamiento.
Automatización en GitHub/GitLab
No debes ejecutar el escáner manualmente. La forma más efectiva es configurarlo para que se ejecute en cada Pull Request.
Si tu colega (o tú mismo) añade código vulnerable por error, el sistema de CI (por ejemplo, GitHub Actions) simplemente no permitirá fusionar ese código en la rama principal hasta que se corrija el fallo. Esto crea una «cultura de calidad» donde la seguridad no es una etapa aparte, sino parte del trabajo diario.
Lidiando con el “ruido”: ¿qué hacer con los falsos positivos?
Ningún escáner es perfecto. A veces SAST marcará código seguro como peligroso. Esto se llama falso positivo.
Cómo manejarlo:
- Ajuste de reglas: si una regla es demasiado “paranoica”, se puede desactivar o afinar.
- Ignorar (Supresión en línea): en la mayoría de las herramientas puedes dejar un comentario encima de la línea de código (por ejemplo,
# nosemgrep) explicando por qué ahí es seguro. - Triage (clasificación): en equipos grandes, los líderes de seguridad revisan los informes y los marcan como “corregir” o “falso positivo”.
Resumen: tres reglas de SAST para principiantes
- Comienza con lo básico: instala Semgrep y simplemente ejecútalo una vez en tu proyecto. Te sorprenderá la cantidad de consejos útiles que dará (no solo sobre seguridad, sino también sobre estilo de código).
- Automatiza: el código que no se comprueba automáticamente es código potencialmente vulnerable. Configura la comprobación en CI.
- No temas los errores: SAST no es un examen, sino tu compañero. Te ayuda a mejorar como desarrollador, enseñándote a detectar patrones peligrosos.