Riprendiamo sotto braccio un vecchio post che riguardava il primo kernel exploit sys_dynlib_prepare_dlclose studiato dal developer Cturt con la complicità del promettente hacker italiano qwertyoruiop.
L’analisi descritta spiegava (e spiega tuttora) il funzionamento della vulnerabilità descrivendo tutti i metodi attualmente conosciuti per poter sfruttare l’exploit.
Ebbene questa prima analisi si è rivelata ben più semplice da sfruttare rispetto all’exploit BadIRET, purtroppo però anche questa “falla” è stata patchata da Sony sul firmware 2.00.
L’exploit BadIRET è molto complicato da eseguire, si basa su di un vero flusso in esecuzione e ha richiesto molti stadi supplementari dopo aver ottenuto inizialmente l’esecuzione di codice del kernel prima di essere idoneo allo sviluppo generale del payload.
Ad esempio, con BadIRET abbiamo dovuto guadagnare l’esecuzione di codice nel kernel in un contesto doppiamente critico, che abbiamo poi utilizzato per dirottare un puntatore a una funzione aggiuntiva.
Successivamente per gestirla siamo dovuti tornare in userland ripristinando gli squilibri via swapgs, questo per rassicurare che avevamo la base in userland GS prima di elaborare un’istruzione IRET.
Solo dopo tutto questo abbiamo potuto innescare il secondo payload in userland per ottenere l’esecuzione di codice nel kernel in un contesto normale. Inoltre, l’exploit innescato corrompe la IDT (Interrupt Descriptor Table), questo significa che bisogna reinizializzare il tutto.
L’exploit dlclose
non richiede niente di tutto questo, il che lo rende molto più facile e più diretto da lavorare rispetto al BadIRET. Dopo aver chiamato close
abbiamo immediatamente guadagnato l’esecuzione di codice nel kernel in un contesto normale.
In secondo luogo, dal momento che questo exploit non corrompe eventuali strutture globali; se lo andiamo ad eseguire in un thread separato, qualsiasi corruzione verrà scartata e quindi non abbiamo bisogno di ripulire nulla manualmente.