Aller au contenu principal

Python · SAST

SAST Python qui tourne entièrement hors-ligne

Auditez votre code Python pour les vulnérabilités OWASP Top 10, les misconfigurations spécifiques aux frameworks et les risques de dépendances — sans envoyer une seule ligne au cloud. Couvre Django, Flask, FastAPI, SQLAlchemy et la stdlib.

Frameworks & bibliothèques scannés

Nous testons la couverture sur ces frameworks via fixtures. De nouveaux patterns sont ajoutés à chaque release de règles builtin.

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

Principales classes CWE détectées

Ces classes CWE apparaissent le plus souvent dans les codebases modernes de ce langage. StaticCodeAudit livre des règles dédiées pour chacune, mappées à OWASP Top 10 / ISO 27001 / ASVS quand pertinent.

CWE-89

Injection SQL

Concaténation ou f-strings utilisés pour construire des requêtes SQL — typique avec cursor.execute(f"SELECT ... {user_input}"), Django .raw() avec concat, ou SQLAlchemy .text() sans paramètres liés.

Détecté par la règle SCA : sql_injection_fstring

CWE-78

Injection de commande OS

subprocess.run(shell=True, ...), os.system() avec entrée utilisateur. Le flag shell=True permet l\'abus des métacaractères shell.

Détecté par la règle SCA : os_system_injection

CWE-502

Désérialisation non sécurisée

pickle.loads(), yaml.load() sans SafeLoader, shelve, ou marshal sur des bytes non fiables. Équivalent à une exécution de code à distance.

Détecté par la règle SCA : unsafe_deserialization

CWE-918

SSRF

requests.get(user_url), urllib.request.urlopen() sur des URLs contrôlées par l\'utilisateur sans allow-list de schéma/hôte. Permet d\'atteindre des services internes (endpoints metadata, RDS, etc.).

Détecté par la règle SCA : taint_ssrf

CWE-798

Identifiants en dur

Clés API, secrets JWT, mots de passe DB dans les sources. Détectés par entropie + patterns connus (AWS, Stripe, GitHub, Slack, etc.).

Détecté par la règle SCA : hardcoded_secret

CWE-94

Injection de code via compilation dynamique

Appels aux built-ins de compilation dynamique de Python sur des données partiellement contrôlées par l\'utilisateur.

Détecté par la règle SCA : dangerous_eval

Vulnérable vs. sain — trois exemples rapides

CWE-89 Détecté par la règle SCA : sql_injection_fstring
❌ Vulnérable
# Vulnérable — Flask + SQLAlchemy raw
@app.route('/user/<name>')
def user(name):
    sql = f"SELECT * FROM users WHERE name = '{name}'"
    return db.engine.execute(sql).fetchone()
✅ Sain
# Sain — paramètre lié
@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 Détecté par la règle SCA : os_system_injection
❌ Vulnérable
# Vulnérable — shell=True avec entrée utilisateur
import subprocess
def ping(host):
    return subprocess.run(f"ping -c 1 {host}", shell=True)
✅ Sain
# Sain — liste d'arguments, sans shell
import subprocess
def ping(host):
    return subprocess.run(["ping", "-c", "1", host], check=False)
CWE-502 Détecté par la règle SCA : unsafe_deserialization
❌ Vulnérable
# Vulnérable — yaml.load sans SafeLoader
import yaml
def load_config(blob):
    return yaml.load(blob)  # Loader complet = RCE
✅ Sain
# Sain — yaml.safe_load
import yaml
def load_config(blob):
    return yaml.safe_load(blob)

Ce que StaticCodeAudit détecte (ce langage)

  • Injection SQL en SQL brut, f-strings, .format(), Django .raw(), SQLAlchemy .text() sans paramètres liés
  • Injection de commande OS (subprocess avec shell=True, os.system, os.popen)
  • Désérialisation non sécurisée (pickle, yaml.load, marshal, shelve)
  • SSRF via requests, urllib, aiohttp sur URLs contrôlées par l'utilisateur
  • Secrets en dur (AWS, Stripe, GitHub PAT, tokens Slack, secrets JWT, mots de passe DB, clés PEM)
  • XXE et billion-laughs XML (xml.etree, lxml sans resolver désactivé)
  • Path traversal (os.path.join avec entrée utilisateur, open() sans ancrage racine)
  • Cookies non sécurisés (flags Flask/Django Secure / HttpOnly / SameSite manquants)
  • CSRF exempté (@csrf_exempt, Flask sans flask-wtf)
  • Crypto non sécurisée (MD5/SHA1 pour sécurité, mode ECB, IV en dur, random faible)
  • Mode debug activé en production Flask / Django
  • JWT non sécurisé (algorithme none, secret en dur, pas d'expiration)
  • APIs dépréciées (PyCrypto, ssl.TLSv1, style urllib2)
  • PII dans les logs et messages d'exception
  • Misconfigurations CI/CD (.gitlab-ci.yml, GitHub Actions : checkout non fiable, secrets en logs)

Auditez votre code

Auditez votre code Python pour les vulnérabilités OWASP Top 10, les misconfigurations spécifiques aux frameworks et les risques de dépendances — sans envoyer une seule ligne au cloud. Couvre Django, Flask, FastAPI, SQLAlchemy et la stdlib.

Télécharger le binaire démo Réserver une démo guidée