Keamanan meninggalkan Anda

Saya menghadiri pertemuan Kelompok Kerja Anti-Penyalahgunaan Pesan, Perangkat Lunak Jahat dan Malware (m3aawg.org) di Brooklyn, New York. Saya mengharapkan cuaca yang lebih baik untuk berkeliaran di sekitar kota, menikmati konferensi, dan berbagai pilihan makanan di daerah tersebut. Saya sangat yakin akan kejernihan langit sehingga saya bahkan tidak membawa apa pun dari hujan. Dan hujan turun sepanjang minggu. Ini memaksa saya untuk tinggal di kamar hotel saya dengan WiFi gratis dan laptop kerja saya. Saya memutuskan untuk menghabiskan waktu ini meneliti Node.js dan paket terkaitnya tersedia di https://www.npmjs.com .


Ada ribuan paket dari pengguna yang tersedia untuk diunduh dan dipasang di proyek Anda. Saya mencari NPM untuk nama-nama paket populer seperti file, cadangan, unduh, atau unggah. Pencarian terakhir menunjukkan kepada saya sebuah proyek bernama upload file jQuery dari Blueimp. Uraiannya tampak cukup menarik untuk diunduh dan dijelajahi.


Widget unggah file untuk jQuery, dengan dukungan untuk banyak pemilihan file, seret & lepas, indikator progres, validasi, dan pratinjau gambar, audio dan video. Ini mendukung permintaan lintas-domain, mekanisme unggah file parsial dan terbarukan dengan mengubah ukuran gambar di sisi klien. Ia berfungsi di semua platform server (PHP, Python, Ruby on Rails, Java, Node.js, Go, dll.), Yang mendukung pengunggahan file standar melalui formulir HTML.

Saya mulai melihat kode sumber paket dan fokus pada beberapa file PHP di direktori server / php. File-file itu disebut upload.php dan UploadHandler.php. upload.php disebut UploadHandler.php, di mana kode unggah file utama berada. Saya juga memperhatikan bahwa file diunggah ke direktori file / di root dari server web. Saya menulis perintah sederhana dengan curl dan skrip PHP primitif yang mengonfirmasi kepada saya bahwa saya dapat mengunggah file ke server dan kemudian menggunakannya untuk menjalankan perintah di server.


$ curl -F "files=@shell.php" http://example.com/jQuery-File-Upload-9.22.0/server/php/index.php 

Di mana file shell.php berisi:


 <?php $cmd=$_GET['cmd']; system($cmd);?> 

Membuka halaman di browser dengan parameter cmd = id dari server uji mengembalikan id pengguna yang darinya proses server diluncurkan. Saya berasumsi bahwa kerentanan ini tidak luput dari perhatian dan pencarian Google cepat mengkonfirmasi kepada saya bahwa proyek lain yang menggunakan kode ini atau turunannya ternyata rentan. Ada juga beberapa video yang menunjukkan cara menyerang paket perangkat lunak yang serupa.


Saya memberi tahu penulis tentang Upload File jQuery dan mulai mendokumentasikan apa yang saya temukan untuk menetapkan nomor CVE. Segera keesokan harinya, seorang penulis yang agak malu menjawab saya, meminta lebih banyak informasi, karena ia tidak dapat mereproduksi kerentanan di lingkungan pengujiannya.


Setelah membandingkan konfigurasi pengujian kami melalui email, kami menemukan bahwa pengembang Apache telah mematikan dukungan untuk file .htaccess sejak versi 2.3.9. Ternyata ini dilakukan untuk meningkatkan kinerja , sehingga server tidak perlu memeriksa file ini setiap kali mengakses direktori yang sesuai. Selain itu, perubahan ini juga dibuat untuk mencegah pengguna mengesampingkan pengaturan keamanan yang dikonfigurasi di server.


Dengan demikian, Apache memiliki niat baik ketika menonaktifkan .htaccess, tetapi perubahan mereka juga membuat beberapa pengembang dan proyek mereka dalam bahaya, khususnya jika mereka mengandalkan pengaturan keamanan yang dibuat dalam .htaccess.


Dalam kasus perpustakaan ini, untuk menangani situasi ini dengan benar dan memperbaiki kerentanan unggah file CVE-2018-9206, pengembang mengubah kode sehingga hanya dapat mengunduh file gambar.


Masalah ini lebih dari satu proyek.


Penting juga dicatat di sini bahwa karena perubahan di Apache, beberapa dari 7.800 proyek yang tersisa mungkin rentan terhadap masalah pengunggahan file.



Sebagian besar dari garpu ini masih membawa kerentanan asli dalam kode mereka. Dalam beberapa kasus, kerentanan tetap ada bahkan setelah pengembang mengedit kode asli dari Blueimp untuk menanamkannya di proyeknya, sehingga proyek-proyek masih rentan terhadap contoh serangan saya dengan sedikit variasi.


Ini berarti bahwa jika salah satu dari proyek ini digunakan dalam produksi, maka itu terkena kerentanan mengunduh file dengan eksekusi selanjutnya. Membuka peluang untuk mencuri data dari aplikasi, menyuntikkan malware, deface, dan peluang lain untuk membahayakan.


Sayangnya, tidak ada cara untuk menentukan dengan tepat berapa banyak proyek yang bercabang dari Upload File jQuery asli masih aktif didukung dan menerapkan perubahan yang dibuat dalam proyek utama. Juga tidak mungkin untuk menentukan dengan tepat di mana proyek bercabang digunakan dalam produksi, jika ada. Selain itu, versi proyek yang lebih lama juga rentan terhadap masalah dengan mengunduh file, hingga 2010.


Kesimpulan


Internet mengandalkan banyak mekanisme keamanan untuk menjaga sistem, data, dan transaksi kami aman dan terlindungi. Jika salah satu dari mekanisme ini tiba-tiba menghilang, ini dapat membahayakan keselamatan pengguna dan pengembang yang bergantung padanya.


Merupakan ide bagus bagi pengembang untuk melihat perubahan dalam sistem dan pustaka yang menjadi basis proyek mereka. Dalam artikel ini, mekanisme keamanan yang dihapus Apache tidak hanya memengaruhi unggahan file Bluequ's Jquery, tetapi semua garpu dan cabangnya. Kerentanan memengaruhi banyak proyek yang bergantung padanya, mulai dari aplikasi web yang berdiri sendiri hingga plugin untuk WordPress dan CMS lainnya.


Source: https://habr.com/ru/post/id427171/


All Articles