[pso] New Linux Flaw Enables Null Pointer Exploits

Cosmin Ratiu cosminratiu at gmail.com
Tue Jul 21 10:12:39 EEST 2009


2009/7/21 Bogdan Tenea <tenea.bogdan at gmail.com>

> Eu n-am inteles faza din aricolu initial in care zicea ca ar fi compilatoru
> de vina si dadeau exemplu:
>
> struct sock *sk = tun->sk;  // initialize sk with tun->sk
>> if (!tun)
>     return POLLERR;  // if tun is NULL return error
>
> Cum ar putea compilatorul sa scoata portiunea aia de cod, cand tun e
> initializat la ceva, iar acel ceva poate sa fie bineinteles si null? Eu vad
> problema in faptul ca se apeleaza tun->sk inainte sa se verifice daca tun nu
> e null, si nu vreo optimizare de compilator
>
>
Da, codul este gresit in sensul ca in mod normal, cand tun e NULL, crapa la
linia in care initializeaza sock.
Compilatorul isi da seama de asta si scoate if-ul, pentru ca e redundant.
Avem 2 posibilitati: tun e NULL sau tun nu e NULL. Daca e NULL, crapa
inainte de if. Daca nu e NULL, if-ul nu se mai executa. Deci e redundant.

Acuma, situatia din exploit nu este nici una din cele 2 de mai sus. Daca
userspace mapeaza ceva la prima pagina, nu o sa crape si nici if-ul nu o se
se execute. Com e vorba de un socket, cel mai probabil o sa ajunga se se
apeleze una din metodele din el (de ex. sk_write_space sau sk_data_ready),
care sunt controlate de atacator.

Et voila,
Cosmin.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090721/8303a0bf/attachment.htm>


More information about the pso mailing list