Menurut Threatpost, sebanyak 1,5 juta situs WordPress telah di-hack akibat kerentanan injeksi konten. WordPress merupakan satu dari sekian banyak content management system (CMS) yang paling banyak digunakan di dunia.
Jadi ketika terjadi masalah keamanan pada sistemnya, akan berpengaruh pada jutaan pengguna internet. Pelajari informasi kami tentang error pada WordPress serta solusinya.
Satu masalah keamanan ini telah ditemukan oleh peneliti keamanan di Sucuri, sebuah perusahaan keamanan internet, yang mengetahui website WordPress rentan terhadap injeksi konten. Berikut ini kami berikan detailnya karena para pengguna WordPress sangat perlu mengupdate situs mereka. Baca artikel kami tentang cara mengamankan situs WordPress.
Risiko Content Injection Vulnerability
Sucuri menemukan sebuah Conten Injection vulnerability atau kerentanan injeksi konten yang mempengaruhi REST API dan mengakibatkan hacker dapat memodifikasi konten dari postingan atau halaman mana saja dalam situs WordPress.
Tapi berita baiknya, Sucuri telah melaporkan hal ini ke tim keamanan WordPress yang mengatasi masalah ini dengan profesional dan mengiformasikannya ke banyak penyedia keamanan dan host serta mengimplementasikan sebuah patch sebelum kerentanan ini memberi dampak lebih jauh ke banyak pengguna WordPress.
Karena WordPress sangat populer dan mudah digunakan, masalah keamanan sekecil apapun pada sistemnya bisa mengakibatkan kerusakan besar dan mempengaruhi jutaan penggunanya.
Baca juga: Kenali 5 Serangan Hacker pada Website
Peneliti keamanan dari Sucuri, Marc-Alexandre Montpas, menuliskan dalam postingan blognya kalau ini merupakan kerentanan yang bersifat serius yang bisa disalah-gunakan. Ada beberapa hal detail yang sengaja disembunyikan untuk mempersulit hacker.
Tapi plugin yang diinstal pada situs, bisa memicu perintah eksekusi jarak jauh/RCE (remote command execution). Selain itu, meski konten telah melewati wp_kses, tetap ada celah untuk menginjeksi Javascript dan HTML.
Tim keamanan WordPress telah mengatasi masalah ini dalam waktu yang relatif singkat, meski saat itu masih dibutuhkan uji coba. Anggota tim berkoordinasi dengan berbagai perusahaan, termasuk Sucuri, yang menyebarkan firewall aplikasi website untuk memblokir jenis eksploitasi ini ke konsumen mereka.
WordPress menyatakan juga berkoordinasi dengan Incapsula, Cloudflare, dan SiteLock untuk memastikan pelanggan mereka mengantisipasi masalah ini.
Ketika dilakukan pengujian perbaikan, fokus beralih ke host WordPress. WordPress menghubungi mereka dan menyampaikan informasi tentang kerentanan ini serta cara melindungi para pengguna. Pihak host bekerjasama dengan tim keamanan untuk mengimplementasikan proteksi dan secara reguler mencari percobaan eksploitasi terhadap pengguna mereka.
WordPress sendiri sempat menunda pengungkapan kerentanan ini untuk memastikan penggunanya, yang telah memiliki update otomatis di situs mereka, terlindungi sebelum publikasi beserta detailnya.
Baca juga: 5 Cara Penting Melindungi Website dari Serangan Hacker
Cara Melindungi Situs dari Kerentanan Injeksi Konten
Semua administrator direkomendasikan untuk mengupdate versi situs WordPress terbaru sesegera mungkin. Versi WordPress terbaru ini mencakup perbaikan dari kerentanan ini. Sebagai pencegahan, Anda dianjurkan menggunakan update otomatis pada situs WordPress Anda untuk memastikannya selalu ada di versi terbaru dan bisa diamankan dari ancaman serupa.
Detail Teknis
Kita mulai dengan ./wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
Ada beberapa hal yang perlu diperhatikan di sini. Route yang terdaftar dibuat untuk menggunakan parameter ID request dengan digit. Misalnya, bila Anda mengirim permintaan ke /wp-json/wp/v2/posts/1234, parameter ID-nya akan diatur menjadi 1234.
Ini bisa jadi satu cara yang tepat untuk mencegah serangan dari ID jahat, tapi ketika melihat bagaimana REST API mendapat akses, kita dengan cepat mengetahui kalau prioritas utamanya adalah nilai $_GET dan $_POST dengan route reguler. Ini memungkinkan hacker mengirim permintaan seperti /wp-json/wp/v2/posts/1234?id=12345helloworld yang akan menugaskan 12345helloworld untuk parameter ID yang sekarang mengandung lebih dari sekedar digit.
Anda perlu memperhatikan berbagai hal yang salah-satunya menjadi perhatian kita, yakni update_item dan metode izin pemeriksaan update_item_permissions_check.
Singkatnya, nilai ID alphanumerik langsung terkirim ke fungsi get_post(). Fungsi ini memvalidasi permintaan dengan memeriksa apakah postingan benar-benar ada dan apakah pengguna memiliki izin untuk mengedit postingan ini.
Bila kita mengirim ID yang tidak memiliki postingan yang sesuai, kita hanya bisa melewati izin check dan dibolehkan melanjutkan eksekusi request untuk metode update_item.
Tentang apa yang menyebabkan get_post() gagal menemukan sebuah postingan selain dari ID yang tidak eksis, ternyata bisa menggunakan metode statik get_instance() pada wp_posts untuk mencapai postingan.
Pada kode yang muncul, akan gagal pada input apapun yang tidak dibuat dari karakter numerik, jadi 123ABC akan gagal.
Untuk hacker, ini berarti WordPress (pengguna yang memiliki kontrol untuk mengedit postingan) akan menjalankan metode update_item. WordPress memberikan parameter ID pada sebuah bilangan bulat sebelum melepasnya ke get_post. Ini jadi masalah karena cara PHP melakukan perbandingan dan konversi. Kode yang dimasukkan akan kembali ke 123.
Ini memicu situasi yang sangat berbahaya dimana peretas bisa mengirim request seperti wp-json/wp/v2/posts/123?id=456ABC untuk mengubah postingan yang ID-nya 456.
Karenanya, hacker bisa mengganti konten postingan atau halaman mana saja pada situs korban. Dari sana, mereka bisa menambahkan plugin untuk mengeksploitasi kerentanan, menginfeksi konten situs dengan kampanye SEO spam, atau memasukkan iklan, dan sebagainya. Bergantung plugin yang digunakan pada situs, bahkan kode PHP bisa dieksekusi dengan sangat mudah.
Jadi, bila Anda belum menggunakan update otomatis pada website, segera lakukan update. Kerentanan injeksi konten merupakan masalah serius yang bisa disalah-gunakan untuk menyerang situs WordPress yang rentan.