Root jogot szerezhet a helyi támadó az udev sebezhetőségét kihasználva

 ( trey | 2009. április 16., csütörtök - 19:03 )

Sebastian Krahmer, a SUSE Security Team tagja két udev sebezhetőséget fedezett fel. Az egyik sebezhetőség sikeres kihasználása root joghoz juttathatja a helyi támadót, míg a másik szintén a helyi támadónak ad lehetőséget szolgáltatás-megtagadás (Denial of Service, DoS) típusú támadás kivitelezésére.

Frissítve: újabb disztribúciók hibajegyei

A súlyosabbik hiba: az udev nem ellenőrzi a Netlink üzenetek eredetét, ezért a rosszindulatú helyi támadó speciálisan összeállított Netlink üzenetet küldve az udev-nek root jogokhoz juthat.

A hibák több Linux disztribúciót - köztük a Fedora 9-et, a Fedora 10-et, a SUSE 10.3-at, SUSE 11-et, SUSE 11.1-et, SLES/SLED termékvonalat, az Ubuntu 6.06 LTS-t, az Ubuntu 7.10-et, az Ubuntu 8.04 LTS-t, az Ubuntu 8.10-et - is érintenek.

A részletek:

Ubuntu Security Notice USN-758-1
udev-127-5.fc10 security update
SuSE alert SUSE-SA:2009:020
FEDORA-2009-3712
Debian alert DSA-1772-1

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Felmerul bennem a kerdes, hogy egy alapvetoen hardverkonfiguraciot vegzo alkalmazas, miert is akar netlinket hasznalni?
Jahm, hogy a ioctl egyszer mar mukodott?

--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Az udev netlinken keresztul kapja a kerneltol az esemeny ertesiteseket. Ezt hogyan valtanad ki ioctl-lel?

"The devd utility hooks into the devctl(4) device driver. This device driver has hooks into the device configuration system..."

Itt milyen driver-ről beszélhet vajon? Vagy pont erre utalsz, hogy egy külön réteg van még a devd és a kernel között a Linux-hoz képest?

Amit mondjuk nem értek FreeBSD esetében, hogy miért nem rántja be a devd az eszköz kernel modulját, ha egyszer tartalmazza a kernel? Nálam a Zyd chip-es USB-s Wifi kernelét kell mindig alátolni kldload-dal.

Roppant egyszeru. Mert mire a devd-hez eljut, addigra valaki mas mar lelkesen rault. Konkretan a GENERIC kernelben benne levo generic USB driver (ugen). Szoval megteheted, hogy azt kiszeded, es akkor be tudod tolteni a if_zyd-et. (De ha jol emlekszem sajat ezen iranyu tesztjeimre - es feltetelezve, hogy nem nagyon szurtam anno el -, mire a devd betolti az if_zyd-et, addigra mar keso. En ezt ugy oldottam meg, hogy windows-t jatsszattam vele. Kartya kihuz es ujra bedug utan ugyanis az eggyel elotte betoltott modul mar szepen felismerte a kutyumet.)

Köszi. Mondjuk ha már hekkelés, akkor inkább betöltöm kézzel.

Áhh, mindig a flancos új hardverekkel van a gond :)

Pofonegyszeruen, ioctl pollinggal.
Talan nem kene elfelejteni, hogy egy normalis operacios rendszerben, az alkalmazasok pofaznak a kernel fele es nem a kernel az alkalmazasok fele.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Kerdes hogy a folyamatos pollozas mennyire terheli a rendszert. Foleg, ha sok ilyen szal van.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Ne keverjuk a szezont a fazonnal. Az udev szerepe, emlekeim szerint, a hardvervaltozasok monitorozasa, es azok kezelese a modulok toltesevel. Egy valos elethelyzetet figyelembeveve erre elegendo 0,2 masodpercenkent egy poll a kernel fele. Ugyebar eleg csak annyit kerdeznie az udevnek, hogy volt valtozas? amire kap egy szamot vagy egy -1-et. Ha kap egy szamot akkor szinten egy-egy hivassal vegigpocogtetheti, a valtozasokat.
Egyebkent mindezt siman lehetne kernel szinten is lejatszani, viszont az megsertene Linus-fele "a monolitikus kernel jo, a modularis kernel gonosz" dogmat.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

szezon-fazon temaban erdemes megnezni a "a monolitikus kernel jo, a modularis kernel gonosz"
dolgot is.
monolitikus - mikrokerneles volt a vita, ha jol emlekszem. A Linux kernel monolitikus es modularis.

Hát hajrá, küldd be a patchet...

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

> az alkalmazasok pofaznak a kernel fele es nem a kernel az alkalmazasok fele.

read() meg a signal() ugye ...

Ezeknel is alkalmazas kezdemenyezi a kommunikaciot, nem pedig nyit egy socketet es varja, hogy a kernel vagy a joisten majd szoljon hozza, nem?
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

S pl a select() ? Az jelzi hogy hallgatozok tobb porton, de nem csinalok semmit amig nem jon barmelyiken vmi. Es a varakozas a select() megvalositasaban nem kerul semmibe. Ilyesmit is el lehet kepzelni, tehat dinamikusan regisztralni callback fuggvenyeket, s a kernel (vagy egy felelos modul) meghivja oket ha kell. Igy nem kell poll-ozgatni.Amugy lehet, hogy van oka amiert nem igy valositottak meg...

> Ezeknel is alkalmazas kezdemenyezi a kommunikaciot,

Mint minden más esetben (bizonyos signal-ok kivételével).

> nem pedig nyit egy socketet es varja, hogy

== "alkalmazas kezdemenyezi a kommunikaciot"

Mit szerettél volna mondani? Hogy a read() tökéletes erre a feladatra?

Valaki igazán átírhatná már a Linuxot Javára, akkor végre lenne egy gyors, és biztonságos operációs rendszerünk. :)

mindha regen lett volna vmi hasonlo elvetemult hir, java procin, java kernel, stb

Szerintem akkor már legyen inkább C#! :D

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

Vagy javascript. Érdekes lenne firefox tabban futtatni a windowst (javascriptes linuxon futó virtualboxból persze).

Akkor legyen inkább GWBASIC.

"The way to find what the mainstream will do tomorrow is to associate with the lunatic fringe today." -- 1995, Jean-Louis Gassée
/ http://haiku-os.org /

De legalabbis QBASIC
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Mi koze ennek javahoz ? Ez javaban ugyan ugy szopo lenne az erintett disztroknal.


Amit nem lehet megirni assemblyben, azt nem lehet megirni.

akkor már brainfuck

Vagy Malbolge.

vagy monóba, ugye...

--
Kum G.
www.pingvinbolt.hu

Na azért jó ez a sebesség:

harald - 2009-04-16 06:56:12
This update has been submitted for testing

bodhi - 2009-04-16 16:54:32
This update has been pushed to stable

Már fel is ment a fix.

>>: sys-admin.hu :<<

ubuntun is volt ma udev frissítés, gondolom emiatt.

--------------------------------
feel the beat - it's everywhere!

A Debianon detto, ráadásul most napközben és csak ez.:-)

Na EZ már valami! Emlékeztet a vmsplice -os reakciókra. Asszem aznap megjött Debianra (és gondolom másokra is) a frissítés.

********************
http://holo-media.hu

Nem ahhoz jött ki utána még két frissítés?

----------------
Lvl86 Troll

Nem tudom, régen volt. Irány a security.debian.org archívum.

********************
http://holo-media.hu

Fedorára is megérkezett.
Csaba

/var/log/apt/term.log

...
Log started: 2009-04-16 14:32:31
...
Preparing to replace libvolume-id0 0.125-7 (using .../libvolume-id0_0.125-7+lenny1_amd64.deb) ...
...
Preparing to replace udev 0.125-7 (using .../udev_0.125-7+lenny1_amd64.deb) ...
...
Log ended: 2009-04-16 14:33:33

Aki akarta, már úgyis feltolta a rootkitet.

Igy van. A patch kb. egy hete szuletett, aznap este elfogadtak es 3 nappal kesobb release-eltek az uj udev verziot a hiba pontos leirasaval. Roviddel ezutan szuletett a jaunty upgrade kevesse figyelemfelhivo leirassal. A hivatkozott launchpad bugreportot nem linkelem, mert login utan sem osztja meg velem a launchpad :) Az elozmenyek ismereteben viszont nem ertem a titkolozast.

kicsit izgultunk hogy vajon megtoljak-e a gepet
--
.

És még miket szoktál automatikusan frissíteni, libc, kernel? :)

--
"How do you work in a team situation when all the other team members are fools and idiots?"

desktop gépen szerintem bátran

Hogy lehet ilyesmit beallitani?
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

ha egyre gondolunk, akkor pl. így oldottam meg:

## Schedule upgrades in background [sometimes you will still need "apt-get dist-upgrade"]
VELETLEN=$[ ( $RANDOM % 59 ) + 0 ]
echo $VELETLEN" * * * * root apt-get upgrade -fy --force-yes" >> /etc/crontab

ha meg nincs semmi, ami az apt-get update-et intézné random időben [ne egyszerre terhelje a világ összes Debian-ja a servereket], akkor az is a sorba az upgrade elé, de ism.: azt csakis azért nem rakom bele, mert akkor ez esetben pl.: óránként zaklatná az ember a repo-kat kiszolgáló servert

pl.: egy helyi desktop-ra jól jöhet, mivel nem akar az ember ránézni még csak havonta se, vagy ssh-val belépni és frissíteni [már ha pl.: nem ért az adott felhasználó a géphez, és inkább nem mondja meg az ember neki a jelszót, nehogy letörölje a kernelt, mert frissítéshez esetlegesen kellene a jelszó].

jó, persze, okozhat bajt egy frissítés, de ezért is vagyok a Debian Lenny mellett, ha egyszer működik alatta minden hardware elem, akkor happy day, és ~kb évekig porosodhat az a pc, hozzá se kell nyúlni, csak nagyon ritkán dist-upgrade, vagy aptitude, mert van 1-2 frissítés, ami több dolgot művel, ezért inkább a normál upgrade-el nem engedik, hogy feltelepüljön, max azért kell pár havonta ránézni

hat ez eszetlen nagykiraly :DDD

licenszelhetem? dailywtf-ra kimehet?

--
.

csak erre válaszoltam:

"Hogy lehet ilyesmit beallitani?"

mi a wtf? túl csúnya a megoldás? :D :) lehet szebben is random számot generálni, tudom :)

nem de ilyet telleg nem nagyon erdemes csinalni

--
.

jah :O oks
ha van időd/kedved, tudnál segíteni abban, hogy:

biztonsági okokból?
rendelkezésre állás okokból? [egy frissítés elronthat valamit?]

hat nezd tegyukfel felupdatelsz egy uj veriot a webserverbol amiben lecsereltek valamit a konfig szintaxisban es ujrarugas helyett csak leallitod

ugyanez sshdra

ezeket telleg nem poen auto frissiteni

--
.

aham, ok, thx
desktop-ra azért még meghagyom :)

Gyors fel is tettem a packagekat

---------------------
http://virtualize.hu

Help!

W: GPG error: http://aptprox.mittudomain.local etch/updates Release: 
Az alábbi aláírások érvénytelenek voltak: 
BADSIG A70DAF536070D3A1 Debian Archive Automatic Signing Key (4.0/etch) 

apt-proxy -nk van, amihez nem nyulhatok. ilyenkor mi a teendo?
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.