¿QUÉ ES Y POR QUÉ ES CRUCIAL?
SAST (Static Application Security Testing) inspecciona el código fuente en reposo (sin ejecutarlo) analizando el flujo de datos (Taint Analysis) de extremo a extremo: desde una fuente no confiable (ej. un parámetro HTTP) hasta un sumidero peligroso (ej. una query SQL). Permite identificar fallas lógicas, inyecciones y malas prácticas durante la fase de desarrollo, directamente en el IDE o en cada Pull Request.
⚠️ RIESGOS Y AMENAZAS EN ESTA ETAPA:
- Inyecciones SQL por concatenación directa de entradas de usuario en consultas.
- Cross-Site Scripting (XSS) y fallas en la desinfección de HTML/JS.
- Uso de funciones criptográficas obsoletas o algoritmos débiles (ej. MD5 o SHA-1 para almacenar contraseñas).
🧰 CATÁLOGO DE HERRAMIENTAS DESTACADAS
SonarQube
Open Source (LGPL-3.0, Community Edition) / EnterprisePlataforma líder para la inspección continua de la calidad y seguridad del código en más de 30 lenguajes, con Quality Gates configurables que bloquean el pipeline si no se cumplen umbrales de seguridad.
Semgrep
Open Source (LGPL-2.1) / CloudMotor de análisis estático ultra veloz basado en reglas semánticas (pattern matching sobre el AST) muy sencillas de escribir y personalizar para cualquier lenguaje, sin necesidad de entender compiladores.
CodeQL
Gratuito en repos públicos / GitHub Advanced Security en privadosMotor de análisis estático desarrollado por GitHub (adquirió Semmle) que trata el código fuente como una base de datos relacional consultable con su propio lenguaje de queries (QL), permitiendo detectar patrones de vulnerabilidad muy complejos entre archivos.
Bandit
Open Source (Apache-2.0)Herramienta especializada en encontrar problemas de seguridad comunes en código fuente Python (ej. uso de eval, subprocess con shell=True, contraseñas hardcodeadas) construyendo y recorriendo el AST del código.
🔧 INTEGRACIÓN EN PIPELINES DE CI/CD
Ejemplos listos para copiar y adaptar. El objetivo es que el job falle (exit code ≠ 0) y bloquee el merge/deploy cuando aparece un hallazgo de severidad alta -- ese es el "gate" real de DevSecOps.
name: sast-semgrep
on: [push, pull_request]
jobs:
semgrep:
runs-on: ubuntu-latest
container:
image: semgrep/semgrep # imagen oficial, evita el semgrep-action deprecado
steps:
- uses: actions/checkout@v4
- name: Semgrep CI (reglas OWASP + p/security-audit)
run: semgrep ci --config p/security-audit --config p/owasp-top-ten
env:
SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }} # opcional, sólo si usás Semgrep Cloud
# Nota: para repos en GitHub también se recomienda habilitar CodeQL vía
# Settings > Code security > Code scanning (github/codeql-action), gratuito en repos públicos.
trigger:
- main
pr:
- main
pool:
vmImage: 'ubuntu-latest'
container: semgrep/semgrep
steps:
- checkout: self
- script: |
semgrep ci --config p/security-audit --config p/owasp-top-ten --sarif --output semgrep.sarif
displayName: 'Semgrep - SAST scan'
env:
SEMGREP_APP_TOKEN: $(SEMGREP_APP_TOKEN) # definido como variable secreta del pipeline
- publish: semgrep.sarif
artifact: semgrep-results
displayName: 'Publicar resultados SARIF'
- Correr SAST en cada Pull Request / Merge Request como Quality Gate, no sólo en un job nocturno.
- Establecer una política de remediación priorizando Inyecciones y RCE por sobre hallazgos de estilo.
- Capacitar a los desarrolladores en codificación segura (OWASP Top 10 / OWASP ASVS) para reducir falsos positivos recurrentes.