Gli errori use-after-free sono una particolare classe di bug di sicurezza della memoria. Quanto spesso sono sfruttabili, in pratica? Quando trovi un bug "use-after-free" in un programma, è spesso sfruttabile, raramente sfruttabile o varia in base ad altri fattori che trascuro?
Sono particolarmente interessato a quanto spesso gli errori use-after-free nei programmi C sono sfruttabili (in particolare, C, piuttosto che C ++). Con quale frequenza vengono sfruttati gli errori use-after-free nei programmi C? Se scopro un bug "use-after-free" in un programma C che sto testando, cosa dovrei stimare come probabilità che sia sfruttabile? 90%? 50%? 10%? Quando si verificano errori di triaging (ad esempio, arresti di fuzzer, avvisi di Valgrind, avvisi da strumenti di analisi statici), quanto dovrei dare la priorità alla risoluzione dei bug di use-after-free, rispetto ad altri tipi di bug di sicurezza della memoria?
Ricerche che ho fatto. Ho fatto qualche ricerca. Sembra che i bug use-after-free nei programmi C ++ siano spesso sfruttabili (perché il layout di memoria di un oggetto C ++ contiene sempre un puntatore a un vtable e sovrascrive questo conduce facilmente al codice di iniezione). Ok bene. Ora che dire dei programmi C?
Posso anche vedere come gli errori use-after-free possono essere sfruttati in alcuni casi speciali. Ad esempio, i bug di use-after-free nei browser o altri programmi con scripting controllabile dall'utente sembrano spesso è sfruttabile , a causa della facilità con cui si esegue l'irrorazione dell'heap e la grande quantità di controllo sui contenuti degli oggetti archiviati in memoria . E, sì, ho visto alcuni metodi sofisticati di sfruttare i bachi use-after-free in alcuni casi speciali (ad esempio, usarli per la divulgazione di informazioni, che consente di derandomizzare ASLR, dopo di che ....), ma quelli sembrano piuttosto specifico dell'applicazione e come potrebbe aver bisogno di essere fortunato per l'attacco a lavorare e anche allora ci vorrebbe un sacco di lavoro per costruire l'exploit. Ma sono interessante sapere come appare il "caso tipico", piuttosto che i casi speciali in cui l'autore dell'attacco è fortunato.