Hallo teman-teman bug-hunter, kali ini saya ingin berbagi Proof Of Concept dari apa yang telah sedikit saya pelajari yaitu bagaimana saya mendapatkan $3.000 dari microsoft :
Bug yang saya temukan adalah XSS, namun kali ini sedikit menarik. saya berhasil melakukan bypass untuk memicu kerentanan dengan karakter baris baru.
Dalam banyak bahasa pemrograman, karakter newline (LF, Line Feed) yang biasa dikenal dengan
digunakan untuk membuat baris baru. Misalnya, dalam bahasa seperti JavaScript, karakter LF digunakan untuk memisahkan pernyataan atau menulis output teks dalam baris baru.
Unicode mengadopsi banyak karakter dari set karakter lain, termasuk ASCII, untuk memastikan kompatibilitas yang luas. Oleh karena itu, karakter kontrol ini juga termasuk dalam Unicode.
Dalam beberapa kasus seperti Hyperlink, yang dimana kita memasukan url, hal ini berdampak krusial jika tidak di validasi dengan baik.
Pada kasus ini, celah yang saya temukan dibagian Hyperlink untuk mengimput url, namun ketika memasukan payload seperti mengekusi javascript, langsung di blok.
Saat pengujian saya memasukan beberapa payload umum, namun jangan berharap banyak ketika mencoba di platform besar hal ini sangat mustahil.
namun ketika saya memasukan payload berikut
payload tersebut berhasil, namun ketika di-klik payload tersebut tidak memicu untuk xss -_-.
tidak mengapa, yang terpenting adalah kita bisa memasukan payload tersebut. setelah di analisis pada bagian hyperlink hanya mengizinkan jika menambahkan dubble slash ( // ), sebaliknya jika tidak menambahkan // maka dianggap sebagai url yang tidak valid.
javascript:aļert(1);
Misalnya, sebuah aplikasi web memblokirjavascript:aļert(1);
dengan memeriksa stringjavascript:
.
javascript://aļert(1);
Jika Anda mencoba mengelabui filter dengan menggunakan javascript://aļert(1);, filter mungkin tidak mengenalinya sebagai ancaman karena pola yang berbeda. Namun, ini mungkin tidak langsung memicu eksekusi XSS karena cara browser memproses URL.
Dalam JavaScript, Double Slash//
digunakan untuk membuat komentar satu baris. Ketika browser menemukan//
, semua yang ada setelahnya pada baris yang sama diabaikan sebagai komentar. Karena itu,aļert(1)
tidak dieksekusi.
Dalam URL encoding:
%0a merepresentasikan karakter newline (LF, Line Feed) yang biasa dikenal dengan
Menambahkan %0a
Ketika Anda menggunakanjavascript://%0aaļert(1);
, karakter%0a
(newline) dapat memisahkan protokoljavascript:
dari kode yang dieksekusi (aļert(1);
). Browser mungkin mengabaikan bagian setelah//
, tetapi memproses bagian setelah%0a
sebagai kode yang valid.
%0a
adalah encoding untuk karakter newline (baris baru). Ketika browser menguraikan URL ini, karakter newline menyebabkanaļert(1)
diperlakukan sebagai kode JavaScript baru pada baris berikutnya, bukan sebagai bagian dari komentar. Ini mengakibatkanaļert(1)
dieksekusi sebagai JavaScript valid.
Tanpa Karakter %0a
Diinterpretasikan oleh browser sebagai:
Dengan Karakter %0a
Diinterpretasikan oleh browser sebagai:
Ditahap ini kita berhasil memicu XSS, namun karena ini bisa mengeksekusi javascript, saya berpikir untuk membuat payload yang dimana ketika seseorang mengklik payload yang samarkan maka akunnya bisa di takeover.
Dari temuan ini MSRC memberi saya bounty $3.000