Ir al contenido principal

Python · SAST

SAST Python que se ejecuta totalmente sin conexión

Audite su código Python contra vulnerabilidades OWASP Top 10, misconfiguraciones específicas de frameworks y riesgos de dependencias — sin enviar una sola línea a la nube. Cubre Django, Flask, FastAPI, SQLAlchemy y la stdlib.

Frameworks y librerías escaneados

Probamos la cobertura mediante fixtures en estos frameworks. Se añaden nuevos patrones en cada release de reglas integradas.

Django Flask FastAPI SQLAlchemy Pyramid Tornado aiohttp Starlette Pandas NumPy Requests urllib3 PyYAML paramiko cryptography pyjwt

Principales clases CWE detectadas

Estas clases CWE aparecen con mayor frecuencia en bases de código modernas de este lenguaje. StaticCodeAudit incluye reglas dedicadas para cada una, mapeadas a OWASP Top 10 / ISO 27001 / ASVS cuando es pertinente.

CWE-89

Inyección SQL

Concatenación o f-strings usados para construir queries SQL — típico con cursor.execute(f"SELECT ... {user_input}"), Django .raw() con concat, o SQLAlchemy .text() sin parámetros bind.

Detectado por la regla SCA: sql_injection_fstring

CWE-78

Inyección de comando OS

subprocess.run(shell=True, ...), os.system() con entrada de usuario. El flag shell=True permite abuso de metacaracteres shell.

Detectado por la regla SCA: os_system_injection

CWE-502

Deserialización insegura

pickle.loads(), yaml.load() sin SafeLoader, shelve, o marshal sobre bytes no confiables. Equivale a ejecución remota de código.

Detectado por la regla SCA: unsafe_deserialization

CWE-918

SSRF

requests.get(user_url), urllib.request.urlopen() sobre URLs controladas por usuario sin allow-list de esquema/host. Permite alcanzar servicios internos (endpoints metadata, RDS, etc.).

Detectado por la regla SCA: taint_ssrf

CWE-798

Credenciales hardcoded

API keys, secretos JWT, contraseñas de BD en archivos fuente. Detectados por entropía + patrones conocidos (AWS, Stripe, GitHub, Slack, etc.).

Detectado por la regla SCA: hardcoded_secret

CWE-94

Inyección de código vía compilación dinámica

Llamadas a los built-ins de compilación dinámica de Python sobre datos parcialmente controlados por el usuario.

Detectado por la regla SCA: dangerous_eval

Vulnerable vs. seguro — tres ejemplos rápidos

CWE-89 Detectado por la regla SCA: sql_injection_fstring
❌ Vulnerable
# Vulnerable — Flask + SQLAlchemy raw
@app.route('/user/<name>')
def user(name):
    sql = f"SELECT * FROM users WHERE name = '{name}'"
    return db.engine.execute(sql).fetchone()
✅ Seguro
# Seguro — parámetro bind
@app.route('/user/<name>')
def user(name):
    sql = text("SELECT * FROM users WHERE name = :name")
    return db.engine.execute(sql, {"name": name}).fetchone()
CWE-78 Detectado por la regla SCA: os_system_injection
❌ Vulnerable
# Vulnerable — shell=True con entrada de usuario
import subprocess
def ping(host):
    return subprocess.run(f"ping -c 1 {host}", shell=True)
✅ Seguro
# Seguro — lista de argumentos, sin shell
import subprocess
def ping(host):
    return subprocess.run(["ping", "-c", "1", host], check=False)
CWE-502 Detectado por la regla SCA: unsafe_deserialization
❌ Vulnerable
# Vulnerable — yaml.load sin SafeLoader
import yaml
def load_config(blob):
    return yaml.load(blob)  # Loader completo = RCE
✅ Seguro
# Seguro — yaml.safe_load
import yaml
def load_config(blob):
    return yaml.safe_load(blob)

Qué detecta StaticCodeAudit (este lenguaje)

  • Inyección SQL en SQL crudo, f-strings, .format(), Django .raw(), SQLAlchemy .text() sin parámetros bind
  • Inyección de comando OS (subprocess con shell=True, os.system, os.popen)
  • Deserialización insegura (pickle, yaml.load, marshal, shelve)
  • SSRF vía requests, urllib, aiohttp con URLs controladas por usuario
  • Secretos hardcoded (AWS, Stripe, GitHub PAT, tokens Slack, secretos JWT, contraseñas BD, claves PEM)
  • XXE y billion-laughs XML (xml.etree, lxml sin resolver deshabilitado)
  • Path traversal (os.path.join con entrada usuario, open() sin anclaje raíz)
  • Cookies inseguras (flags Flask/Django Secure / HttpOnly / SameSite faltantes)
  • CSRF exento (@csrf_exempt, Flask sin flask-wtf)
  • Cripto insegura (MD5/SHA1 para seguridad, modo ECB, IV hardcoded, random débil)
  • Modo debug activado en producción Flask / Django
  • JWT inseguro (algoritmo none, secreto hardcoded, sin expiración)
  • APIs deprecadas (PyCrypto, ssl.TLSv1, estilo urllib2)
  • PII en logs y mensajes de excepción
  • Misconfiguraciones CI/CD (.gitlab-ci.yml, GitHub Actions: checkout no confiable, secretos en logs)

Audite su código

Audite su código Python contra vulnerabilidades OWASP Top 10, misconfiguraciones específicas de frameworks y riesgos de dependencias — sin enviar una sola línea a la nube. Cubre Django, Flask, FastAPI, SQLAlchemy y la stdlib.

Descargar el binario demo Reservar una demo guiada