XSS via Google Maps

XSS via Google Maps - Singkat saja, saya menemukan endpoint Javascript di Google Maps yang bisa kita ubah isinya. Saya sendiri lupa darimana asalnya URL ini.

Perhatikan parameter ?callback=.

https://maps.googleapis.com/maps/vt?pb=!1m4!1m3!1i18!2i41913!3i101344!1m4!1m3!1i18!2i41913!3i101345!1m4!1m3!1i18!2i41913!3i101346!1m4!1m3!1i18!2i41913!3i101347!1m4!1m3!1i18!2i41914!3i101344!1m4!1m3!1i18!2i41914!3i101345!1m4!1m3!1i18!2i41915!3i101344!1m4!1m3!1i18!2i41915!3i101345!1m4!1m3!1i18!2i41914!3i101346!1m4!1m3!1i18!2i41914!3i101347!1m4!1m3!1i18!2i41915!3i101346!1m4!1m3!1i18!2i41915!3i101347!1m4!1m3!1i18!2i41916!3i101344!1m4!1m3!1i18!2i41916!3i101345!1m4!1m3!1i18!2i41917!3i101344!1m4!1m3!1i18!2i41917!3i101345!1m4!1m3!1i18!2i41916!3i101346!1m4!1m3!1i18!2i41916!3i101347!1m4!1m3!1i18!2i41917!3i101346!1m4!1m3!1i18!2i41917!3i101347!1m4!1m3!1i18!2i41918!3i101344!1m4!1m3!1i18!2i41918!3i101345!1m4!1m3!1i18!2i41919!3i101344!1m4!1m3!1i18!2i41919!3i101345!1m4!1m3!1i18!2i41918!3i101346!2m3!1e0!2sm!3i713465927!3m12!2sen!3sUS!5e18!12m4!1e68!2m2!1sset!2sRoadmapSatellite!12m3!1e37!2m1!1ssmartmaps!4e3!12m1!5b1&callback=payload

Saya juga sempat melaporkan ini via Google Bug Hunters, namun laporan saya dinyatakan duplicate. Saya mencoba bertanya apa yang terjadi dengan report awal. Dan berdasarkan informasi dari Google, laporan awal terkait ini juga ditutup dengan status Won’t Fix. Karena isunya bukan berada di Google Maps, melainkan di aplikasi yang menggunakan URL Google Maps yang sudah disusupi payload tersebut.

Google Bug Hunters

XSS via Google Maps

Karena laporan saya ditutup dengan status duplikat, saya mencoba menggunakan URL yang saya temukan ini di beberapa situs. Terutama target yang sudah mengimplementasikan Content-Security-Policy namun mengizinkan sumber maps.googleapis.com atau *.googleapis.com.

Dengan menggunakan URL tersebut, kita bisa melakukan bypass CSP dengan menggunakan payload yang kita sisipkan di endpoint Google Maps tadi.

Dengan catatan, domain maps.googleapis.com di-allow di header CSP yang digunakan target.

Saya membuat demo sederhana dari kegiatan yang saya lakukan di situs lain. Saya set CSP hanya boleh ke google.com dan maps.googleapis.com.

CSP Setting

Sehingga jika kita sudah berhasil mendapatkan XSS dan kita ingin menggunakan payload yang memanggil script dari external source, request-nya akan ditolak.

XSS Source XSS Blocked by CSP

Dan ketika kita menggunakan URL dari Google Maps tadi, saya mengubah value dari paramter callback menjadi payload sederhana: alert(document.domain);//. // di akhir saya tambahkan agar script lain dari endpoint tersebut tidak dieksekusi.

XSS

Penutup

Dengan adanya URL Google Maps tersebut, kita punya satu lagi metode untuk melakukan bypass CSP dalam konteks XSS, hehe.