progrez.cloud

The MSRC paid me $3,000 for identifying a vulnerability with a newline character

13 Juli 2024


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.


NewLine Character


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.


ASCII


  • LF (Line Feed): Representasi desimal: 10, Representasi heksadesimal: 0A



Unicode

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.


  • LF (Line Feed): U+000A



POC


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.


Contoh Kasus


  • Blokir Payload javascript:aļert(1);
Misalnya, sebuah aplikasi web memblokir javascript:aļert(1); dengan memeriksa string javascript:.


  • Payload Alternatif 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.



%0a


Dalam URL encoding:


%0a merepresentasikan karakter newline (LF, Line Feed) yang biasa dikenal dengan



Menambahkan %0a
Ketika Anda menggunakan javascript://%0aaļert(1);, karakter %0a (newline) dapat memisahkan protokol javascript: 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 menyebabkan aļert(1) diperlakukan sebagai kode JavaScript baru pada baris berikutnya, bukan sebagai bagian dari komentar. Ini mengakibatkan aļ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