Pentest: Security Missconfiguration Lead to Account Priveleges Escalation

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

Sudah lama banget saya ga nulis di blog ini, alhamdulillah hari ini bisa sedikit sharing lagi soal beberapa pengalaman yang saya alami beberapa bulan lalu. Pada kesempatan kali ini saya ingin sharing ketika saya melakukan bypass account privileges pada salah satu platform milik salah satu Startup di Indonesia. Bugnya pun sudah saya laporkan ke pihak terkait dan sudah ditanggapi.

Account Priveleges Escalation

Menurut Wikipedia:

Privilege escalation is the act of exploiting a bug, a design flaw, or a configuration oversight in an operating system or software application to gain elevated access to resources that are normally protected from an application or user

Oke intinya adalah bagaimana akun user bisa mendapatkan/mengakses resource yang seharusnya hanya dimiliki oleh Admin. Yup.

Step to Reproduce

Seperti biasa, kegiatan pentest rasanya kurang afdhol kalau tidak melakukan enumeration terhadap target. Disini saya menggunakan Nmap, Dirsearch, dan Sublist3r. Disesi ini saya menemukan subdomain halaman login Administrator mereka. Saya pun mencoba login menggunakan akun yang saya miliki (yang mana akun saya adalah akun user biasa), lalu server merespon dengan kalimat “you're not administrator” yang menandakan sebenarnya akun saya terdaftar namun berbeda role.

Saya mencoba intercept requestnya menggunakan Burp Suite lalu didapati response yang server berikan adalah 401 Unauthorized

image

Dari sini saya mencoba memanipulasi response yang ada menjadi 200 Ok dan pada bodynya saya ubah “message”:”authorized”, “statusCode”:200, “warning”:”success”

image

Ternyata hanya dengan memodifikasi response code saya berhasil login, tapi datanya masih kosong karena bearer authorization header nya masih undefined.

image

Saya pun mulai mencoba mendapati bearer token akun saya, berdasarkan hasil enumeration tadi, saya menemukan directory yang menarik yaitu console untuk GraphQL. Tak pake lama, saya mencoba membaca docs dan schema graphql yang tersedia dan didapati user publik dapat melakukan mutasi login dengan query :

mutation{
 login(param:{email:"myemail@gmail.com",
password:"mypassword"})
}

Lalu graphql merespon dengan token JWT

image

Setelah mendapatkan JWT, saya mencoba kembali ke dashboard, lalu melakukan request dengan bearer JWT akun saya (yang mana akun saya merupakan akun user)

image

Dan akhirnya saya bisa login dan mengakses berbagai resource yang semestinya hanya bisa diakses oleh Administrator.

Remediation

  • Pastikan untuk menerapkan role based authorization dengan benar
  • Pastikan untuk hide/restrict akses pada endpoint/directory yang sensitif

Reference