Pengembang Plugin & Tema: Inilah Yang Dapat Anda Pelajari dari Kerentanan Keamanan SDK Kami
Diterbitkan: 2019-03-02Minggu ini cukup intens untuk tim kami karena kami harus berurusan dengan kerentanan keamanan. Keamanan adalah prioritas utama bagi kami dan ini adalah kerentanan besar pertama yang ditemukan di SDK kami dalam empat tahun. Sayangnya, seperti halnya perangkat lunak apa pun – pengembang juga manusia, jadi kesalahan bisa saja terjadi, baik Anda pengembang indie, toko tema dengan 20 orang, atau Google. Tujuan artikel ini pertama-tama adalah untuk transparansi, tetapi juga untuk memberi Anda wawasan tentang bagaimana kami menangani insiden tersebut dan apa yang dapat Anda pelajari darinya.
Pada hari Senin, 25 Februari 2019, kami menerima email dukungan dari pengembang yang membantu yang menemukan masalah GitHub di repositori WooCommerce. Masalah ini dibuat oleh perwakilan perusahaan hosting kecil yang melihat aktivitas mencurigakan di server mereka. Perwakilan tersebut menyertakan log aktivitas relevan yang mengindikasikan dua potensi serangan, dan salah satunya menargetkan plugin yang menjalankan Freemius SDK.
Karena kami sangat memperhatikan keamanan, kami segera melakukan penyelidikan menyeluruh dan mengonfirmasi bahwa kerentanan memang ada di SDK kami.
Karena parahnya kerentanan, kami segera mulai memperbaikinya. Setelah hanya beberapa jam, kami merilis tag yang ditambal, dan memberi tahu semua pengembang yang menggunakan versi SDK yang rentan untuk memperbarui SDK di semua produk mereka secepatnya. Kami juga memperbarui masalah GitHub asli agar tim WooCommerce mengetahuinya (masalah GH yang kami hapus setelah beberapa jam untuk mengurangi paparan).
Untuk mengurangi paparan dan memberi semua orang periode "kelonggaran" untuk memperbarui ke versi tetap, kami menanyakan dua hal kepada pengembang:
(a) Jika peningkatan keamanan ini akan disertakan dalam log perubahan Anda, harap gunakan kata-kata umum saja seperti “Perbaikan keamanan”.
(b) Bahkan setelah memperbarui dan merilis versi yang ditambal, tolong jangan ungkapkan masalah ini selama 30 hari ke depan, memberikan waktu yang cukup bagi semua mitra kami dan penggunanya untuk memperbarui.
Hanya sehari setelahnya, sebuah situs web yang mencakup kerentanan plugin (sengaja tidak menautkannya atau menyebutkan namanya) menerbitkan posting tentang kerentanan tersebut, termasuk informasi tentang cara mengeksploitasinya sambil menyebutkan beberapa plugin yang terpengaruh. Ini mengejutkan kami karena kami baru saja memberi tahu pengembang plugin & tema tentang masalah ini kurang dari 24 jam sebelumnya. Mereka tidak menghubungi kami atau mengikuti praktik pasar Pengungkapan yang Bertanggung Jawab , yang menurut kami sangat tidak bertanggung jawab dan tidak etis.
Saya menghubungi mereka meminta untuk sementara membatalkan publikasi laporan untuk mengurangi eksposur dan memberi pengembang kami dan pengguna mereka kesempatan untuk memperbarui ke versi yang ditambal sebelum menarik perhatian yang tidak diinginkan dari lebih banyak peretas. Tetapi orang yang saya ajak berkomunikasi, yang tidak pernah mengungkapkan nama mereka (saya bertanya kepada mereka), memiliki ideologi lurus mereka sendiri dan sepertinya akal sehat tidak terlalu menarik bagi mereka. Saya memang mencoba menjelaskan situasi bermasalah dan peningkatan risiko yang mereka hadapi kepada banyak pengembang dan pengguna, tetapi upaya saya gagal, dan saya menyadari bahwa pertukaran email saya hanya membuang-buang waktu.
Saat komunitas pengembang kami memperbarui plugin dan tema mereka ke SDK yang baru ditambal yang kami rilis, kami menemukan dua masalah:
- Beberapa pengembang tidak mendapatkan email peringatan kami karena mereka mendaftar ke Freemius dengan alamat email yang tidak mereka periksa.
- Kami sengaja tidak menandai tag GitHub yang ditambal sebagai rilis resmi untuk menghindari menarik perhatian. Namun, kami mengetahui bahwa pengembang yang menggunakan Komposer untuk memperbarui perpustakaan mereka tidak mendapatkan pembaruan terbaru karena packgist hanya mengambil rilis, kecuali jika menentukan tag secara eksplisit.
Untuk mengatasi masalah tersebut:
- Karena kerentanan telah dipublikasikan secara publik, dua hari yang lalu kami menandai versi yang ditambal sebagai rilis resmi sehingga pengembang yang mengandalkan packgist akan dapat memperbarui.
- Pagi ini kami mengirim email kumpulan pesan lainnya kepada pengembang yang belum memperbarui SDK di semua produk mereka. Kali ini kami mengirim pesan ke saluran dukungan resmi mereka untuk meningkatkan peluang semua orang menerima email dengan benar.
Meskipun kami ingin menunda publikasi kerentanan ini setidaknya dua minggu, kami menerima pertanyaan lebih lanjut dari WP Tavern yang meminta masukan kami sebelum mereka menerbitkan artikel mereka sendiri tentang topik tersebut, yang merupakan masalah yang merusak keyboard pengembang.
Kesalahan Yang Kami Buat Dan Apa Yang Dapat Anda Pelajari Dari Mereka
Melihat kembali kejadian itu, kami membuat beberapa kesalahan yang dapat kami hindari dengan mudah dan akan membuat hidup semua orang menjadi lebih mudah.
Masuk ke mode senyap dan hanya beri tahu mereka yang perlu tahu
Karena kami sangat ingin memperbaiki masalah ini secepatnya, saya pribadi membuat kesalahan "pemula" yang menarik perhatian yang tidak diinginkan terlalu dini. Saya melanjutkan dan melakukan perbaikan ke repositori GitHub yang kami gunakan untuk mengelola SDK. Tidak hanya repositori publik, tetapi saya menjelaskan perbaikannya dan menggunakan kata "keamanan" di dalamnya.
Pendekatan yang lebih baik adalah membuat repositori versi pribadi/tertutup, menambal masalah keamanan di sana, dan hanya memaparkannya kepada pengembang yang relevan alih-alih menjadikannya publik. Ini tidak akan menarik perhatian dari "pemburu kerentanan".
Jangan buang energi Anda untuk "troll keamanan"
Kesalahan kedua adalah mencoba berinteraksi dengan perusahaan di balik situs yang menerbitkan kerentanan. Itu benar-benar membuang waktu dan energi, dan hanya memicu lebih banyak antagonisme yang berakhir dengan posting lain tentang kerentanan. Saya akan mengatakan bahwa indikator yang baik untuk memutuskan apakah perlu waktu Anda untuk menghubungi penulis posting yang membahayakan pengguna plugin atau tema Anda, adalah jika ada nama di belakang posting/situs web/perusahaan. Jika mereka bersembunyi di balik proxy dan bertindak tidak rasional, kemungkinan Anda dapat berbicara dengan akal sehat kepada mereka praktis nol.
Jadi ini saran saya – masuk ke mode senyap dan hanya beri tahu orang-orang yang harus tahu tentang kerentanannya. Dalam hal plugin/tema, itu adalah pengguna Anda. Ini juga merupakan kesempatan yang baik untuk menekankan pentingnya mengumpulkan email pengguna Anda. Jika Anda tidak memiliki cara untuk berkomunikasi secara pribadi dengan pengguna Anda, Anda tidak memiliki cara yang efektif untuk memberi tahu mereka secara pribadi tentang masalah keamanan.
Status Insiden Saat Ini
Lebih dari 60% pengembang yang menggunakan SDK kami telah meningkatkan versi ke versi yang ditambal. Selain itu, SDK dilengkapi dengan mekanisme khusus yang memungkinkan beberapa plugin atau tema yang didukung Freemius dipasang di situs WordPress yang sama untuk menggunakan SDK versi terbaru jika salah satu produk sudah diperbarui. Jadi itu bagus.
Konon, masih banyak situs yang rentan. Itu sebabnya saya tidak menyebutkan detail teknis tentang kerentanan itu sendiri, atau produk yang terpengaruh. Kami masih ingin menawarkan pengembang kami kesempatan untuk menambal produk mereka dan mengizinkan pengguna mereka untuk memperbarui ke versi aman.
Bagaimana Cara Mengurangi Risiko Keamanan Di Plugin/Tema WordPress Anda?
Jika Anda tidak memiliki latar belakang keamanan, Google "praktik terbaik keamanan web" dan Anda akan menemukan banyak artikel dan praktik. Bacalah beberapa di antaranya untuk mengetahui potensi risiko dan kesalahan modern dan tipikal. Ingatlah hal itu selama proses pengembangan dan pengujian. Praktik baik lainnya adalah menjalankan audit keamanan berkala dengan mempekerjakan peneliti keamanan. Ini akan memakan biaya beberapa ratus dolar, tetapi jika Anda mengandalkan produk Anda sebagai sumber pendapatan utama Anda, itu tidak masalah.
Sayangnya, seperti dalam kasus kami, hal-hal buruk masih bisa terjadi. Meskipun kami memiliki latar belakang keamanan yang sangat kuat, kami melakukan tinjauan kode secara menyeluruh dan bekerja dengan peneliti keamanan berpengalaman dari komunitas HackerOne, namun kerentanan ini tetap lolos.
Saya pikir salah satu alasan hal itu terjadi adalah karena kode yang rentan sebenarnya ditambahkan ke kasus tepi debug dan bukan bagian dari fungsi inti SDK. Jadi, jika ada pelajaran di sini, perlakukan setiap bagian kode dalam produk Anda dengan cara yang sama, apakah itu bagian dari logika bisnis yang sebenarnya atau apa pun.
rekap
Masalah keamanan tidak dapat dihindari di dunia perangkat lunak. Suka atau tidak suka, suatu saat plugin atau tema Anda akan mengalami masalah keamanan. Masalahnya bisa dalam kode Anda, perpustakaan/kerangka yang Anda gunakan, metode inti WordPress yang memberikan hasil yang tidak terduga, dan banyak lagi skenario.
Ketika itu terjadi (saya harap tidak), jangan stres (kami pasti melakukannya) dan bertindak impulsif — itu hanya akan membuat lebih banyak kerusakan. Buat konsep rencana pemulihan metodologis, beri tahu pihak yang terpengaruh, dan hadir untuk membantu pengguna Anda mengamankan situs mereka. Semua orang tahu bahwa masalah keamanan terjadi, yang lebih penting adalah bagaimana Anda menghadapi situasi tersebut.
Dengan itu, atas nama seluruh tim Freemius, kami benar-benar minta maaf atas ketidaknyamanan ini dan akan berada di sini sepanjang akhir pekan untuk menawarkan dukungan, saran, atau bantuan lain yang terkait dengan masalah ini. Dan untuk pengguna baru kami, saya tahu betapa pentingnya kesan pertama, dan ini jelas bukan kesan yang baik. Saya harap Anda akan memberi Freemius kesempatan lagi, dan seiring waktu, lihat fitur luar biasa yang kami tawarkan untuk plugin dan tema WordPress Anda.