Saturday, January 25, 2020

By.U SOP Bypass | Cors Misconfiguration

Hasil gambar untuk by.u

Halo guys Rafli disini. Saya lagi semangat update nih hehehe. Kali ini saya mau sharing penemuan lagi nih dimana saya nemu CORS Misconfiguration di BY.U . Bagi yang belom tau By.u adalah provider kartu SIM yang tergolong baru dan milenial banget. byu ini anakan dari telkomsel guys silahkan kalo minat beli aja.

Ok Pertama tama kenapa saya langsung tulis write up ? karena cors misc ini adanya di API aplikasi android by.u maka dari itu kita tidak bisa melakukan real-world execution... karena cookie / barear headernya ada di aplikasi byu bukan di browser...

Jadi di api byu terdapat header :

Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: authorization,Authorization,Content-Type,order_id,msisdn,Request-Origin

Kita bisa lihat mereka menambahkan header Allow-Origin: * yang artinya semua web bisa melakukan request ke api byu.. tapi gaes untuk melakukan csrf attack via cors misconfiguration ini dibutuhkan header Allow-Credentials: true. di byu ini gak ada headernya .. jadi kalo kita lakukan request menggunakan ajax xhr akan mendapatkan respon :
Access to XMLHttpRequest at 'http://api.byu.id/api/profile/1' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

xhr/ajax tidak bisa mengirim request ke by.u karena hal tersebut. tapi taukah kalian ada cara lain nya loh. Kita bisa membypass SOP ini dengan Browser Cache. Hal ini pernah di coba oleh Hacker yang mengirim laporan ke hackerone :
SOP Bypass using Browser Cache

Nah sudah pada baca kan  ? Nah di byu ini kita bisa dapetin email dan nama serta gambar akun tersebut, caranya kita tinggal buat javascript yang melakukan request menggunakan fetch() ke api byu. server akan meloloskan request tersebut karena kita bisa pake credentials dari web tersebut menggunakan cache.

Code :

<html>
<script>
fetch('https://api.byu.id/api/profile/1')
  .then(response => response.json())
  .then(commits => alert("Email mu adalah : " + commits.data.email + "\r\nNama : " + commits.data.name));
</script>
</html>

Jika kalian mau test kalian buka by.u lalu ambil header authorization milik kalian ( sniff request nya ) lalu copy dan paste di modify header. Setelah itu kalian bisa buka html yang berisikan code tersebut dan jeng jeng Kalian bisa dapat deh...

Oke sekian itu aja dari saya untuk kali ini semoga kalian suka. dan untuk CS byu soory ya gaes udh adu argumen ketikan. thx yu.
Load disqus comments

0 comments