phyxkal

Phyxkal

Just simple teen who like technology, but also love Itzy think Twice with Blackpink background and drinking Red Velvet

Open Redirect - Web Security Series

Open Redirect - Web Security Series

Phyxkal

6-Minute Read

301 moved permanently

Pendahuluan

Selamat datang di Web Security Series. Disini akan dibahas semua hal tentang web security mulai dari open redirect, XSS, hingga ke SSTI.

Di seri ini tidak akan membahas terlalu basic, namun sebisa mungkin bahasa pada tulisan ini akan dipermudah untuk pembaca yang sudah tau sedikit tentang web technology. Jika belum, dianjurkan untuk sedikit mencari bacaan tentang dasar web technology atau pembaca bisa membuka dokumentasi dari mozilla sebagai referensi jika ada beberapa istilah yang membingungkan.

Dalam Web Security Series ini penulis dengan senang hati menerima masukan melalui email atau contact yang tertera. Sekian semoga bermanfaat.

Introduction

Apa itu open redirect?. Open Redirect atau Unvalidated Redirects adalah kelemahan website yang muncul ketika web application menerima input-an (pada parameter tertentu) oleh hacker yang tidak dipercaya dan tidak divalidasi oleh server yang dapat menyebabkan web application mengalihkan/mengarahkan permintaan ke URL atau situs web yang tidak diinginkan.

Contoh simpel open redirect adalah seperti https://example.com/login?next=https://attacker.com atau biasanya terdapat pada fungsi situs google seperti berikut https://www.google.com/search?btnI&q=https://www.gmail.com.

Cara kerja Open Redirects

Disclaimer: pembahasan di section/bagian ini sedikit teknis jika tidak terbiasa membaca bacaan teknis atau kurang paham dengan penjelasan teknis tulisan di bagian ini, anda bisa langsung lihat video yang tertera.

Banyak website biasanya sengaja mengarahkan pengguna ke situs lain dengan menempatkan URL-tujuannya di parameter URL asli seperti contoh yang telah diberikan di atas. Web application menggunakan Parameter ini untuk memberi tau browser bahwa si browser harus mengirim sebuah GET request ke URL-tujuannya. Kita ambil contoh seperti dibawah ini.


https://www.google.com/search?btnI&q=https://www.gmail.com


GET HTTP request

Di sini ketika kita mengunjungi link diatas, server atau pada kasus ini google menerima GET HTTP request dan menggunakan nilai dari parameter q pada URL untuk menetapkan kemana browser harus redirect atau diarahkan. Setelah itu, google akan mengirimkan balik sebuah HTTP response dengan status code seperti biasanya 302, tetapi di beberapa kasus bisa saja 301, 303, 307, atau 308. Status code itu berfungsi untuk menginstruksikan agar browser mengarahkan/redirect user dan memberi tau ke browser bahwa page has been found.

GET HTTP response

Ketika browser menerima response status code tersebut secara otomatis browser akan membuat GET request ke https://www.gmail.com (atau pada kasus pada gambar diatas Location-nya menunjukan ke https://www.google.com/gmail/ terlebih dahulu baru di-redirect lagi ke https://www.gmail.com), yang mana sesuai dengan nilai dari paramater q dan Location pada header HTTP response-nya.

Fungsi Location pada header HTTP response itu berfunsi untuk menentukan harus diarahkan/redirect kemana, atau bisa dibaca dokumentasinya di MDN web docs. Dan akhirnya browser mengakses URL https://www.gmail.com.

Pengaplikasian Open Redirect vulnerabilities

Kelemahan web seperti ini bisa dimanfaatkan untuk phising atau istilah kerennnya adalah Social Engineering dengan cara jika sang hacker mengirim URL ini (https://example.com/login?next=https://attacker.com) ke korban, dan menginputkan parameter next dengan URL milik situs hacker (https://attacker.com) yang memiliki tampilan halaman login yang sama dengan URL utamanya yang tadi dikirim (https://example.com/login). Sehingga si user tidak menyadari bahwa halaman login tersebut padahal bukan halaman login dari example.com, sehingga ketika si korban memasukan username dan passwordnya atau informasi lainnya itu akan dikirim ke https://attacker.com.

Dan lebih advance-nya lagi untuk mengelabui user agar tidak tau isi parameternya, kita bisa melakukan URL encode pada https://attacker.com menjadi seperti ini -> https://example.com/login?next=https%3A%2F%2Fattacker.com atau bisa diperparah agar si korban tidak mengetahui isi parameternya mengarah ke attacker.com adalah sbb -> “https://example.com/login?next=%61%74%74%61%63%6B%65%72%2E%63%6F%6D". Sehingga si korban tidak dapat membaca dan tidak tau apa isi parameternya.

Beberapa hal penting tentang open redirect:

  • Korban bisa dengan mudah diarahkan ke halaman phising
  • Di beberapa kasus open redirect di halaman login atau password reset dapat menyebabkan account takeover
  • Open redirect dapat sangat berbahya ketika di gabungkan dengan bugs lain atau istilahnya chain bugs

Atau skenario lebih parahnya lagi dapat dilihat di video yang telah dilampirkan.


Penjelasan dalam bentuk videonya bisa dilihat dibawah ini:

Open Redirect Vulnerable by Pwn Function



Vulnerability Classification and Severity-nya low-impact

Sejak perilisan tahun 2017 open redirect digolongkan sebagai low-impact vulnerabilities oleh The Open Web Application Security Project (OWASP) atau OWASP 2017

Open redirect digolongkan sebagai low-impact vulnerabilities karena open redirect hanya mengarahkan user ke url tertentu. Dan biasanya open redirect juga merupakan sebuah fitur seperti pada:

dikarenakan fakta tersebut open redirect digolongkan low-impact vulnerabilities dan terkadang tidak bisa disebut sebagai kelemahan suatu website.

How to dicover Open Redirect and Unvalidated Redirects

Ketika kita ingin mencari kelemahan ini, kita bisa mencarinya dari parameter yang memiliki nama seperti url=, redirect=, next=, atau yang lain seperti pada google yaitu p atau beberapa ada yang dengan nama aneh seperti r= atau u=, yang intinya biasa berisi parameternya adalah URL. Selain itu ada dengan HTML <meta> tags yang memberi tau browser untuk refresh web page dan membuat GET request ke URL yang telah didefinisikan di content tagnya. seperti ini:

<meta http-equiv="refresh” content="0; url=https://www.google.com/">

Atau bisa juga menggunakan JavaScript untuk redirect user dengan memodifikasi properti location di window DOM(Document Object Model). Secara singkat fungsi DOM itu sebagai API untuk HTML document pada halaman untuk memudahkan developer dalam memodifikasi structure style, dan content.

window.location = https://phyxkal.com

atau

window.location.href = https://phyxkal.com

atau

window.location.replace(https://phyxkal.com)

Karena properti location itu dapat membuat request harus diarahkan kemana, Browser akan secara otomatis menginterpretasikan JavaScript dan membuat request ke URL yang telah didefinisikan sebelumnya.

letak secara fungsionalisasinya bisa dicari di:

  • login, logout, register, dan password reset
  • Change site language
  • link in emails

Ketika mencari kelemahan open redirect yang terpenting harus selalu monitoring history dari GET request yang dikirim ke website yang sedang ditargetkan.

escalate impact open redirect vulnerability

Walaupun Open Redirect hanya digolongkan sebagai low-impact vulnerability, karena hanya mengarahkan user saja. Namun, kita bisa melakukan escalate/meningkatkan status vulnerability-nya dengan cara menggabungkan bug lain atau seperti yang telah ditulis di atas yaitu chaining a bug.

Salah satu cara untuk meningkatkan/escalate status kelemahan open redirect adalah dengan menggabungkan dengan XSS, ini https://hackerone.com/reports/260744 adalah salah satu report open redirect yang digabungakan dengan XSS sehingga status kelemahannya jadi naik tidak hanya sekedar open redirect. Penjelasan simplenya kita ubah URL yang dituju dengan javascript apapun yang menimbulkan XSS, tapi ingat tidak semua open redirect bisa digabungkan dengan XSS. Cara mengetahui itu dapat digabungkan dengan XSS atau tidak adalah dengan cara melihat hasil response-nya apakah tulisan pada parameternya reflected pada halamannya atau tidak(lihat contoh report yang telah dikasih diatas), jika iya maka kemungkinan itu bisa digabungkan dengan XSS.

Open redirect juga bisa menjadi bahaya dengan digabung SSRF. Dikarenakan si penulis belum dapat menjelaskan lebih simpel dan gamblang mungkin artikel ini Airbnb Chaining Open Redirect into SSRF by Ben and Brett

Cara lainnya adalah open redirect dapat menyebabkan OAuth token disclosure, mungkin penjelasan lebih lanjut tentang OAuth ini dan apa aja kelemahannya di dalamnya akan dibahas di artikel lain, tentang apa itu OAuth bisa di baca di medium berikut https://medium.com/codelabs-unikom/memahami-oauth-2-0-api-security-9376bc3a307b

Preventing Open Redirect

Simpelnya kita bisa menggunakan page notice atau warning kalo si user sedang diarahkan ke url lain selain domain si website terpercaya. Misalnya seperti milik google berikut:

atau milik hackerone, bahkan milik hackerone ini ada parameter tambahan yaitu signature:

atau cara lainnya kita membuat whitelist URL yang sesuai dengan domain atau subdomain yang ditentukan, lalu setiap semua URL yang diinput melalui parameter redirect divalidasikan terlebih dahulu. Fun fact cara ini juga telah dilakukan pada website hackerone.

Resource tentang cheatsheets open redirect

Terkadang kita ada beberapa website yang telah menerapkan pencegahan/preventing dengan regex atau validating input. Sehingga kita berlu untuk mem-bypass-nya, yaitu dengan cara-cara tertentu, dan berikut ini daftar/cheatsheets untuk mem-bypass-nya:

Beberapa disclosed reports

Daftar referensi

Dikarenakan konten jenis ini dibuat dengan research dan membutuhkan waktu sedikit lebih lama.
Maka dari itu, jika merasa konten ini membantu atau bermanfaat, kalian bisa mendukung si Penulis dengan donasi ke:

Recent Posts

Categories

About

Phxykal - also known as miutwo - is a teenager who likes learning new things, especially technology