Slackware dan Linux RDS Exploit

24 Oct 2010

oracle-useRDS (Reliable Datagram Sockets) adalah sebuah protokol antarproses (IPC) yang disediakan untuk melayani pengiriman datagram yang berurutan, selalu tersedia, memiliki overhead rendah serta handal, antara ratusan hingga ribuan titik akhir data yang tidak terkoneksi. RDS digunakan oleh program database ORACLE untuk saling mengirimkan pesan sistem antara titik-titik akhir (soket) pada sistem local atau titik-titik akhir yang tersebar pada beberapa mesin dengan proses-proses pada sisi penggunanya sekaligus memverifikasi dan memvalidasi apakah data-data yang terkirim tersebut memiliki penerima atau tidak. Celakanya linux kernel versi 2.6.30 hingga 2.6.36-rc8 memiliki sebuah bug yang sangat parah dan berbahaya karena dapat mengakibatkan pengambilalihan seluruh sistem oleh pengguna biasa (pengguna normal) yang menjadikan dirinya root (pengguna root) dengan memanfaatkan sebuah celah keamanan yang berada pada level kernel yang dalam hal ini pada modul RDS.

Berikut ini adalah petikan dari VSR Security Advisories:

On October 13th, VSR identified a vulnerability in the RDS protocol, as implemented in the Linux kernel.  Because kernel functions responsible for copying data between kernel and user space failed to verify that a user-provided address actually resided in the user segment, a local attacker could issue specially crafted socket function calls to write abritrary values into kernel memory.  By leveraging this capability, it is possible for unprivileged users to escalate privileges to root.

Saya telah mencoba eksploit ini dan berhasil menjadi root pada sistem Ubuntu 10.04 dan Fedora 12 yang telah di-update hingga tanggal 22 Oktober 2010. Anda cukup mengunduh kode C eksploitnya dan kemudian mengkompilasinya dengan gcc, lalu login sebagai user biasa ke sebuah sistem linux, kemudian masukkan dan jalankan program eksploitnya. Dalam beberapa detik anda akan langsung menjadi root. Penemu kesalahan ini, Dan Rosenberg, menyatakan bahwa dia telah berhasil mengeksploit sistem OpenSuse. Lain halnya dengan Slackware Linux, versi current pada tanggal yang sama, dimana eksploit ini gagal untuk mendapatkan seluruh simbol modul RDS yang diekspor kernel sehingga proses eksploit terhenti dan saya tidak sampai menjadi root. Kegagalan ini kemungkinan disebabkan oleh prosedur kompilasi kernel Slackware yang selalu men-strip (menghilangkan) kode debug yang tidak diperlukan dari binary kernel.

Untungnya linux kernel telah memproduksi patch untuk menambal kesalahan ini dan dapat diunduh di sini:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commi...

Jadi, anda-anda atau mungkin teman-teman anda yang menggunakan Fedora, OpenSuse, atau Ubuntu di mesin-mesin produksinya, saya sarankan untuk segera memperbarui kernel anda. Bagi anda yang tidak sempat memperbarui sistem, dan tidak menggunakan database oracle, kita dapat mencegah eksploit ini dengan menambahkan parameter untuk modprobe modul rds seperti ini:

# echo "alias net-pf-21 off" > /etc/modprobe.d/disable-rds

Selamat mengeksploitasi sistem.