Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
practice-22-23 — Analisi di CVE-2017-9608 | Kitploit
Strumenti/GitHubGitHub/lacinquette/practice-22-23
Sicurezza dei ContenitoriAnalisi delle VulnerabilitàExploitFuzzingAnalisi di BinariApprendimento e Formazione
GitHublacinquette/practice-22-23

practice-22-23

Analisi di CVE-2017-9608

Vedi Repository
3 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Progetto

Per eseguire: ./script.sh

Repository su GitHub - https://github.com/LaCinquette/practice-22-23

Procedimento

  1. Per la ricerca della vulnerabilità ho scelto il progetto FFmpeg. Ho trovato un commit che soddisfacesse i requisiti, ovvero:

    • Corrispondeva al tipo CWE-476 - dereferenziazione di un puntatore nullo
  2. Ho creato un Dockerfile in cui:

    1. Ho scelto come immagine base Ubuntu 22.04
    2. Ho impostato DEBIAN_FRONTEND=nointeractive per escludere l'interazione con la riga di comando durante l'installazione dei pacchetti e di altri comandi
    3. Ho installato le dipendenze necessarie indicate nella wiki ufficiale
    4. Preparo la directory di lavoro (cartella workdir)
    5. Scarico, decomprimo e sposto il commit con la vulnerabilità non ancora corretta nella directory di lavoro
    6. Avvio la build del programma tramite l'utility make
    7. Creo lo script copy_out.sh, che si occupa di trovare il file oggetto necessario con l'errore e di copiarlo nella directory workspace/out
    8. Lascio l'istruzione per l'esecuzione dello script copy_out.sh, che deve essere eseguita all'avvio del container
  3. Per automatizzare creo lo script script.sh, che costruisce l'immagine e avvia il container dal quale poi recupera il file e lo sposta nella directory corrente:

    1. Elimino la cartella corrente out (se esiste)
    2. Costruisco l'immagine con il nome ffmpeg_image
    3. Avvio un container basato sull'immagine costruita, passando i seguenti parametri:
      • --rm per la rimozione automatica del container al termine
      • -v $PWD/out:/workspace/out per montare la directory temporanea attraverso cui il file oggetto viene trasferito all'host
    4. Copio il file necessario dalla cartella out
    5. Elimino la cartella out

Analisi della vulnerabilità

Fonti:

  • Commit con l'errore corretto
  • Pagina su GitHub relativa alla vulnerabilità
  • Messaggio del ricercatore di sicurezza sulla vulnerabilità

Analisi:

Problema:

  1. Tramite il comando ffmpeg -c:v dnxhd -i poc.mov -y output.ts, al programma viene passato in input un file .mov creato appositamente
  2. Per il parsing del formato DNxHD viene chiamata la funzione dnxhd_parse nel file dnxhd_parser
  3. Questa a sua volta chiama la funzione dnxhd_find_frame_end (nello stesso file), che in determinate condizioni non trova la fine e restituisce un numero negativo che non è un codice di errore
  4. Questo numero, insieme ad altri parametri, viene poi passato alla funzione ff_combine_frame (che si trova nel file parser) per unire i frame
  5. Poiché questo numero non è un codice di errore, ff_combine_frame lo riconosce come uno shift e tenta di rileggere quei byte nel buffer, ma siccome il buffer in quel momento è vuoto, avviene una dereferenziazione del puntatore nullo, che porta a un Segmentation fault

Nell'assembly:

0x08000d4e - inizio della sezione

  1. movsxd rcx, dword [rbx + 0xc]

    Nel registro rcx otteniamo il riferimento a pc->buffer

  2. add rcx, rdi

    Aggiungiamo next a pc->buffer

  3. add rcx, qword [rbx]

    Aggiungiamo pc->last_index a next e pc->buffer

  4. movzx edi, byte [rcx]

    Calcoliamo il byte all'indirizzo rcx, ma poiché pc->buffer è inizialmente null, otteniamo un Segmentation fault

Soluzione:

Impedire l'accesso a un'area di memoria non allocata, gestendo correttamente il caso eccezionale. Quando viene rilevato un numero negativo di byte rimanenti, continuare l'elaborazione del file saltando il ciclo.

Scarica lo strumento