cela prica oko eksploita je interesantna , problem je resen naravno i to vrlo lako
tako sto su zamenjena mesta dvema linijama
fora sa gcc optimizacijama je u sledecem:
na jednom mestu pokazivac je dereferenciran
a zatim se proverava da li je NULL
u normalnim okolnostima , samo dereferenciranje pokazivaca na NULL dovodi do kraha
optimizacija u gcc-u je dovela kompajler na sledeci zakljucak:
pokazivac je dereferenciran => pokazivac nije NULL
=> nepotrebna je provera da li je NULL
tako da u source kodu postoji provera, ali u samom kompajliranom kodu ne jer ju je gcc izbacio jer je zakljucio da je nepotrebna
sto je sasvim u redu
zamenivsi mesta linijama ( prvo provera da li je pokazivac NULL , pa zatim dereferenciranje ) resava problem i bug nestaje
dalje , fazon s eksploitom je sto linux kernel developeri smatraju da su NULL ptr deref bagovi unexploitable
pa ih klasifikuju kao DoS ranjivosti ,a spender se ovim exploitom trudi da ih ubedi u suprotno
u nekim slucajevima su NULL ptr deref bugovi exploitable cak i u userland aplikacijama
(mada to jeste malo redji slucaj)
dalje , covek je uspeo da arbitrarnom OR operacijom dodje do izvrsenja sopstvenog koda , to se ne vidja cesto ! :)
vise o null ptr deref bugovima u linux kernelu procitajte u nasem phearless-u
h4z4rd je pisao o tome pre godinu dana
http://www.phearless.org/i7/null_pointer_analiza.pdf
Bojan Zdrnja je napisao malo objasnjenje ovog eksploita
http://isc.sans.org/diary.html?storyid=6820
(napokon malo interesantnija diskusija na ovom forumu:))
poz
ea