
Cake Fuzzer è un progetto pensato per aiutare a scoprire automaticamente e continuamente vulnerabilità in applicazioni web create sulla base di framework specifici, con un numero molto limitato di falsi positivi.
Ultima versione: 1.0
Licenza: GNU GPL v3.0
Cake Fuzzer è un progetto che ha lo scopo di aiutare a scoprire automaticamente e continuamente vulnerabilità in applicazioni web create basate su framework specifici, con un numero molto limitato di falsi positivi. Attualmente è implementato per supportare il framework Cake PHP.
Se desideri saperne di più sul processo di ricerca, dai un'occhiata a questa serie di articoli: CakePHP Application Cybersecurity Research
Di seguito è elencata una lista di alcuni bug scoperti da Cake Fuzzer:
| Titolo | Gravità | Collegamento |
|---|---|---|
| Iniezione SQL cieca in Cerebrate | 9.8 Critico | https://zigrin.com/advisories/cerebrate-blind-sql-injection/ |
| Iniezione SQL nel componente CRUD | 8.8 Alto | https://zigrin.com/advisories/misp-sql-injection-in-crud-component/ |
| XSS basato su DOM | 6.1 Medio | https://zigrin.com/advisories/misp-dom-based-xss/ |
| Iniezione SQL cieca nel parametro order | 8.8 Alto | https://zigrin.com/advisories/misp-blind-sql-injection-in-order-parameter/ |
| Iniezione SQL cieca nei parametri di input array | 8.8 Alto | https://zigrin.com/advisories/misp-blind-sql-injection-in-array-input-parameters/ |
| Iniezione SQL basata sul tempo in /Logs/index | 7.2 Alto | https://zigrin.com/advisories/misp-time-based-sql-injection-in-logs-index/ |
Gli approcci tipici per scoprire vulnerabilità utilizzando strumenti automatizzati nelle applicazioni web sono:
Entrambi i metodi presentano svantaggi. Il SAST produce un'alta percentuale di falsi positivi – risultati che non sono vulnerabilità o che non sono vulnerabilità sfruttabili. Il DAST produce meno falsi positivi ma scopre meno vulnerabilità a causa delle informazioni limitate. Richiede inoltre una certa conoscenza dell'applicazione e un background di sicurezza da parte della persona che esegue la scansione. Spesso ciò comporta una configurazione personalizzata per ogni applicazione per funzionare correttamente.
Il progetto Cake Fuzzer mira a combinare i vantaggi di entrambi gli approcci ed eliminare gli svantaggi sopra menzionati. Questo approccio è chiamato Interactive Application Security Testing (IAST).
Gli obiettivi del progetto sono:
Nota: Alcune classi di vulnerabilità non sono l'obiettivo di Cake Fuzzer, quindi Cake Fuzzer non sarà in grado di rilevarle. Esempi di queste classi sono le vulnerabilità di logica aziendale e i problemi di controllo degli accessi.

Drawio: Cake Fuzzer Architecture
Cake Fuzzer è composto da 3 server principali (abbastanza indipendenti) che, nel complesso, consentono test dinamici delle vulnerabilità delle applicazioni CakePHP.
Altri componenti includono:
Cake Fuzzer si basa sul concetto di Interactive Application Security Testing (IAST). Contiene un insieme predefinito di attacchi che vengono modificati casualmente prima dell'esecuzione. Cake Fuzzer ha conoscenza degli interni dell'applicazione grazie al framework Cake PHP, quindi gli attacchi verranno lanciati su tutti i possibili punti di ingresso dell'applicazione.
Durante l'attacco, Cake Fuzzer monitora vari aspetti dell'applicazione e del sistema sottostante come:
Queste fonti di informazioni permettono a Cake Fuzzer di identificare più vulnerabilità e segnalarle con maggiore certezza.
La sezione seguente descrive i passaggi per configurare un ambiente di sviluppo Cake Fuzzer in cui il target è la vecchia versione MISP v2.4.146, vulnerabile a CVE-2021-41326.
Esegui i seguenti comandi sul tuo sistema operativo host per scaricare una VM MISP obsoleta:
cd ~/Downloads # O dove desideri archiviare la VM MISP
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
Esegui le seguenti azioni nell'interfaccia grafica di VMWare per preparare la condivisione dei file di Cake Fuzzer tra il sistema host e MISP:
Esegui i seguenti comandi sul tuo sistema operativo host (sostituisci MISP_IP_ADDRESS con l'indirizzo IP annotato in precedenza):
ssh-copy-id misp@MISP_IP_ADDRESS
ssh misp@MISP_IP_ADDRESS
Una volta effettuato l'SSH in MISP, esegui i seguenti comandi (nel terminale MISP) per completare la configurazione della condivisione dei file di Cake Fuzzer tra sistema host e MISP:
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 # Nota: Questo percorso è fisso poiché è hardcoded nell'instrumentazione (una delle patch)
sudo vmhgfs-fuse .host:/cake_fuzzer /cake_fuzzer -o allow_other -o uid=1000 -o max_write=61440
# max_write risolve un bug strano di copia dei file: https://github.com/vmware/open-vm-tools/issues/437#issuecomment-669663891
ls -l /cake_fuzzer # Se tutto è andato bene, dovresti vedere il contenuto della directory Cake Fuzzer dal tuo sistema host. Qualsiasi modifica sul sistema host si rifletterà nella VM e viceversa.
Prepara MISP per test semplici (nel terminale MISP):
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
Infine, installa le dipendenze di Cake Fuzzer e prepara l'ambiente virtuale (nel terminale MISP):
source /cake_fuzzer/precheck.sh
Cake Fuzzer cerca vulnerabilità che si trovano nella cartella /cake_fuzzer/strategies.
Per aggiungere un nuovo attacco, dobbiamo aggiungere un nuovo file new-attack.json nella cartella strategies.
Ogni vulnerabilità contiene 2 campi principali: Scenarios e Scanners. Gli Scenarios contengono i form base dei payload di attacco. Gli Scanners, invece, rilevano espressioni regolari o frasi per la risposta, stout, sterr, log e risultati.
ScenariosPer creare un payload, devi prima comprendere la vulnerabilità e come rilevarla con il minor numero possibile di payload.
Durante la costruzione dello scenario, dovresti pensare al payload più generico possibile. Tuttavia, più generico è il payload, maggiori sono le possibilità che produca falsi positivi.
È preferibile utilizzare un valore canarino come __cakefuzzer__new-attack_§CAKEFUZZER_PAYLOAD_GUID§__ nei tuoi scenari.
Un valore canarino contiene una stringa fissa (ad esempio: __cakefuzzer__new-attack_) e un identificatore dinamico che verrà modificato dinamicamente dal fuzzer (la parte GUID §CAKEFUZZER_PAYLOAD_GUID§). La prima parte del canarino viene utilizzata per garantire che il payload venga rilevato dagli Scanners. La seconda parte, il GUID, viene tradotta in un valore pseudo-casuale ad ogni esecuzione del tuo payload. Quindi, ogni volta che il tuo payload verrà iniettato in un parametro utilizzato dall'applicazione, il canarino verrà modificato in qualcosa del tipo: __cakefuzzer__new-attack_8383938__, dove 8383938 è unico per tutti gli altri attacchi.
ScannersPer creare uno scanner, devi prima capire come potrebbe comportarsi l'applicazione quando viene attivata la vulnerabilità. Ci sono alcuni tipi di scanner che puoi utilizzare, come response, sterr, logs, files e processes. Ogni scanner ha uno scopo diverso.
Ad esempio, quando costruisci uno scanner per un XSS, cercherai un'indicazione della vulnerabilità nella risposta HTML dell'applicazione. Puoi utilizzare lo scanner ResultOutputScanner per cercare il valore canarino e il payload. D'altra parte, le vulnerabilità di SQL Injection potrebbero essere rilevate tramite i log degli errori. A questo scopo, puoi utilizzare LogFilesContentsScanner e ResultErrorsScanner.
Scanner è generare un regex efficiente. Evita di usare regex che corrispondono a tutti i casi .* o .+. Sono molto dispendiosi in termini di tempo e aumentano drasticamente il tempo necessario per completare l'intera scansione.Come accennato, l'efficienza è una parte importante delle vulnerabilità. Sia Scenarios che Scanners dovrebbero includere il minor numero possibile di elementi. Questo perché Cake Fuzzer esegue ogni singolo scenario in tutti i percorsi rilevati più volte. D'altra parte, tutte le risposte, le nuove voci di log, ecc., vengono costantemente controllate dagli Scanner. Ci saranno molti parametri, percorsi e endpoint rilevati, quindi utilizzare più payload o Scanner influisce notevolmente sull'efficienza.
Se non desideri eseguire la scansione per una classe di vulnerabilità specifica, rimuovi il file json specificato dalla cartella strategies, pulisci il database ed esegui nuovamente il fuzzer.
Ad esempio, se non desideri eseguire la scansione della tua applicazione per le vulnerabilità di SQL Injection, procedi con i seguenti passaggi:
Prima di tutto, rimuovi gli scenari di attacco già preparati. Per fare ciò, elimina tutti i file all'interno della cartella /cake_fuzzer/databases:
rm /cake_fuzzer/databases/*
Successivamente, rimuovi il file sqlinj.json dalla cartella /cake_fuzzer/strategies:
rm /cake_fuzzer/strategies/sqlinj.json
Infine, esegui di nuovo il fuzzer e tutti i processi di cake_fuzzer in esecuzione senza che nessun attacco SQL Injection venga eseguito.
git clone https://github.com/Zigrin-Security/CakeFuzzer /cake_fuzzer
Attenzione Cake Fuzzer non funzionerà correttamente se si trova in un percorso diverso da
/cake_fuzzer. Tieni presente che deve essere posizionato sotto la directory radice del file system, accanto a/root,/tmpe così via.
cd /cake_fuzzer
Entra nell'ambiente virtuale se non ci sei già:
source /cake_fuzzer/precheck.sh
OPPURE
source venv/bin/activate
cp config/config.example.ini config/config.ini
Configura config/config.ini:
WEBROOT_DIR="/var/www/html" # Percorso della directory `webroot` dell'applicazione testata
CONCURRENT_QUEUES=5 # [Opzionale] Numero di attacchi eseguiti contemporaneamente
ONLY_PATHS_WITH_PREFIX="/" # [Opzionale] Il fuzzer genererà attacchi solo per quelli che iniziano con questo prefisso
EXCLUDE_PATHS="" # [Opzionale] Il fuzzer escluderà dalla scansione tutti i percorsi che corrispondono a questa espressione regolare. Se vuoto, verranno elaborati tutti i percorsi
PAYLOAD_GUID_PHRASE="§CAKEFUZZER_PAYLOAD_GUID§" # [Opzionale] Parola chiave interna che viene sostituita subito prima dell'attacco con un ID payload univoco
INSTRUMENTATION_INI="config/instrumentation_cake4.ini" # [Opzionale] Percorso per instrumentazioni personalizzate dell'applicazione.
Attenzione Durante la scansione di Cake Fuzzer, molte funzionalità della tua applicazione verranno invocate in modo incontrollato più volte. Ciò potrebbe comportare l'emissione di connessioni a servizi esterni a cui la tua applicazione è connessa e l'estrazione o l'invio di dati da/verso di essi. Si consiglia vivamente di eseguire Cake Fuzzer in un ambiente isolato e controllato, senza accesso a servizi esterni sensibili.
Nota Cake Fuzzer bypassa blackholing, protezioni CSRF e autorizzazioni. Invia tutti gli attacchi con i privilegi del primo utente nel database. Si consiglia che questo utente abbia i permessi più elevati.
L'applicazione è composta da diversi componenti.
Attenzione Tutti i comandi cake_fuzzer devono essere eseguiti come root.
Prima di avviare il fuzzer, assicurati che la tua applicazione target sia completamente strumentata:
python cake_fuzzer.py instrument check
Se ci sono modifiche non applicate, applicale con:
python cake_fuzzer.py instrument apply
Per eseguire cake fuzzer, procedi come segue (si consiglia di utilizzare almeno 3 terminali separati):
# Primo terminale
python cake_fuzzer.py run fuzzer # Genera gli attacchi, li aggiunge alla CODA e registra nuovi SCANNER (poi esce)
python cake_fuzzer.py run periodic_monitors # Responsabile del monitoraggio (usa CTRL+C per fermare ed uscire alla fine della scansione)
# Secondo terminale
python cake_fuzzer.py run iteration_monitors # Responsabile del monitoraggio (usa CTRL+C per fermare ed uscire alla fine della scansione)
# Terzo terminale
python cake_fuzzer.py run attack_queue # Avvia la CODA DI ATTACCO (usa CTRL+C per fermare ed uscire alla fine della scansione)
# Una volta che tutti gli attacchi sono stati eseguiti
python cake_fuzzer.py run registry # Genera `results.json` basato sulle vulnerabilità trovate
Nota: C'è attualmente un bug che può cambiare il proprietario dei log (o di qualsiasi altro file modificato dinamicamente dell'app web target). Ciò potrebbe causare errori nell'utilizzo normale dell'applicazione web o persino falsi negativi in future esecuzioni di Cake Fuzzer. Per MISP, si consiglia di eseguire quanto segue dopo ogni esecuzione del fuzzer:
sudo chown -R www-data:www-data /var/www/MISP/app/tmp/logs/
Una volta che la scansione termina, annulla l'instrumentazione:
python cake_fuzzer.py instrument revert
Per eseguire di nuovo cake fuzzer, procedi come segue:
Elimina i log dell'applicazione (come esempio, i log di MISP sono memorizzati in /var/www/MISP/app/tmp/logs)
rm /var/www/MISP/app/tmp/logs/*
Elimina tutti i file all'interno della cartella /cake_fuzzer/databases
rm /cake_fuzzer/databases/*
Elimina il file cake_fuzzer/results.json (prima non dimenticare di salvare o esaminare i risultati della scansione precedente)
rm /cake_fuzzer/results.json
Infine, segui nuovamente il processo di esecuzione precedente con 3 terminali
Attack queue segna gli attacchi eseguiti nel database come 'eseguiti', quindi per eseguire nuovamente l'intera suite devi eliminare il database e aggiungere nuovamente gli attacchi.
Assicurati di fermare i monitor e le code di attacco prima di eliminare il database.
rm database.db*
python cake_fuzzer.py run fuzzer
python cake_fuzzer.py run attack_queue
Ciò è probabilmente dovuto al fatto che i file di log precedenti sono stati sovrascritti da root. Cake Fuzzer opera come root, quindi i nuovi file di log verranno creati con root come proprietario. Rimuovili:
chmod -R a+w /var/www/MISP/app/tmp/logs/*
Se utilizzi una VM con condivisione di cake fuzzer con la tua macchina host, assicurati che la directory host sia correttamente collegata alla VM guest:
sudo vmhgfs-fuse .host:/cake_fuzzer /cake_fuzzer -o allow_other -o uid=1000
Cake Fuzzer deve trovarsi sotto la directory radice della macchina e il nome della directory base deve essere specificamente cake_fuzzer.
mv CakeFuzzer/ /cake_fuzzer
instrument applyIl processo di instrumentazione è una parte del flusso di esecuzione di Cake Fuzzer. Quando esegui instrument apply seguito da instrument check, entrambi questi comandi dovrebbero produrre lo stesso numero di modifiche.
Se ricevi un errore "patch", puoi applicare le patch manualmente ed eliminare il file di patch problematico. Le patch si trovano nella directory /cake_fuzzer/cakefuzzer/instrumentation/pathces.
Durante l'installazione o l'esecuzione, se hai un errore di dipendenza Python, installa manualmente le dipendenze dopo essere passato all'ambiente virtuale.
Prima passa all'ambiente virtuale
source venv/bin/activate
Successivamente, puoi installare le dipendenze con pip3.
pip3 install -r requriments.txt
Questo progetto è stato ispirato da:
Questo progetto è stato commissionato da: