Transcript
00:00:00WordPress baru-baru ini mengalami serangkaian kerentanan, dengan yang terbaru sangat parah
00:00:04hingga peretas bisa mengambil alih panel admin secara penuh. Mulai dari SQL injection, menjalankan
00:00:09perintah shell, sangat buruk. Dan mungkin Anda tidak peduli dengan WordPress, tapi platform ini masih menopang lebih dari 44%
00:00:14situs web di dunia. Banyak situs web yang sering Anda gunakan dan tempat Anda memberikan data
00:00:19kemungkinan besar menjalankan WordPress versi rentan ini. Pada dasarnya cara kerjanya seperti
00:00:25ini: Saya telah memasang WordPress versi standar secara lokal, dan saya bisa menjalankan
00:00:29skrip pertama ini untuk memeriksa apakah kerentanannya ada. Dan bisa dilihat kita mendapatkan respons
00:00:34HTTP 207, yang berarti situs ini memang rentan. Artinya kita sekarang bisa menjalankan pemeriksaan kedua,
00:00:41yaitu masuk ke shell interaktif. Ini melakukan SQL injection ke situs, membuat pengguna admin baru,
00:00:47lalu mengunggah plugin berbahaya yang membuat saya bisa berinteraksi dengan berkas apa pun di situs web ini.
00:00:52Mari kita dalami masalah ini dan melihat persis bagaimana cara kerjanya.
00:00:58Repo yang sedang saya lihat ini menunjukkan persis cara melakukan SQL injection pada situs WordPress yang rentan, yaitu
00:01:06situs mana pun antara versi 6.90 dan 6.94, atau 7.00 dan 7.01. Seluruh serangan dimulai dengan memanggil
00:01:14endpoint unauthenticated batch v1, yang memungkinkan Anda mengelompokkan permintaan lain yang sudah divalidasi dan diperiksa perizinannya.
00:01:20Handler batch memiliki dua array paralel yang seharusnya tetap sinkron: validation dan matches.
00:01:26Namun sebuah bug membuat fungsi wp pass URL files gagal akibat jalur yang tidak valid, sehingga hanya validation yang diperbarui.
00:01:33Sehingga indeks yang sama saat memeriksa kedua array memberikan hasil yang tidak cocok. PoC memanfaatkan hal ini:
00:01:41ia mengirimkan batch yang hanya berisi satu permintaan, yaitu POST ke endpoint v2 post, yang juga membawa body permintaan.
00:01:48Karena permintaan induk divalidasi dengan benar sebagai permintaan POST, permintaan apa pun di dalam body akhirnya melewati allowlist metode,
00:01:56memungkinkan Anda mengirim permintaan GET. Lalu di dalam batch internal itu ada permintaan GET ke postingan yang tidak ada, yang memicu
00:02:02desinkronisasi tadi dan menyebabkan WordPress mengirimkan permintaan yang sama di bawah fungsi get items, di mana bidang author
00:02:10exclude dipetakan ke author not in, yang diinterpolasi oleh build yang rentan ke dalam SQL sebagai string. Pada dasarnya, karena semua ini berjalan,
00:02:18SQL tidak di-escape. PoC menggunakan serangkaian permintaan yang akhirnya memungkinkan permintaan POST ke v2 users untuk membuat
00:02:25akun admin baru. Repo ini menjelaskan semua langkah secara mendetail. Lima langkah pertama bersifat pre-auth dengan memanfaatkan bug, tapi langkah keenam hanyalah perilaku normal WordPress untuk
00:02:35pengguna terautentikasi, yaitu mengunggah paket berbahaya. Seperti yang disebutkan sebelumnya, ini hanyalah versi standar WordPress, kerentanannya tidak diakses melalui plugin berbahaya.
00:02:46Anda cukup memasang WordPress standar. Kita jalankan skrip pemeriksaan ini dulu untuk memvalidasi apakah
00:02:52kerentanannya bisa dieksekusi. Lalu kita bisa menjalankan perintah read ini misalnya, yang memberi tahu kita hal-hal seperti
00:02:57pengguna dan nama basis data. Kita sekarang juga bisa menjalankan SQL ke situs web, jadi kita bisa mengetahui hal-hal seperti
00:03:03versi basis data yang sedang berjalan. Dan semua itu sebenarnya belum bagian terburuknya. Ini bagian yang sangat parah:
00:03:07kita membuat akun admin yang memiliki akses untuk mengunggah plugin berbahaya. Dalam kasus ini,
00:03:15plugin-nya bernama web shell. Ini memungkinkan kita mengakses shell situs web, artinya kita bisa mengakses
00:03:22berkas apa pun di situs web ini. Dan serangan ini terjadi dengan cara yang dijelaskan sebelumnya di video. Jadi
00:03:27setelah admin dibuat, plugin diunggah, lalu akhirnya pengguna tersebut dihapus. Jadi keberadaan
00:03:34plugin dan apa yang terjadi menjadi lebih terselubung. Untuk menunjukkan seberapa buruk ini, saya buat skrip terpisah
00:03:38yang akan membuat admin lalu mempertahankannya di sistem.
00:03:40Di sini saya punya nama pengguna dan kata sandi. Kembali ke situs web, jika saya membuka rute wp login, saya bisa memasukkan
00:03:47nama pengguna dan kata sandi itu, klik masuk, dan sekarang saya punya akses penuh ke panel admin. Jika semua ini membingungkan, jangan khawatir,
00:03:54saya juga butuh waktu lama untuk memahaminya. KLAIM yang beredar menyatakan bahwa rantai eksploitasi yang dihasilkan sangat
00:04:00rumit sehingga peneliti keamanan manusia butuh waktu berminggu-minggu, atau bahkan berbulan-bulan, untuk menemukan dan
00:04:05merangkainya sendiri. Tidak ada peneliti keamanan yang bisa menemukan dan menyelesaikan rantai eksploitasi ini
00:04:10dalam 10 jam tanpa AI. Dan ini cukup menakutkan karena pihak jahat bisa saja memiliki bot yang memindai
00:04:17repo, memeriksa URL, hanya menunggu kerentanan muncul dan mengeksploitasinya dalam waktu singkat menggunakan AI.
00:04:23Seorang pengguna di Reddit mengatakan situs mereka diretas hanya dua hari setelah kerentanan ditemukan.
00:04:27Dan karena mereka hanya melakukan pembaruan di akhir pekan, penyerang sempat membuat admin baru dan masuk bagi mereka yang
00:04:33rentan. Eksploit ini sudah diperbaiki di versi 7.0.2, jadi Anda bisa memperbaruinya ke versi itu. Tapi ini kasus yang sangat gila.
00:04:40Anda bisa menemukan repo dan artikel di kolom komentar yang saya gunakan untuk menjalankan PoC ini. Dan jangan lupa
00:04:46berlangganan Better Stack untuk tetap mendapatkan kabar berita teknologi terbaru. Semoga kalian menyukainya, dan
00:04:50seperti biasa, sampai jumpa di video berikutnya.