Zum Hauptinhalt springen

Python · SAST

Python-SAST, das vollständig offline läuft

Auditieren Sie Ihren Python-Code auf OWASP-Top-10-Schwachstellen, Framework-spezifische Fehlkonfigurationen und Abhängigkeitsrisiken — ohne eine einzige Zeile in die Cloud zu senden. Deckt Django, Flask, FastAPI, SQLAlchemy und die Standardbibliothek ab.

Geprüfte Frameworks & Bibliotheken

Wir testen die Abdeckung über Fixtures auf diesen Frameworks. Neue Muster werden in jedem Builtin-Regel-Release ergänzt.

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

Häufigste erkannte CWE-Klassen

Diese CWE-Klassen treten in modernen Codebasen dieser Sprache am häufigsten auf. StaticCodeAudit liefert dedizierte Regeln für jede, gemappt auf OWASP Top 10 / ISO 27001 / ASVS, sofern relevant.

CWE-89

SQL-Injection

String-Formatierung oder f-Strings zum Bau von SQL-Queries — typisch bei cursor.execute(f"SELECT ... {user_input}"), Django .raw() mit Concat, oder SQLAlchemy .text() ohne Bind-Parameter.

Erkannt von SCA-Regel: sql_injection_fstring

CWE-78

OS-Befehlsinjektion

subprocess.run(shell=True, ...), os.system() mit User-Input. Das Flag shell=True ermöglicht Shell-Metazeichen-Missbrauch.

Erkannt von SCA-Regel: os_system_injection

CWE-502

Unsichere Deserialisierung

pickle.loads(), yaml.load() ohne SafeLoader, shelve, oder marshal auf nicht vertrauenswürdigen Bytes. Entspricht Remote Code Execution.

Erkannt von SCA-Regel: unsafe_deserialization

CWE-918

SSRF

requests.get(user_url), urllib.request.urlopen() auf User-kontrollierten URLs ohne Schema-/Host-Allowlist. Lässt Angreifer interne Dienste erreichen (Metadaten-Endpoints, RDS, etc.).

Erkannt von SCA-Regel: taint_ssrf

CWE-798

Hartkodierte Zugangsdaten

API-Keys, JWT-Secrets, DB-Passwörter in Quelldateien. Erkannt durch Entropie + bekannte Muster (AWS, Stripe, GitHub, Slack, etc.).

Erkannt von SCA-Regel: hardcoded_secret

CWE-94

Code-Injektion via dynamische Kompilierung

Aufrufe von Pythons dynamischen Kompilierungs-Built-ins auf teilweise user-kontrollierten Daten.

Erkannt von SCA-Regel: dangerous_eval

Verwundbar vs. sicher — drei kurze Beispiele

CWE-89 Erkannt von SCA-Regel: sql_injection_fstring
❌ Verwundbar
# Verwundbar — Flask + SQLAlchemy raw
@app.route('/user/<name>')
def user(name):
    sql = f"SELECT * FROM users WHERE name = '{name}'"
    return db.engine.execute(sql).fetchone()
✅ Sicher
# Sicher — Bind-Parameter
@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 Erkannt von SCA-Regel: os_system_injection
❌ Verwundbar
# Verwundbar — shell=True mit User-Input
import subprocess
def ping(host):
    return subprocess.run(f"ping -c 1 {host}", shell=True)
✅ Sicher
# Sicher — Argumentliste, kein Shell
import subprocess
def ping(host):
    return subprocess.run(["ping", "-c", "1", host], check=False)
CWE-502 Erkannt von SCA-Regel: unsafe_deserialization
❌ Verwundbar
# Verwundbar — yaml.load ohne SafeLoader
import yaml
def load_config(blob):
    return yaml.load(blob)  # voller Loader = RCE
✅ Sicher
# Sicher — yaml.safe_load
import yaml
def load_config(blob):
    return yaml.safe_load(blob)

Was StaticCodeAudit erkennt (diese Sprache)

  • SQL-Injection in rohem SQL, f-Strings, .format(), Django .raw(), SQLAlchemy .text() ohne Bind-Parameter
  • OS-Befehlsinjektion (subprocess mit shell=True, os.system, os.popen)
  • Unsichere Deserialisierung (pickle, yaml.load, marshal, shelve)
  • SSRF via requests, urllib, aiohttp mit User-kontrollierten URLs
  • Hartkodierte Secrets (AWS, Stripe, GitHub PAT, Slack-Tokens, JWT-Secrets, DB-Passwörter, PEM-Keys)
  • XXE und Billion-Laughs XML (xml.etree, lxml ohne deaktivierten Resolver)
  • Path Traversal (os.path.join mit User-Input, open() ohne Root-Anchor)
  • Unsichere Cookies (Flask/Django Flags Secure / HttpOnly / SameSite fehlen)
  • CSRF-Ausnahme (@csrf_exempt, Flask ohne flask-wtf)
  • Unsichere Krypto (MD5/SHA1 für Security, ECB-Modus, hartkodierter IV, schwache Zufallszahlen)
  • Debug-Modus aktiviert in Flask-/Django-Produktion
  • Unsicheres JWT (Algorithmus none, hartkodiertes Secret, kein Ablauf)
  • Veraltete APIs (PyCrypto, ssl.TLSv1, urllib2-Stil)
  • PII in Logs und Exception-Nachrichten
  • CI/CD-Fehlkonfigurationen (.gitlab-ci.yml, GitHub Actions: unsicherer Checkout, Secrets in Logs)

Auditieren Sie Ihren Code

Auditieren Sie Ihren Python-Code auf OWASP-Top-10-Schwachstellen, Framework-spezifische Fehlkonfigurationen und Abhängigkeitsrisiken — ohne eine einzige Zeile in die Cloud zu senden. Deckt Django, Flask, FastAPI, SQLAlchemy und die Standardbibliothek ab.

Demo-Binary herunterladen Geführte Demo buchen