
Cake Fuzzer ist ein Projekt, das dabei helfen soll, automatisch und kontinuierlich Schwachstellen in Webanwendungen zu entdecken, die auf Basis bestimmter Frameworks erstellt wurden – mit sehr wenigen Fehlalarmen.
Neueste Version: 1.0
Lizenz: GNU GPL v3.0
Cake Fuzzer ist ein Projekt, das dazu dient, automatisch und kontinuierlich Schwachstellen in Webanwendungen zu entdecken, die auf bestimmten Frameworks basieren, mit sehr geringen Fehlalarmen. Derzeit ist es für die Unterstützung des Cake PHP Frameworks implementiert.
Wenn Sie mehr über den Forschungsprozess erfahren möchten, lesen Sie diese Artikelserie: CakePHP Application Cybersecurity Research
Nachfolgend eine Liste einiger Bugs, die von Cake Fuzzer entdeckt wurden:
| Titel | Schweregrad | Link |
|---|---|---|
| Blinde SQL-Injection in Cerebrate | 9.8 Kritisch | https://zigrin.com/advisories/cerebrate-blind-sql-injection/ |
| SQL-Injection in CRUD-Komponente | 8.8 Hoch | https://zigrin.com/advisories/misp-sql-injection-in-crud-component/ |
| DOM-basiertes XSS | 6.1 Mittel | https://zigrin.com/advisories/misp-dom-based-xss/ |
| Blinde SQL-Injection im order-Parameter | 8.8 Hoch | https://zigrin.com/advisories/misp-blind-sql-injection-in-order-parameter/ |
| Blinde SQL-Injection in Array-Eingabeparametern | 8.8 Hoch | https://zigrin.com/advisories/misp-blind-sql-injection-in-array-input-parameters/ |
| Zeitbasierte SQL-Injection in /Logs/index | 7.2 Hoch | https://zigrin.com/advisories/misp-time-based-sql-injection-in-logs-index/ |
Typische Ansätze zur Erkennung von Schwachstellen mit automatisierten Tools in Webanwendungen sind:
Beide Methoden haben Nachteile. SAST führt zu einem hohen Prozentsatz an Fehlalarmen – Ergebnissen, die entweder keine Schwachstellen oder nicht ausnutzbare Schwachstellen sind. DAST verursacht weniger Fehlalarme, entdeckt aber aufgrund der begrenzten Informationen weniger Schwachstellen. Es erfordert außerdem einige Kenntnisse über die Anwendung und einen Sicherheitshintergrund der Person, die den Scan durchführt. Dies erfordert oft eine benutzerdefinierte Scan-Konfiguration pro Anwendung, damit es ordnungsgemäß funktioniert.
Das Cake Fuzzer Projekt soll die Vorteile beider Ansätze kombinieren und die oben genannten Nachteile beseitigen. Dieser Ansatz wird als Interactive Application Security Testing (IAST) bezeichnet.
Die Ziele des Projekts sind:
Hinweis: Einige Schwachstellenklassen sind nicht das Ziel von Cake Fuzzer, daher wird Cake Fuzzer sie nicht erkennen können. Beispiele für solche Klassen sind Schwachstellen in der Geschäftslogik und Zugriffskontrollprobleme.

Drawio: Cake Fuzzer Architektur
Cake Fuzzer besteht aus 3 Hauptservern (relativ unabhängig), die insgesamt dynamische Schwachstellentests von CakePHP-Anwendungen ermöglichen.
Andere Komponenten umfassen:
Cake Fuzzer basiert auf dem Konzept des Interactive Application Security Testing (IAST). Es enthält eine vordefinierte Menge von Angriffen, die vor der Ausführung zufällig modifiziert werden. Cake Fuzzer kennt die internen Abläufe der Anwendung dank des Cake PHP Frameworks, daher werden die Angriffe auf alle möglichen Einstiegspunkte der Anwendung gestartet.
Während des Angriffs überwacht Cake Fuzzer verschiedene Aspekte der Anwendung und des darunterliegenden Systems wie:
Diese Informationsquellen ermöglichen es Cake Fuzzer, mehr Schwachstellen zu identifizieren und mit höherer Sicherheit zu melden.
Der folgende Abschnitt beschreibt die Schritte zur Einrichtung einer Cake Fuzzer Entwicklungsumgebung, in der das Ziel die veraltete MISP v2.4.146 ist, die anfällig für CVE-2021-41326 ist.
Führen Sie die folgenden Befehle auf Ihrem Host-Betriebssystem aus, um eine veraltete MISP-VM herunterzuladen:
cd ~/Downloads # Oder wo immer Sie die MISP-VM speichern möchten
wget https://vm.misp-project.org/MISP_v2.4.146@0c25b72/[email protected] -O MISP.zip
unzip MISP.zip
rm MISP.zip
mv VMware/ MISP-2.4.146
Führen Sie die folgenden Aktionen in der VMWare-GUI durch, um die gemeinsame Nutzung von Cake Fuzzer-Dateien zwischen Ihrem Host-Betriebssystem und MISP vorzubereiten:
Führen Sie die folgenden Befehle auf Ihrem Host-Betriebssystem aus (ersetzen Sie MISP_IP_ADDRESS durch die zuvor notierte IP-Adresse):
ssh-copy-id misp@MISP_IP_ADDRESS
ssh misp@MISP_IP_ADDRESS
Sobald Sie per SSH in MISP eingeloggt sind, führen Sie die folgenden Befehle (im MISP-Terminal) aus, um die gemeinsame Nutzung der Cake Fuzzer-Dateien zwischen Host-Betriebssystem und MISP abzuschließen:
sudo apt update
sudo apt-get -y install open-vm-tools open-vm-tools-desktop
sudo apt-get -y install build-essential module-assistant linux-headers-virtual linux-image-virtual && sudo dpkg-reconfigure open-vm-tools
sudo mkdir /cake_fuzzer # Hinweis: Dieser Pfad ist festgelegt, da er in der Instrumentierung (einer der Patches) fest codiert ist
sudo vmhgfs-fuse .host:/cake_fuzzer /cake_fuzzer -o allow_other -o uid=1000 -o max_write=61440
# max_write behebt einen seltsamen Dateikopierfehler: https://github.com/vmware/open-vm-tools/issues/437#issuecomment-669663891
ls -l /cake_fuzzer # Wenn alles gut läuft, sollten Sie den Inhalt des Cake Fuzzer-Verzeichnisses von Ihrem Host-Betriebssystem sehen. Änderungen auf Ihrem Host-Betriebssystem werden in der VM widergespiegelt und umgekehrt.
Bereiten Sie MISP für einfache Tests vor (im MISP-Terminal):
CAKE=/var/www/MISP/app/Console/cake
SUDO='sudo -H -u www-data'
$CAKE userInit -q
$SUDO $CAKE Admin setSetting "Security.password_policy_length" 1
$SUDO $CAKE Admin setSetting "Security.password_policy_complexity" '/.*/'
$SUDO $CAKE Password [email protected] admin --override_password_change
Installieren Sie abschließend die Cake Fuzzer-Abhängigkeiten und bereiten Sie die Venv vor (im MISP-Terminal):
source /cake_fuzzer/precheck.sh
Cake Fuzzer scannt nach Schwachstellen, die sich im Ordner /cake_fuzzer/strategies befinden.
Um einen neuen Angriff hinzuzufügen, müssen wir eine neue new-attack.json-Datei in den strategies-Ordner einfügen.
Jede Schwachstelle enthält zwei Hauptfelder: Scenarios und Scanners. In Scenarios werden die Basisformen der Angriffs-Payloads gespeichert. Scanner hingegen erkennen Regex oder Phrasen für Antwort, stout, sterr, Protokolle und Ergebnisse.
ScenariosUm einen Payload zu erstellen, müssen Sie zunächst die Schwachstelle verstehen und wissen, wie sie mit möglichst wenigen Payloads erkannt werden kann.
Beim Erstellen des Szenarios sollten Sie an möglichst allgemeine Payloads denken. Je allgemeiner der Payload, desto wahrscheinlicher ist es jedoch, dass er Fehlalarme verursacht.
Es ist vorzuziehen, einen Kanarienvogelwert wie __cakefuzzer__new-attack_§CAKEFUZZER_PAYLOAD_GUID§__ in Ihren Szenarien zu verwenden.
Der Kanarienvogelwert enthält einen festen String (z. B. __cakefuzzer__new-attack_) und eine dynamische Kennung, die vom Fuzzer dynamisch geändert wird (GUID-Teil §CAKEFUZZER_PAYLOAD_GUID§). Der erste Kanarienvogelteil wird verwendet, um sicherzustellen, dass der Payload von Scanners erkannt wird. Der zweite Teil, die GUID, wird bei jeder Ausführung Ihres Payloads in einen pseudozufälligen Wert übersetzt. Wenn Ihr Payload also in einen von der Anwendung verwendeten Parameter injiziert wird, ändert sich der Kanarienvogel in etwas wie __cakefuzzer__new-attack_8383938__, wobei 8383938 über alle anderen Angriffe hinweg eindeutig ist.
ScannersUm einen Scanner zu erstellen, müssen Sie zunächst verstehen, wie sich die Anwendung verhalten kann, wenn die Schwachstelle ausgelöst wird. Es gibt einige Scanner-Typen, die Sie verwenden können, wie z. B. Antwort, sterr, Protokolle, Dateien und Prozesse. Jeder Scanner dient einem anderen Zweck.
Wenn Sie beispielsweise einen Scanner für XSS erstellen, suchen Sie nach Hinweisen auf die Schwachstelle in der HTML-Antwort der Anwendung. Sie können den ResultOutputScanner verwenden, um nach dem Kanarienvogelwert und dem Payload zu suchen. SQL-Injection-Schwachstellen können dagegen über Fehlerprotokolle erkannt werden. Dafür können Sie LogFilesContentsScanner und ResultErrorsScanner verwenden.
Scanner-regulären Ausdrücke ist die Generierung eines effizienten Regex. Vermeiden Sie Regex, die auf alle Fälle zutreffen .* oder .+. Sie sind sehr zeitaufwendig und erhöhen die Zeit, die für den gesamten Scan benötigt wird, drastisch.Wie bereits erwähnt, ist die Effizienz ein wichtiger Teil der Schwachstellen. Sowohl Scenarios als auch Scanners sollten so wenige Elemente wie möglich enthalten. Dies liegt daran, dass Cake Fuzzer jedes einzelne Szenario in allen möglichen erkannten Pfaden mehrmals ausführt. Andererseits werden alle Antworten, neuen Protokolleinträge usw. ständig von den Scannern überprüft. Es werden viele Parameter, Pfade und Endpunkte erkannt, daher wirkt sich die Verwendung von mehr Payloads oder Scanner recht stark auf die Effizienz aus.
Wenn Sie eine bestimmte Schwachstellenklasse nicht scannen möchten, entfernen Sie die angegebene JSON-Datei aus dem strategies-Ordner, bereinigen Sie die Datenbank und führen Sie den Fuzzer erneut aus.
Wenn Sie beispielsweise Ihre Anwendung nicht auf SQL-Injection-Schwachstellen scannen möchten, führen Sie die folgenden Schritte aus:
Entfernen Sie zunächst bereits vorbereitete Angriffsszenarien. Löschen Sie dazu alle Dateien im Ordner /cake_fuzzer/databases:
rm /cake_fuzzer/databases/*
Entfernen Sie danach die Datei sqlinj.json aus dem Ordner /cake_fuzzer/strategies:
rm /cake_fuzzer/strategies/sqlinj.json
Führen Sie schließlich den Fuzzer erneut aus und alle laufenden cake_fuzzer-Prozesse ohne SQL-Injection-Angriffe.
git clone https://github.com/Zigrin-Security/CakeFuzzer /cake_fuzzer
Warnung Cake Fuzzer funktioniert nicht richtig, wenn es sich unter einem anderen Pfad als
/cake_fuzzerbefindet. Beachten Sie, dass es im Root-Verzeichnis des Dateisystems platziert werden muss, neben/root,/tmpusw.
cd /cake_fuzzer
Betreten Sie die virtuelle Umgebung, falls Sie sich nicht bereits darin befinden:
source /cake_fuzzer/precheck.sh
ODER
source venv/bin/activate
cp config/config.example.ini config/config.ini
Konfiguriere config/config.ini:
WEBROOT_DIR="/var/www/html" # Pfad zum `webroot`-Verzeichnis der getesteten Anwendung
CONCURRENT_QUEUES=5 # [Optional] Anzahl gleichzeitig ausgeführter Angriffe
ONLY_PATHS_WITH_PREFIX="/" # [Optional] Der Fuzzer generiert nur Angriffe für Pfade, die mit diesem Präfix beginnen
EXCLUDE_PATHS="" # [Optional] Der Fuzzer schließt alle Pfade aus, die diesem regulären Ausdruck entsprechen, vom Scannen aus. Wenn leer, werden alle Pfade verarbeitet
PAYLOAD_GUID_PHRASE="§CAKEFUZZER_PAYLOAD_GUID§" # [Optional] Internes Schlüsselwort, das kurz vor dem Angriff durch eine eindeutige Payload-ID ersetzt wird
INSTRUMENTATION_INI="config/instrumentation_cake4.ini" # [Optional] Pfad zu benutzerdefinierten Instrumentierungen der Anwendung.
Warnung Während des Cake Fuzzer-Scans werden mehrere Funktionen Ihrer Anwendung auf unkontrollierte Weise mehrfach aufgerufen. Dies kann zu Verbindungen zu externen Diensten führen, mit denen Ihre Anwendung verbunden ist, und zum Abrufen oder Übertragen von Daten von/zu diesen. Es wird dringend empfohlen, Cake Fuzzer in einer isolierten kontrollierten Umgebung ohne Zugriff auf sensible externe Dienste auszuführen.
Hinweis Cake Fuzzer umgeht Blackholing, CSRF-Schutz und Autorisierung. Es sendet alle Angriffe mit den Berechtigungen des ersten Benutzers in der Datenbank. Es wird empfohlen, dass dieser Benutzer die höchsten Berechtigungen hat.
Die Anwendung besteht aus mehreren Komponenten.
Warnung Alle cake_fuzzer-Befehle müssen als root ausgeführt werden.
Stellen Sie vor dem Starten des Fuzzers sicher, dass Ihre Zielanwendung vollständig instrumentiert ist:
python cake_fuzzer.py instrument check
Falls nicht übernommene Änderungen vorhanden sind, übernehmen Sie diese mit:
python cake_fuzzer.py instrument apply
Um Cake Fuzzer auszuführen, gehen Sie wie folgt vor (Es wird empfohlen, mindestens 3 separate Terminals zu verwenden):
# Erstes Terminal
python cake_fuzzer.py run fuzzer # Generiert Angriffe, fügt sie der QUEUE hinzu und registriert neue SCANNER (dann beendet)
python cake_fuzzer.py run periodic_monitors # Verantwortlich für die Überwachung (CTRL+C zum Stoppen und Beenden am Ende des Scans)
# Zweites Terminal
python cake_fuzzer.py run iteration_monitors # Verantwortlich für die Überwachung (CTRL+C zum Stoppen und Beenden am Ende des Scans)
# Drittes Terminal
python cake_fuzzer.py run attack_queue # Startet die ATTACK QUEUE (CTRL+C zum Stoppen und Beenden am Ende des Scans)
# Sobald alle Angriffe ausgeführt sind
python cake_fuzzer.py run registry # Generiert `results.json` basierend auf gefundenen Schwachstellen
Hinweis: Es gibt derzeit einen Fehler, der den Besitzer von Protokollen (oder anderen dynamisch geänderten Dateien der Ziel-Webanwendung) ändern kann. Dies kann bei normaler Nutzung der Webanwendung zu Fehlern oder sogar zu Fehlalarmen bei zukünftigen Cake Fuzzer-Ausführungen führen. Für MISP empfehlen wir, nach jeder Ausführung des Fuzzers Folgendes auszuführen:
sudo chown -R www-data:www-data /var/www/MISP/app/tmp/logs/
Sobald Ihr Scan abgeschlossen ist, setzen Sie die Instrumentierung zurück:
python cake_fuzzer.py instrument revert
Um Cake Fuzzer erneut auszuführen, gehen Sie wie folgt vor:
Löschen Sie die Anwendungsprotokolle (als Beispiel hierfür werden MISP-Protokolle unter /var/www/MISP/app/tmp/logs gespeichert):
rm /var/www/MISP/app/tmp/logs/*
Löschen Sie alle Dateien im Ordner /cake_fuzzer/databases:
rm /cake_fuzzer/databases/*
Löschen Sie die Datei cake_fuzzer/results.json (Speichern oder überprüfen Sie zunächst die Ergebnisse des vorherigen Scans):
rm /cake_fuzzer/results.json
Befolgen Sie schließlich den vorherigen Ausführungsprozess erneut mit 3 Terminals.
Die Attack Queue markiert ausgeführte Angriffe in der Datenbank als 'ausgeführt'. Um die gesamte Suite erneut auszuführen, müssen Sie die Datenbank entfernen und die Angriffe erneut hinzufügen.
Stellen Sie sicher, dass Sie die Monitore und Attack Queues beenden, bevor Sie die Datenbank entfernen.
rm database.db*
python cake_fuzzer.py run fuzzer
python cake_fuzzer.py run attack_queue
Dies liegt wahrscheinlich daran, dass die vorherigen Logdateien von root überschrieben wurden. Cake Fuzzer arbeitet als root, daher werden neue Logdateien mit root als Besitzer erstellt. Entfernen Sie sie:
chmod -R a+w /var/www/MISP/app/tmp/logs/*
Wenn Sie eine VM mit gemeinsam genutztem Cake Fuzzer mit Ihrem Host-Rechner verwenden, stellen Sie sicher, dass das Host-Verzeichnis ordnungsgemäß an die Gast-VM angebunden ist:
sudo vmhgfs-fuse .host:/cake_fuzzer /cake_fuzzer -o allow_other -o uid=1000
Cake Fuzzer muss sich im Root-Verzeichnis des Rechners befinden, und der Basisverzeichnisname sollte speziell cake_fuzzer sein.
mv CakeFuzzer/ /cake_fuzzer
instrument applyDer Instrumentierungsprozess ist Teil des Cake Fuzzer-Ausführungsablaufs. Wenn Sie instrument apply gefolgt von instrument check ausführen, sollten beide Befehle die gleiche Anzahl von Änderungen ergeben.
Wenn Sie einen "patch"-Fehler erhalten, können Sie Patches manuell anwenden und die problematische Patch-Datei löschen. Patches befinden sich im Verzeichnis /cake_fuzzer/cakefuzzer/instrumentation/pathces.
Wenn Sie während der Installation oder Ausführung einen Python-Abhängigkeitsfehler haben, installieren Sie die Abhängigkeiten manuell, nachdem Sie in die virtuelle Umgebung gewechselt sind.
Wechseln Sie zunächst in die virtuelle Umgebung:
source venv/bin/activate
Danach können Sie Abhängigkeiten mit pip3 installieren.
pip3 install -r requriments.txt
Dieses Projekt wurde inspiriert von:
Dieses Projekt wurde beauftragt von: