Kamis, 04 Juni 2009

Patch Bug : Joomla 1.5 Token

Sebenernya akhir-akhir ini saya lagi sakit. Jadi, jangan bingung ada renggang waktu yang agak lama dari postingan sebelumnya. Artikel ini adalah lanjutan dari artikel yang sebelumnya.

———————————–

Tindakan Ucok men-deface situs Rusia dengan memanfaatkan bug pada Password Reset Token di Joomla 1.5 membuat pemilik situs geram. Dia langsung mengontak sang webmaster untuk menyelesaikan masalah ini. Pemilik situs meminta uang yang dipakai untuk menggaji webmaster itu dikembalikan sebagai ganti rugi karena situsnya telah di-deface.

Webmaster yang bernama Achev ini tentunya tidak akan tinggal diam. Dia gak mau uangnya dikembalikan begitu aja. Setelah proses tawar menawar akhirnya sang client memutuskan tidak meminta ganti rugi tapi meminta Achev untuk memperbaiki situsnya agar tidak di-deface untuk keduakalinya apalagi dengan cara yang sama.

:licik: ..

Setelah ditelusuri lebih lanjut Achev mengetahui bahwa sang defacer (Ucok) memakai bug Token pada Password Reset di situsnya. Lalu dia mencari informasi di Internet cara untuk memperbaiki bugnya dan akhirnya dia menemukan caranya.





The Bug

aksi



Seperti di artikel saya yang sebelumnya yaitu Deface for Newbie : Joomla 1.5 Password Reset diceritakan kalau Ucok melakukan penetration sederhana dengan memasukkan karakter sakti Single Quote di halaman Password Reset yang berada di :



http://situsjoomla.com/index.php?option=com_user&view=reset&layout=confirm





Password Reset ini sebenernya adalah fitur Joomla 1.5 untuk memudahkan Admin apabila lupa password. Mungkin karena lengah dalam men-develop fitur ini, maka bug-pun bersarang dan menjadi jalan bagi seorang Script Kiddie untuk men-deface situsnya :P .



Terlihat bahwa bugnya itu terdapat di komponen “com_user”. Penanganganan password reset ini terletak pada file :



http://situsjoomla.com/components/com_user/models/reset.php



Sebagai informasi, klik link berikut untuk melihat isi dari reset.php yang belum di-patch.



LIHAT UN-PATCHED RESET.PHP



Coba cari potongan kode seperti ini di reset.php :







function confirmReset($token)

{

global $mainframe;



$db = &JFactory::getDBO();

$db->setQuery('SELECT id FROM #__users WHERE block = 0 AND activation = '.$db->Quote($token));



// Verify the token

if (!($id = $db->loadResult()))

{

$this->setError(JText::_('INVALID_TOKEN'));

return false;

}



// Push the token and user id into the session

$mainframe->setUserState($this->_namespace.'token', $token);

$mainframe->setUserState($this->_namespace.'id', $id);



return true;

}




Yang bermasalah pada kode diatas adalah pada bagian ini :





$db->setQuery('SELECT id FROM #__users WHERE block = 0 AND activation = '.$db->Quote($token));






Jika user memasukkan Single Quote (karakter ‘ ) pada Token box maka query yang terlihat jadi seperti ini :





SELECT id FROM jos_users WHERE block = 0 AND activation = ''




Lihat setelah tanda sama dengan yang terakhir. Tanda petik yang dimasukkan membuatnya menjadi empty quote (kutipan kosong) yang akan “diluluskan” begitu saja untuk menjalankan fungsi password reset.



Untuk lebih jelasnya, lihat kesini : http://milw0rm.com/exploits/6234



:diem: ..



 





PATCHING



Untuk mencegah user melakukan penetrasi dengan memasukkan Single Quote pada kotak Token maka Achev cukup menambahkan kode penambal. Kode ini akan membuat apabila ada user yang memasukkan karakter ‘ akan menampilkan pesan Error. Kode-nya seperti ini :





if(strlen($token) != 32) {

$this->setError(JText::_('MAU COBA CRACK? AWAS GW ADUIN FBI!!'));

return false;

}






Ternyata Achev ini bisa berbahasa Indonesia dan dia tahu bahwa yang kemarin melakukan defacing terhadap situsnya adalah orang Indonesia. Sehingga dia memakai bahasa Indonesia dalam pesan error-nya (walaupun ancamannya untuk melapor ke FBI rasanya terlalu berlebihan :) ).  Pesan tersebut bisa diganti dengan yang lainnya.





Kode tersebut diletakkan dibawah potongan kode :





	function confirmReset($token)



{



global $mainframe;




Sebagai perbandingan, klik link berikut untuk melihat file reset.php yang udah di-patch oleh Achev.



LIHAT PATCHED RESET.PHP



 



Yeah It’s Patched!



rokok



Selesai! Dengan begitu gak ada lagi yang masuk secara diam-diam melalui bug Token ini.





Udah? Gitu doang? Iya, emang gitu doang :lol: . Cukup singkat kan? Iya, ini memang cara yang singkat untuk mencegah orang seperti Ucok. Orang yang tidak bertanggung jawab dan dengan seenaknya men-deface situs yang tak bersalah hanya untuk popularitas. Banyak yang bisa melakukan Defacing. Tapi dari orang yang bisa melakukan Defacing tersebut tidak banyak yang bisa mencegah serangan Deface itu sendiri.



Selain cara diatas, kalian juga bisa melakukannya dengan menguprade ke Joomla 1.5.6 keatas.



Sekian, kalau ada kesalahan mohon diperbaiki. Maklum newbie.. :gugup: ..



 



(Note : Teknik Patching-nya Beneran. Tapi cerita ini hanyalah fiksi belaka. Jika ada kesamaan nama atau kejadian itu semata-mata tidak sengaja)




Sumber : http://farisblog.com/?p=385

Tidak ada komentar:

Posting Komentar