Berkaitan dengan write up saya pada mesin VulnHub Source: 1, saya akan mencoba melakukan analisa tentang CVE dan exploit yang ada. Sebelumnya, CVE ini muncul karena Supply Chain Attack (Baca: Supply Chain Attack: Pelajaran untuk Software Engineer) yang berdampak pada versi 1.890 dan 1.900 - 1.920. Release yang terdampak juga hanya yang dipublish di SourceForge, saya cek di GitHub repository isinya normal.
Sekarang saya coba untuk membahas setiap langkah pada exploit tersebut, file yang dibahas di sini adalah password_change.cgi yang digunakan sebagai entry point.
1. Check Password Change Privilege
Pada versi 1.900 - 1.920, terdapat pengecekan apakah ada restriksi untuk penggantian password, yang confignya terdapat pada passwd_mode di file /etc/webmin/minserv.conf. Jika value pada config tersebut diset menjadi 2, exploit tidak akan bekerja pada versi ini.
Selain itu, yang perlu diperhatikan adalah header yang digunakan. Karena terdapat validasi header Referer pada file web-lib-funcs.pl, sehingga pada saat request perlu menggunakan header 'Referer' => "#{peer}" dengan nilai host yang sama dengan host service, tidak perlu juga harus persis dari alamat #{peer}/session_login.cgi. Jika tidak, akan ada error yang seperti ini:
2. Exploiting
Di sini exploit memanfaatkan fungsi qx pada Perl yang digunakan untuk mengeksekusi system command. Terdapat perbedaan antara versi 1.890 dan 1.900 - 1.920. Pada versi 1.890, fungsi qx akan menjalankan command pada parameter expired. Jadi dari request yang disediakan bisa diganti saja paramter old dengan expired seperti ini user=root&pam=&expired=AkkuS%7c#{command}%20&new1=akkuss&new2=akkuss.
Pada versi 1.900 - 1.920 command akan dieksekusi dari parameter old, sehingga seharusnya tidak perlu lagi ada parameter expired pada request.