In diesem Lab installierst du Semgrep auf deiner Kali-VM, klonst ein bewusst verwundbares Flask-Projekt und führst eine statische Code-Analyse durch. Danach interpretierst du ausgewählte Findings um mögliche Verbesserungen abzuleiten.
Semgrep ist ein statisches Analysewerkzeug für Quellcode. Vereinfacht gesagt: Semgrep sucht nicht nur nach Text wie grep, sondern erkennt Code-Strukturen und typische unsichere Muster. Dokumentation: https://semgrep.dev/docs/
⚠️ Führe automatisierte Sicherheitswerkzeuge nur gegen Systeme, Repositories oder Anwendungen aus, für die du eine klare Freigabe hast. Du analysierst in diesem Lab ausschließlich lokalen Quellcode aus einem bewusst verwundbaren Trainingsprojekt. Du startest keine Angriffe gegen fremde Systeme.
Auf aktuellen Kali-Versionen solltest du Python-Werkzeuge nicht systemweit mit sudo pip install installieren. Kali markiert das System-Python als extern verwaltet. Das schützt dein System davor, dass apt und pip gegenseitig Pakete überschreiben. Kali beschreibt das hier: https://www.kali.org/docs/general-use/python3-external-packages/
Wir nutzen deshalb eine virtuelle Python Umgebung. Das ist quasi ein eigener Python-Bereich den wir nur für dieses Lab erstellen. Die System-Installation und andere installierte Tools und Pakete bleiben sauber.
Öffne ein Terminal und installiere die benötigten Basispakete (ggf. sind sie bereits installiert):
sudo apt update
sudo apt install -y git python3 python3-pip python3-venv
Die Pakete haben folgende Aufgabe:
git lädt das Beispiel-Repository von GitHub herunterpython3 führt Python-Programme auspython3-pip installiert Python-Paketepython3-venv erstellt isolierte Python-UmgebungenErstelle jetzt die virtuelle Umgebung:
python3 -m venv ~/semgrep-lab-venv
Aktiviere die Umgebung:
source ~/semgrep-lab-venv/bin/activate
Du erkennst die aktivierte Umgebung daran, dass dein Prompt vorne meist (semgrep-lab-venv) anzeigt.
Aktualisiere pip und installiere Semgrep:
python3 -m pip install --upgrade pip
python3 -m pip install semgrep
Prüfe die Installation:
semgrep --version
💡 Wenn du ein neues Terminal öffnest, musst du die Umgebung erneut aktivieren:
source ~/semgrep-lab-venv/bin/activate
Für das Lab nutzen wir Vulnerable-Flask-App. Das ist eine bewusst verwundbare Flask-Anwendung für Demos und Trainings: https://github.com/we45/Vulnerable-Flask-App
Flask ist ein leichtgewichtiges Python-Framework für Webanwendungen und APIs.
Erstelle einen Lab-Ordner und klone das Repository:
mkdir -p ~/labs
cd ~/labs
git clone https://github.com/we45/Vulnerable-Flask-App.git
cd Vulnerable-Flask-App
Der Befehl git clone lädt den Quellcode aus dem GitHub-Repository in einen lokalen Ordner. Danach wechselst du mit cd direkt in das Projekt.

Bevor du einen Scanner startest, solltest du grob verstehen, was du analysierst. Verschaffe dir zuerst einen Überblick über die Dateien. Du solltest unter anderem Dateien unter app/ sehen. Dort liegt der eigentliche Anwendungscode.
Öffne die zentrale Python-Datei zum Beispiel in einem Code Editor und verschaffe dir einen Eindruck. Du musst den Code jetzt noch nicht vollständig verstehen. Achte nur darauf, welche Art von Anwendung du vor dir hast: eine Python-Webanwendung, die Routen, Datenbankzugriffe und Sicherheitslogik enthält.

Starte jetzt eine erste Analyse mit Semgrep:
semgrep ./app -o output.txt
Das „./app“ bedeutet, dass es ausgehend vom aktuellen Verzeichnis die Dateien in „app“ untersuchen soll. Der Parameter „-o“ sagt, dass der Output in die Datei geschrieben werden soll. Das kann man auch weglassen, um den Output direkt in der Shell zu sehen.
Semgrep läuft einen Augenblick und sollte danach in etwa folgendes zeigen:
┌──────────────┐
│ Scan Summary │
└──────────────┘
Scan completed successfully.
• Findings: 20 (20 blocking)
• Rules run: 456
• Targets scanned: 10
• Parsed lines: ~100.0%
• Scan was limited to files tracked by git
• For a detailed list of skipped files and lines, run semgrep with the --verbose flag
Ran 456 rules on 10 files: 20 findings.
- Missed out on 1856 pro rules since you aren't logged in!
- Supercharge Semgrep OSS when you create a free account at https://sg.run/rules.
Unter anderem ist folgendes im Output zu finden:

Semgrep zeigt hier die Codezeile 261 in app/app.py. Das lässt sich im Code Editor nachprüfen.

Das Problem liegt tatsächlich in der von Semgrep gefundenen Zeile. Der Wert aus search_term wird direkt in den SQL-String eingesetzt. Wenn search_term aus einer Anfrage kommt, kann ein Angreifer somit den Inhalt beeinflussen, was direkt in einer SQL-Injection endet. Semgrep erkennt dieses Muster hier korrekt.
Wichtig: Semgrep findet nicht automatisch jede Schwachstelle. Die freie Standardausführung der Semgrep CLI nutzt nur eine sehr begrenzte Regelabdeckung. Das Beispielprojekt ist bewusst verwundbar und enthält offensichtlich noch weitere Sicherheitsprobleme. Einige werden von Semgrep gemeldet, andere hängen von Konfiguration, Laufzeitverhalten oder fachlicher Logik ab. Ein SAST-Scan ist deshalb nur eine Schutzschicht im Entwicklungsprozess, nicht der vollständige Sicherheitsnachweis einer Anwendung.