[ EArthquake @ 17.07.2009. 16:37 ] @
ovo bi trebalo u secuirty coding , ali tamo izgleda vise niko nista ne gleda pa ide ovde


uglavnom brace yourselves for some kernel exploit leetness

http://grsecurity.net/~spender/cheddar_bay.tgz

mnogo lepa stvar !!!

[ Tyler Durden @ 18.07.2009. 10:43 ] @
Napisi molim te malo vise o cemu se radi.
[ maksvel @ 18.07.2009. 10:54 ] @
Da, bilo bi dobro da Aca malo pojasni o čemu se radi. Koliko sam skontao čitajući komentare koda, paradoksalno upravo uključen SELinux omogućava exploit! :-~ Postoji li neki konačan patch za ovo??
[ combuster @ 18.07.2009. 12:07 ] @
Izgleda da su patch-ovali 2.6.29 ali ne i 2.6.30...

Citat:

TUN/TAP provides packet reception and transmission for user space programs.
It can be viewed as a simple Point-to-Point or Ethernet device, which
instead of receiving packets from a physical media, receives them from
user space program and instead of sending packets via physical media
writes them to the user space program.

When a program opens /dev/net/tun, driver creates and registers corresponding
net device tunX or tapX. After a program closed above devices, driver will
automatically delete tunXX or tapXX device and all routes corresponding to it.


Otvara dummy socket izgleda mi preko koga pomocu personality funkcije mapira odredjenu kolicinu memorije koja je inace zabranjena a u kojoj moze da trpa sta hoce... A ako je SELinux ukljucen onda preko pulse-a mapira memoriju...

Citat:

* STREAMS network API emulation (via the streams(4) loadable module, or by means of

device streams

in a kernel configuration file)
* Mappings between
.Fx and SVR4 ioctl(2) calls, or, where no such mappings exist, reverse-engineered implementations of the SVR4 calls.

The streams module provides limited System V Release 4 STREAMS interprocess communication ABI (application binary interface) compatibility for userland applications.

Internally, streams provides STREAMS handles by using socket creation kernel routines, and adding state-tracking information to the socket to permit manipulation by STREAMS emulation code in svr4(4). Hence, opening a stream device produces a result similar to what would be obtained by calling socket(2).

Applications should never use this interface directly: STREAMS emulation is only provided as a service to support ABI requirements in the SVR4 environment which svr4(4) needs to present to client binaries.


E kada to odradi onda verovatno koristi taj njegov mator exploit da dobije root...

Mada nije mi jasno sta mu znaci: "But which, thanks to gcc optimizations, becomes exploitable :)"
Jel to zbog kernel hack-a da gcc 4 uninline-uje funkcije koje su markirane kao inline?

Ispade da je fix izasao...

http://git.kernel.org/?p=linux...6d26d6efde842d1703ac7cfa9427b6

[Ovu poruku je menjao combuster dana 18.07.2009. u 13:19 GMT+1]
[ Tyler Durden @ 18.07.2009. 12:20 ] @
http://lwn.net/Articles/341773/

S tim što ja nisam uspio da pokrenem (nije htio da se kompajlira) ovaj exploit.
?
[ Tyler Durden @ 18.07.2009. 12:24 ] @
Hm, postoji nekoliko preduslova da bi exploit mogao da se iskoristi.
http://www.h-online.com/securi...kernel-published--/news/113791
[ combuster @ 18.07.2009. 12:41 ] @
Jel ti radi sad?

./exploit.so
UNABLE TO MAP ZERO PAGE!

2.6.31-rc3, na njemu ne radi, odoh da boot-ujem u 2.6.30.1...

[Ovu poruku je menjao combuster dana 18.07.2009. u 13:52 GMT+1]
[ Tyler Durden @ 18.07.2009. 12:51 ] @
Radi, ali ne vredi zato što nemam instaliran pulseaudio na mašinama (na jednoj čak ni killall :) ).
Mada, to je beside the point. Rupa definitivno postoji.
[ combuster @ 18.07.2009. 12:53 ] @
Nemoj da pokreces shell skriptu i pwnkernel, pokreni kompajlirani exploit.c on bi trebalo da iskoristi bug ako cak i nema pulseaudio (preko personality funkcije)...


OMG!!!!! 2.6.30.1

./exploit.so
[+] MAPPED ZERO PAGE!
[+] Resolved tun_fops to 0xffffffffa078e100
[+] Resolved nf_unregister_hooks to 0xffffffff80495950
[+] Resolved commit_creds to 0xffffffff8025f460
[+] *0xffffffffa078e158 |= 1
[+] b00m!


Hm, ali tu stane, izgleda da what_we_do ne vraca case 3 (nemam selinux a ni apparmor) tako da expl0it tu stane, pokrenuo sam ga i sa gdb-om ista stvar... Jos se zaglupi pa ne mogu ni da ga ubijem sa kill...

cat /dev/net/tun daje cat: /dev/net/tun: File descriptor in bad state, sreca moja... :D



[Ovu poruku je menjao combuster dana 18.07.2009. u 14:41 GMT+1]
[ EArthquake @ 18.07.2009. 16:00 ] @
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
[ combuster @ 18.07.2009. 16:32 ] @
Pa jesi li probao da izvrsis explot, on krene da radi ali kada otvori /dev/net/tun tu zakoci tj pri izvrsavanju boom_goes_the_dynamite funkcije... Da li je moguce da su ispravili vec bug u tun drajveru ali da je ostao bug sa null pointer dereferenciranjem u 2.6.30.1 ?

edit:

Igrao sam se malo, nasao u cemu je bug, pa ko hoce da isproba nek izvoli...

Kod mene na 2.6.30.1 sad javlja:

Citat:

[+] MAPPED ZERO PAGE!
[+] Resolved tun_fops to 0xffffffffa078e100
[+] Resolved nf_unregister_hooks to 0xffffffff80495950
[+] Resolved commit_creds to 0xffffffff8025f460
[+] *0xffffffffa078e158 |= 1
[+] b00m!
[+] Disabled security of : nothing, what an insecure machine!
[+] Failed to get root :( Something's wrong. Maybe the kernel isn't vulnerable



[Ovu poruku je menjao combuster dana 18.07.2009. u 20:30 GMT+1]
[ EArthquake @ 19.07.2009. 09:38 ] @
nisam ga testirao , nemam odgovarajuci kernel na ovoj masini
a bas me mrzelo da postavljam vm samo zbog toga ...

moguce je cak da taj bug nije ni otisao u release kernel
pa je tvoj vec patchovan ...
kao sto rekoh , poenta eksploita je da pokaze kernel dev-ovima da su null pointer dereference bugovi eksploitabilni ...

sam eksploit nije narocito koristan , bilo je mnogo mnogo korisnijih u zadnje vreme :)

ovaj je prosto state of the art :) pa sam ga zato i pomenuo ovde

btw , proverite velicinu u bajtovima onog chedat tgz-a , i velicinu u bajtovima neizmenjenog exploit.c
spender je totalni idiot !!! :)))


[Ovu poruku je menjao EArthquake dana 19.07.2009. u 10:57 GMT+1]
[ combuster @ 19.07.2009. 10:02 ] @
On je uspeo da mapira zero page na 2.6.30.1 a da je patch-ovan kernel to nikako nije mogao da uradi, problem je samo sto nije uspeo da dobije root sa ovim:

Code:

if (commit_creds && init_cred) {
        /* hackish usage increment */
        *(volatile int *)(init_cred) += 1;
        commit_creds(init_cred);
        got_root = 1;


A na 2.6.31-rc4 nije ni uspeo da mapira zero page zbog onog fix-a koji su commit-ovali pre tek 6 dana...

Inace sama ideja jeste fantasticna i drago mi je da je lik uradio ovako nesto i sto je to objavio, ne bih voleo da dizem server na masini na kojoj je moguce ovako dobiti root privilegije. Mada je verovatnoca mala da bi uspeo da ovako nesto izvrsi na ciljnoj masini...

edit: lol, 12345 eleet :) kakav geek covece :)
[ EArthquake @ 19.07.2009. 14:07 ] @
NULL inace ne mozes da mapiras tako lako iz userland-a
zato je i koristio pulseaudio , zato sto je suid bin , a dozvoljava ucitavanje dodatnih biblioteka ....
[ Srđan Pavlović @ 19.07.2009. 16:41 ] @
Ah... sa novim kompajlerom mogu se javiti ovakve stvari,
ali ono, svaka cast ovom liku, sta on iskopa...

..a i komentari u kodu su mu zakon, bas me lepo nasmejao :)))
[ maksvel @ 19.07.2009. 16:44 ] @
Da, kako reče Aleksandar, to je više "proof of concept"...
BTW, stavih kernel 2.6.30, iskompajlira se ovo sve, a pri pokretanju exploit kaže "UNABLE TO OPEN THE DEVICE"
[ combuster @ 19.07.2009. 16:59 ] @
Jel ti custom kernel ili je dosao uz distribuciju? Ako je custom mozda nisi setovao kao modul "Universal TUN/TAP device driver support"

Uglavnom javlja ti da ne moze da otvori /dev/net/tun... Super cuti, bitno je da ne radi, da radi zabrinuo bih se :)

Meni nece da mapira zero page preko /dev/net/tun, makar ne sa offsetom 0...
[ maksvel @ 19.07.2009. 17:02 ] @
Hehe, ubacio sam tun modul sa modprobe i sad works like a charm!
[ combuster @ 19.07.2009. 17:15 ] @
Pa jel ti dobijas root privilegije po izvrsenju?
[ maksvel @ 19.07.2009. 17:48 ] @
Naravno.

WAIIIIIIIIIITTTT....do you hear it?
You hear it! You do too! It's not just me! It's here, it's here I say!!
I must face this....
What's this? Something stirs within the beast's belly! Something unexpected....
# whoami
root
#

Svakako, pokrenuo sam exploit kao regularan korisnik...
[ combuster @ 19.07.2009. 17:53 ] @
Uf ala ja sad imam pitanja za tebe :)

Koji si exploit.c kompajlirao, original ili onaj izmenjen?
Jel imas pulse audio instaliran i ako imas jesi li pokretao samo exploit.so ili cheddar_bay.sh skriptu?
Koji je distro u pitanju i koja verzija kernel-a? 2.6.30 ili 2.6.30.1?
[ maksvel @ 19.07.2009. 19:35 ] @
Fajl exploit.c je originalni. Imam pulseaudio i selinux (u permissive režimu). Pokrenuo sam exploit direktno. Jezgro je 2.6.30 - već kompajlirano. Distro Ubuntu 9.04.
[ combuster @ 19.07.2009. 20:35 ] @
Ok thnx, zato ti i radi jer imas pulse instaliran :)
[ Srđan Pavlović @ 19.07.2009. 21:15 ] @
Au sunce ti, kakav ownage....

Braco, vracam se ja na staru dobru Alsu, ili jos bolje pc_spkr :)))

Na svu srecu... :

pavlovici@Kompjuter:~$ cd Radna\ površ/
pavlovici@Kompjuter:~/Radna površ$ ls
cheddar_bay.tgz exploit.c
pavlovici@Kompjuter:~/Radna površ$ gcc -o eksploit exploit.c
pavlovici@Kompjuter:~/Radna površ$ ls
cheddar_bay.tgz eksploit exploit.c
pavlovici@Kompjuter:~/Radna površ$ chmod +x exploit
chmod: cannot access `exploit': No such file or directory
pavlovici@Kompjuter:~/Radna površ$ chmod +x eksploit
pavlovici@Kompjuter:~/Radna površ$ sh ./eksploit
./eksploit: 3: Syntax error: "(" unexpected
pavlovici@Kompjuter:~/Radna površ$ ./eksploit
UNABLE TO OPEN THE DEVICE!
pavlovici@Kompjuter:~/Radna površ$

Haha, hakujem mami i tati komp :D :D
[ combuster @ 20.07.2009. 18:57 ] @
Hah, tacno sam znao:

Citat:

un/tap: Fix crashes if open() /dev/net/tun and then poll() it. (CVE-2009-1897)

commit 3c8a9c63d5fd738c261bd0ceece04d9c8357ca13 upstream.

Fix NULL pointer dereference in tun_chr_pool() introduced by commit
33dccbb050bbe35b88ca8cf1228dcf3e4d4b3554 ("tun: Limit amount of queued
packets per device") and triggered by this code:

int fd;
struct pollfd pfd;
fd = open("/dev/net/tun", O_RDWR);
pfd.fd = fd;
pfd.events = POLLIN | POLLOUT;
poll(&pfd, 1, 0);


Citat:

Add '-fno-delete-null-pointer-checks' to gcc CFLAGS

commit a3ca86aea507904148870946d599e07a340b39bf upstream.

Turning on this flag could prevent the compiler from optimising away
some "useless" checks for null pointers. Such bugs can sometimes become
exploitable at compile time because of the -O2 optimisation.


Citat:

md: avoid dereferencing NULL pointer when accessing suspend_* sysfs attributes.

commit b8d966efd9a46a9a35beac50cbff6e30565125ef upstream.

If we try to modify one of the md/ sysfs files
suspend_lo or suspend_hi
when the array is not active, we dereference a NULL.
Protect against that.


Malko su se uozbiljili cini mi se :)
[ oxygenne @ 20.07.2009. 20:08 ] @
no pulseaudio
[ combuster @ 20.07.2009. 20:24 ] @
E pa sad vise ne radi :) :P Mada kod mene nije radio nikad :) No pulse audio, no SELinux, no LSM, no nuthin' Sreca po mene pa sam imao bug u kernel-u koji je sprecavao coveka da uradi to sto je uradio :) A sad su taj bug sa tun-om ispravili ali su sprecili dereferenciranje null ptr-a...
[ solarko @ 25.07.2009. 08:30 ] @
Meni ne radi ni zvucna karta, ali za to su exploiti ionako retki :)

_____________________
Beograd