Odkrita ranljivost v starejših verzijah Linuxovega jedra
Matej Huš
20. avg 2010 ob 15:05:30
Rafal Wojtczuk je odkril ranljivost v Linuxovem jedru, ki omogoča lokalnemu napadalcu izvesti kodo z administratorskimi (root) privilegiji. V svojem članku (PDF) je opisal primer napada na X Server, kjer je razdalja med mejami kopice (heap) in sklada (stack) pri alokaciji pomnilnika lahko zelo majhna, če pomnilnik napolnimo z ustreznimi podatki, denimo pixmap. Nadaljnja zahteva za segment deljenega pomnilnika povzroči, da se ta doda na koncu kopice. Če napadalcu uspe poskrbeti, da X Server pokliče rekurzivno funkcijo, se bo sklad povečal v segment deljenega pomnilnika. S hkratnim pisanjem v zahtevani del deljenega pomnilnika lahko napadalec spremeni vsebino sklada, da vrne naslove, in tako izvede poljubno kodo s polnimi privilegiji.
Joanna Rutkowska pojasnjuje, da je luknja v jedru prisotna vse od izida verzije 2.6, ki je izšla decembra 2003. Rešitev problem je preprosta in sicer uvedba najmanj ene varovalne strani pomnilnika (guard page) med skladom in drugimi področji pomnilnika. To je že postorjeno v verzijah jedra 2.6.32.19, 2.6.34.4 in 2.6.35.2, tako da je ranljivost v najnovejših verzijah Linuxa popravljena, ne da bi bil hrošč posebej izpostavljen.
Zanimivo je, da je Andrea Arcangeli iz razvijalske ekipe SUSE že septembra 2004 napisal popravek za to napako, a iz neznanih razlogov ni bil vključen v jedro. SUSE je zato svoje izdelke popravil sam, tako da so SUSE Linux Enterprise 9, 10 in 11 ter openSUSE 11.1-11.3 imuni na problem. Večina večjih distribucij, med njimi RedHat, Ubuntu, je hrošča v teh dneh že zakrpala. Uporabniki morajo zgolj namestiti najnovejše popravke.