CRM & Chatbot Pentesting: Hijack Customer Service Agent Session

Apa yang penulis tulis disini adalah untuk edukasi dan sharing pengalaman semata, hal-hal yang tidak diinginkan yang terjadi akibat membaca artikel ini adalah diluar tanggung jawab penulis.

Pembukaan

Pada artikel kali ini saya ingin sedikit sharing salah satu metode pentest terhadap chatbot yang pernah saya lakukan, dan bahkan menurut saya ini adalah sesuatu yang critical dimana attacker dapat mencuri session dari seorang agent customer service hanya dengan mengirimkan chat kepada mereka, dan merupakan behavior para CS yaitu membuka chat komplain-an para pelanggan/customernya. Juga sudah maklum bahwa diantara kebanyakan perusahaan menggunakan aplikasi CRM untuk memanage kinerja CS ini, pertanyaannya adalah sudah amankah aplikasi CRM yang mereka gunakan? bagaimana jika ternyata customer mengirimkan sebuah payload jahat pada chat lalu sang CS membukanya?

Blind XSS

Menurut situs GeeksforGeeks:

Blind XSS is quite similar to stored Cross-Site Scripting attack where the input provided by the attacker is saved or stored by the web server and this stored input is reflected in various other applications which are linked with each other. It only triggers when the attacker’s input is stored by the web server in a database and executed as a malicious script in another part of the application or another application.

Singkatnya, Blind XSS sangat mirip dengan serangan Stored XSS, payload yang dikirimkan attacker akan disimpan dan dieksekusi oleh server, perbedaannya Blind XSS tidak langsung menampilkan hasil serangan ke halaman Front End sehingga kita perlu membuat server callback untuk mengetahui apakah payload kita tereksekusi oleh server atau tidak. Penjelasan lengkapnya mungkin bisa teman-teman dapati pada artikel-artikel yang khusus membahas Blind XSS.

Blind-Xss

Chatbot Flow

Pada umumnya flow chatbot memiliki 2 state, yaitu state chatbot dan state agent. State chatbot yaitu ketika customer melakukan Hi Message kepada chatbot, maka chatbot akan merespon dengan pesan otomatis dan beberapa pilihan menu informasi. Sementara state agent adalah ketika customer belum mendapati informasi yang diinginkan, maka customer akan memilih menu "Berbicara dengan agent" atau yang semacamnya (jika menu itu tersedia), pada saat inilah agent akan ditugaskan untuk menghandle kebutuhan customer tersebut, sehingga akan terjadi interaksi antara agent dan customer, inilah titik dimana sang attacker dapat berpura-pura menjadi customer dan mengirimkan attack payload kepada agent.

Step to Reproduce

Disini saya menggunakan XSS Hunter untuk server callbacknya. Ketika saya sudah berada di state agent, saya mencoba untuk mengirimkan payload Blind XSS kepada target.

image

Setelah menunggu beberapa saat, saya mendapati email dari XSS Hunter, dan ternyata payload yang saya kirim berhasil dieksekusi oleh server dan mengirimkan beberapa informasi yang sangat penting, diantaranya adalah cookies sang agent yang menghandle chat saya.

image

Disini saya mengetahui bahwa agent customer service tersebut membuka chat saya pada aplikasi CRM, taunya darimana? ya dari URL di Execution Origin pada result attack diatas, sehingga saya asumsikan kalau aplikasi CRM tersebut belum memiliki WAF untuk handling serangan Blind XSS.

Bug ini telah dilaporkan ke pihak terkait, dan statusnya sudah di resolved/fixed.

Reference