Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia Tuesday TopDrive KupDnes Navrcholu Bomba NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Optimalizace v GCC vytvořila bezpečnostní díru v jádře

Brad Spengler uvolnil exploit. který dokáže přes virtuální rozhraní tun získat práva roota. Takto zneužitou chybu nezastaví dokonce ani SELinux. Postižená jsou jádra 2.6.30 a 2.6.18 (obsaženo v Red Hat Enterprise Linuxu 5). U dalších nebyl výskyt chyby potvrzen. Aby byl exploit úspěšný, jsou potřeba krom zmíněných jader další dvě podmínky a to přístup k /dev/net/tun a moduly PulseAudio.

Dále čtěte…         

Předchozí zprávička Následující zprávička        
tak tohle je celkem drsný...
tak tohle je celkem drsný... (neregistrovaný) 194.213.212.---
20. 7. 2009 9:27 Nový

tak tohle je celkem drsný...

celé vlákno

tak tohle je celkem drsný…

povinná
povinná (neregistrovaný) ---.62.broadband3.iol.cz
20. 7. 2009 20:56 Nový

Re: tak tohle je celkem drsný...

celé vlákno

Je, ale naštěstí pro GCC je v tom GCC nevinně. :-)

Icek
Icek (neregistrovaný) ---.astra-zlin.cz
20. 7. 2009 9:33 Nový

kód?

celé vlákno

Mohl by mi nekdo objasnit duvod proc ten tun testuje az po jeho pouziti? dik

struct sock *sk = tun->sk; // initialize sk with tun->sk … if (!tun)
return POLLERR; // if tun is NULL return error

peto
peto (neregistrovaný) ---.kar.elf.stuba.sk
20. 7. 2009 10:12 Nový

Re: kód?

celé vlákno

toto je v pohode, lebo robis so smernikmi, ak nie je pre tym ifom pouzity socket sk, tak je to korektna konstrukcia…

Icek
Icek (neregistrovaný) ---.astra-zlin.cz
20. 7. 2009 12:00 Nový

Re: kód?

celé vlákno

nechapu jak to muze byt korektni? dyt tam dela neco jako NULL->sk, to prece musi spadnout ne?

peto
peto (neregistrovaný) ---.chello.sk
20. 7. 2009 19:26 Nový

Re: kód?

celé vlákno

nie nepadlo by to, keby tam ten if ostal…

Jirka P
Jirka P (neregistrovaný) ---.36.broadband2.iol.cz
23. 7. 2009 21:04 Nový

Re: kód?

celé vlákno

Samozřejmě že by to padlo – nebo aspon mohlo padnout, protože je to nedefinované chování (například pokud by se ta hodnota nikdy nepoužila, může na ni kompilátor úplně zapomenout)

Něco jinýho by bylo

struct sock **sk = &tun->sk;
což je OK i pro tun == NULL (ačkoli výsledná hodnota sk je v tom případě neplatná)
kvr kvr aura:95
20. 7. 2009 10:49 Nový

Re: kód?

celé vlákno

To je právě ta chyba. Asi to přišlo vývojáři more cool to napsat přímo v inicializaci ;)

Ve skutečnosti je optimalizace gcc korektní. Bez něj by to sice nebyla přímo díra se zneužitelnosti roota, nicméně by to stejně padalo jak shnilé hrušky a titulek je tedy značně zavádějící.

Peter Helcmanovsky aura:65
20. 7. 2009 12:10 Nový

Re: kód?

celé vlákno

Nemyslim ze je korektni ta optimalizace. Myslim ze hrabat optimalizatorem do if ( pointer == NULL ) neni nikdy moc chytre, pokud neni kompilator opravdu genialni. Co treba

d1 = struct_data1, d2 = struct_data2, *s = random_z_( &d1, &d2 ) - &d1;
x = (&d1 + s)->mujX;
if ( !s ) { ... neco s d2 ... } else { ... neco s d1 ... }

Pochopi GCC ze se nejedna o klasicky NULL test ale vetveni kodu?

To inicializovani promenne s NULL pointrem v linuxu padne tak jako tak (i pri cteni), kdyz ten proces nema tu pamet, ne? Nebo cteni projde? Ale je to teda pekne pitoma frajerina, proc to nenechaji nenainicializovane a nepriradi tu hodnotu az za ifem, to nechapu.

kvr kvr aura:95
20. 7. 2009 13:13 Nový

Re: kód?

celé vlákno

To gcc do něj nehrabe, ten původní kód je napsaný tak, že nejdřív ze struktury čte data a potom teprv testuje, zda ta struktura není NULL. Na základě toho (úspěšného, viz * níže) čtení gcc usoudí, že struktura NULL být nemůže (když se z ní dříve úspěšně četlo) a test na str == NULL úplně vyhodí.

Takže i výše zmíněný kód gcc zpracuje korektně, bo nemůže tušit, co v tom „s“ vlastně bude. Kdyby předtím bylo ještě a = *s, tak rovněž část kódu za if (!s) vyhodí (pominu-li to, že s by měl být ptrdiff_t, takže by kód bylo třeba výrazně upravit).

  • – za normálních okolností by spadnul, v tomto případě si exploit předtím na adresu 0×0 namapuje validní stránku.

Není to frajeřina, je to prostě jen chyba při vývoji.

Zasílat nově přidané příspěvky e-mailem        

Přehled názorů

tak tohle je celkem drsný...
tak tohle je celkem drsný... 20. 7. 2009 09:27
└ 
Re: tak tohle je celkem drsný...
povinná 20. 7. 2009 20:56
kód?
Icek 20. 7. 2009 09:33
├ 
Re: kód?
peto 20. 7. 2009 10:12
│
└ 
Re: kód?
Icek 20. 7. 2009 12:00
│
 
└ 
Re: kód?
peto 20. 7. 2009 19:26
│
 
 
└ 
Re: kód?
Jirka P 23. 7. 2009 21:04
└ 
Re: kód?
kvr kvr 20. 7. 2009 10:49
 
└ 
Re: kód?
Peter Helcmanovsky 20. 7. 2009 12:10
 
 
└ 
Re: kód?
kvr kvr 20. 7. 2009 13:13