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.
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 — 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 — 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 — shell=True avec entrée utilisateur
import subprocess
def ping(host):
return subprocess.run(f"ping -c 1 {host}", shell=True)
# 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 — yaml.load sans SafeLoader
import yaml
def load_config(blob):
return yaml.load(blob) # Loader complet = RCE
# 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 (
subprocessavecshell=True,os.system,os.popen) - Désérialisation non sécurisée (
pickle,yaml.load,marshal,shelve) - SSRF via
requests,urllib,aiohttpsur 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,lxmlsans resolver désactivé) - Path traversal (
os.path.joinavec entrée utilisateur,open()sans ancrage racine) - Cookies non sécurisés (flags Flask/Django
Secure/HttpOnly/SameSitemanquants) - CSRF exempté (
@csrf_exempt, Flask sansflask-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