Haruskah plugin yang dipelihara ditangguhkan dari repositori WordPress ketika ada masalah keamanan?

Diterbitkan: 2020-03-12

Pada 27 Februari 2020, pukul 21:34 (CET) kami menerima email yang memberi tahu kami bahwa Log Aktivitas WP plugin kami “ sementara ditarik dari direktori Plugin WordPress.org karena eksploitasi” .

Kami mengirimkan perbaikan pada hari Jumat, 28 Februari 2020, pukul 16:08. Kami hanya butuh 16,5 jam untuk merilis perbaikan. Kami akan memperbaiki masalah lebih awal jika ini terjadi selama jam kerja normal kami (kami berbasis di Eropa), karena kami memiliki waktu respons dukungan (referensi) yang sangat baik.

Plugin kami diaktifkan kembali pada Senin 2 Maret 2020 pukul 13:00. Itu adalah 69 jam setelah kami mengirimkan perbaikan. Penting untuk dicatat bahwa butuh waktu lama bagi tim untuk mengaktifkan kembali plugin karena akhir pekan.

Log Aktivitas WP ditarik dari repo

Mengapa saya menulis ini?

Saya ingin menunjukkan bahwa saya percaya bahwa plugin yang tidak dikelola yang memiliki masalah keamanan harus ditangguhkan dari repositori WordPress. Juga, saya sangat menghormati pekerjaan yang dilakukan oleh para sukarelawan di tim peninjau plugin, dan saya juga bertanggung jawab penuh atas masalah keamanan yang dilaporkan.

Namun, saya yakin bahwa masalah keamanan yang dilaporkan dalam plugin yang dipelihara mungkin dapat ditangani dengan lebih baik. Karena cara mereka ditangani saat ini, reputasi plugin mendapat pukulan negatif yang besar, dan penggunanya serta situs web mereka berada dalam risiko. Oleh karena itu pada akhir posting ini saya menyoroti beberapa kemungkinan perbaikan yang dapat membantu, dan saya pikir mereka harus dipertimbangkan. Idenya adalah untuk selalu menempatkan lebih sedikit pengguna pada risiko, dan untuk mengurangi dampak pada plugin dan pengembang.

Dalam posting ini saya juga mendokumentasikan semua detail dari apa yang terjadi, dan menjelaskan kerentanan kasus tepi tingkat keparahan rendah yang dilaporkan di plugin kami.

Bagaimana prosedur untuk melaporkan masalah keamanan plugin WordPress?

Dari pedoman resmi di Buku Pegangan Plugin:

Setiap upaya untuk menghubungi pengembang secara langsung harus dilakukan sebelum Anda melaporkan plugin kepada kami (walaupun kami memahami ini bisa sulit – periksa kode sumber plugin terlebih dahulu, banyak pengembang mencantumkan email mereka). Jika Anda tidak dapat menghubungi mereka secara pribadi, silakan hubungi kami secara langsung dan kami akan membantu.

Apa yang terjadi dalam kasus kami?

Kami membuatnya sangat jelas di plugin yang mengembangkan plugin. Lihat saja halaman plugin di repositori dan Anda akan mendapatkan ide! Kami juga membuatnya sangat mudah untuk menghubungi kami.

Namun, tidak ada yang melaporkan masalah keamanan kepada kami sebelum plugin ditarik sementara dari repositori plugin. Jadi seseorang melaporkan masalah tersebut ke tim peninjau plugin WordPress dan mereka sementara menarik plugin kami dari repositori tanpa pemberitahuan sebelumnya.

Sebelum kita menyelami mengapa dan apa, dan apa yang baik, buruk dan apa yang dapat ditingkatkan, mari kita lihat kerentanan plugin dan penjelasan singkat tentang siapa kita.

Apa kerentanan plugin?

Kami memiliki wizard penginstalan di WP Activity Log untuk membantu pengguna mengonfigurasi plugin. Salah satu pengaturan di wizard memungkinkan Anda mengizinkan pengguna non-admin untuk membaca log aktivitas.

Wizard penginstalan Log Aktivitas WP

Namun, kami membuat kesalahan; kami tidak memeriksa apakah pengguna yang menjalankan wizard diautentikasi. Oleh karena itu, pengguna yang tidak diautentikasi dapat menjalankan wizard dan mengizinkan pengguna atau peran lain mengakses pengaturan plugin. Namun, ini adalah masalah tingkat keparahan rendah kasus tepi.

Mengapa ini merupakan masalah keamanan kasus tepi dengan tingkat keparahan rendah?

Penyerang hanya dapat mengeksploitasi ini jika:

  • wizard penginstalan tidak pernah diselesaikan oleh penginstal,
  • penyerang sudah memiliki pengguna / memiliki akses ke pengguna di situs web,
  • Penyerang hanya bisa mendapatkan akses ke pengaturan plugin dan log aktivitas.

Dengan mengeksploitasi masalah keamanan ini, penyerang tidak mendapatkan akses akses ke hak istimewa lainnya di situs WordPress. Oleh karena itu eksploitasi ini tidak memiliki efek negatif pada perilaku dan fungsionalitas situs web itu sendiri.

Bukti dari konsep

POC sangat sederhana. Kunjungi halaman ini sebagai pengguna yang tidak diautentikasi:

http://example.com/wp-admin/admin-post.php?page=wsal-setup&current-step=access

Ini adalah langkah wizard yang memungkinkan Anda menentukan siapa yang dapat melihat log. Cari nonce '_wpnonce' di sumber halaman HTML, salin dan masukkan ke dalam perintah curl berikut:

$ curl 'http://example.com/wp-admin/admin-post.php?page=wsal-setup&current-step=access' -d '_wpnonce=INSERT-NONCE-HERE&wsal-access=yes&editors%5B%5D= pelanggan&save_step=Berikutnya'

Setelah Anda masuk sebagai pelanggan dan Anda akan memiliki akses penuh ke pengaturan plugin.

Mengapa kami menganggap kasus ini salah penanganan?

Di email yang kami kirim, ada yang berikut:

Kami tidak menutup plugin dengan enteng, dan ketika menyangkut masalah keamanan, kami berusaha untuk menyeimbangkan volume pengguna dan riwayat pengembang dengan tingkat keparahan dan potensi kerusakan laporan.

Namun, saya pikir plugin kami ditarik terlalu dini. Sangat jauh;

  1. Ketika kami memiliki masalah di masa lalu, kami selalu mengatasinya dalam beberapa jam. Kami melakukan hal yang sama kali ini.
  2. Kami selalu menjawab tepat waktu ketika tim peninjau plugin menghubungi.
  3. Masalah keamanan hanya memengaruhi plugin kami (keparahan rendah) dan itu adalah kasus tepi.
  4. Masalah keamanan tidak dapat dieksploitasi secara otomatis.
  5. Satu-satunya kerusakan yang dapat dilakukan penyerang adalah mengubah pengaturan plugin, membaca log aktivitas, atau menghapusnya.

Apa pendapat pengembang lain tentang situasi seperti itu?

Sebagian besar dari kita telah membaca artikel, tweet, atau pesan di media sosial tentang masalah serupa. Namun, saya ingin mencari tahu sendiri apa yang dipikirkan orang lain, terutama pengembang, tentang hal ini. Saya pikir ini penting karena mungkin ada beberapa hal yang tidak saya lihat.

Untuk memulainya, saya mengirim email ke orang yang mengidentifikasi masalah tersebut, berterima kasih padanya atas pengungkapan yang bertanggung jawab. Tanggapannya adalah:

“Senang melihat Anda dengan cepat memperbaiki masalah di plugin. BTW, saya perhatikan bahwa orang-orang di wordpress.org menutupnya selama beberapa hari, itu agak keras dan tidak benar-benar diperlukan.”- Jerome Bruandet.

Saya juga telah melakukan polling kecil di grup Facebook Jual Produk WordPress. Meskipun grup ini kecil, mayoritas anggotanya adalah pengembang plugin dan tema. Dari jajak pendapat kita dapat melihat bahwa pengembang dengan suara bulat setuju bahwa dalam kasus masalah tingkat keparahan rendah hingga sedang, pengembang harus dihubungi dan diberi kesempatan untuk memberikan perbaikan dan tidak menarik plugin:

Jajak pendapat pengembang plugin WordPress di grup facebook

Bagaimana prosedur ini dapat ditingkatkan?

Sejauh pengetahuan saya, tidak ada prosedur terdokumentasi yang berlaku ketika seseorang melaporkan masalah keamanan dalam sebuah plugin. Jika ini masalahnya, prosedur seperti di bawah ini mungkin membantu pengembang dan juga mengurangi risiko orang.

Hubungi pengembang dan setujui rencana tindakan sebelum menutup plugin

Tim peninjau plugin dapat mencoba menghubungi pengembang dan mengonfirmasi kerentanan sebelum menutup plugin. Pengembang harus membalas dengan rencana tindakan, termasuk tanggal yang wajar untuk perbaikan.

Jika perlu, tim peninjau plugin dapat menetapkan tenggat waktu. Misalnya, pengembang harus memiliki waktu antara 12 dan 24 jam untuk memperbaiki masalah tersebut. Namun, dalam beberapa kasus mereka mungkin membutuhkan lebih banyak waktu, tergantung pada zona waktu mereka berada dll. Jika pengembang gagal merespons, plugin harus ditarik dari repositori.

Tentukan tingkat keparahan dan jenis masalah keamanan

Ini bisa terbuka untuk diperdebatkan. Namun, seseorang dengan sedikit pengalaman keamanan dapat dengan mudah mengetahui apakah masalah keamanan yang dilaporkan dapat dieksploitasi secara otomatis, apakah itu kasus tepi atau bukan, dan apa dampaknya dari bukti konsep yang dilaporkan (POC).

Periksa apakah pengembang tetap pada rencana tindakan

Harus ada semacam pemeriksaan untuk mengonfirmasi bahwa pengembang mengirimkan perbaikan tepat waktu dan tetap pada tugas lain yang termasuk dalam rencana tindakan.

Menarik plugin yang dipelihara dari repositori tidak membantu

Dalam kasus plugin yang dipelihara, menariknya dari repositori lebih banyak merugikan daripada menguntungkan. Sebagai contoh;

  1. Anda mengumumkan bahwa plugin memiliki masalah, kemungkinan besar masalah keamanan. Ini menimbulkan banyak alarm dan menyoroti plugin. Ini juga seperti mengundang penyerang, memberi tahu mereka bahwa sesuatu dalam plugin mungkin dapat dieksploitasi.
  2. Ini mengekspos basis pengguna plugin saat ini karena tiba-tiba, situs web mereka menjadi target. Sebagian besar pengguna tidak tahu apa yang harus mereka lakukan, terutama jika fungsionalitas plugin adalah inti dari situs web dan bisnis mereka.
  3. Anda meningkatkan kemungkinan menunda perbaikan. Ini biasanya disebabkan oleh kurangnya komunikasi, atau karena hari libur dan akhir pekan.

Orang mungkin berpendapat bahwa dengan menarik plugin dari repositori Anda menghentikan penyebaran infeksi. Namun, jika masalah keamanan memiliki tingkat keparahan yang rendah, eksploitasi tidak dapat diotomatisasi, dan pengungkapannya bertanggung jawab, tidak ada risiko yang terlibat, atau risikonya sangat rendah.

Penafian: Ini bukan serangan

Saya ingin menunjukkan bahwa ini bukan serangan terhadap tim peninjau plugin WordPress atau siapa pun yang terlibat dalam proses ini. Sejujurnya saya menghormati pekerjaan mereka dan saya tahu bahwa apa yang mereka lakukan dilakukan dengan itikad baik. Namun, pasti ada tempat untuk perbaikan, seperti di setiap sistem dan proses lainnya.

Banyak yang mungkin akan memberi tahu saya bahwa jika saya menginginkan perubahan, saya harus menjadi sukarelawan daripada menulis posting ini.

Saya sudah mencoba untuk bergabung selama beberapa waktu; Saya telah berbicara dengan beberapa orang di WordCamps yang berbeda untuk terlibat, dan saya juga telah memantau halaman plugin Make WordPress untuk panggilan sukarelawan. Namun, dalam beberapa tahun terakhir mereka tidak memiliki lowongan. Ketika mereka membutuhkan bantuan, mereka menambahkan anggota baru hanya dengan undangan.