xhellc0de
xhellc0de /Hidup seperti Squidward/

AWS Metadata Disclosure via "Hardcoded Host" Download Function

AWS Metadata Disclosure via "Hardcoded Host" Download Function

Ketika kita mengunjungi website, baik website berupa aplikasi maupun company profile, ada kalanya kita menemukan sebuah tautan untuk men-download file dari website tersebut. File yang di-download dapat berupa guide, atau dokumen lainnya.

Saat melakukan hunting pada private program di bugcrowd, penulis menemukan link untuk me-download file PDF dengan format seperti berikut:

https://redacted.com/download?file=/2019/08/file.pdf

Ketika mengakses tautan tersebut, makan browser akan men-download file file.pdf. Yang pertama ada dalam pikiran ketika menemukan URL semacam itu, tentu kita akan bertanya-tanya apakah ada bug “Local File Download” pada link tersebut.

Maka untuk melakukan pengetesan, penulis mencoba merubah URL menjadi seperti berikut:

https://redacted.com/download?file=index.php

Namun tidak terjadi apapun :(

Ada beberapa kemungkinan yang terpikirkan oleh saya ketika menemukan file index.php tidak dapat di download. Pertama, fitur download tersebut sudah diproteksi sehingga kita tidak dapat men-download file yang tidak diizinkan, atau kedua, fitur download diarahkan ke host lain mungkin sebagai CDN atau semacamnya sehingga file index.php tersebut memang tidak ada.

Untuk kemungkinan yang kedua, kurang lebih seperti ini implementasi kode yang digunakan:

$host = 'https://cdn.redacted.com';
$file = $_GET['file'];

$download_url = $host .'/'. $file;

Pada kode diatas, terlihat bahwa host dari file yang akan di-download telah di hardcode pada kodingan, sehingga yang dapat kita manipulasi hanyalah parameter file saja.

URL Redirection

Untuk mengetahui apakah asumsi kita terhadap format URL tersebut benar, maka cara paling mudah adalah dengan mencoba melakukan redirect ke domain lain dengan menambahkan simbol @ pada akhir dari nilai parameter file dan diikuti dengan domain yang kita jadikan tujuan.

Contoh:

https://redacted.com/download?file=/2019/08/[email protected]

Dan boom! Benar saja source code dari www.google.com ter-download.

AWS Metadata Disclosure via "Hardcoded Host" Download Function

Artinya, melalui kerentanan ini kita hanya dapat men-download data yang berada di luar server tersebut, tidak dapat mengakses file yang terdapat pada server target. Lalu data apa yang mungkin dapat kita peroleh?

AWS Metadata

Mengetahui bahwa server tersebut berada pada Amazon AWS, maka saya mencoba untuk meng-ekstrak AWS Metadata melalui kerentanan tersebut. AWS Metadata terdapat pada URL:

http://169.254.169.254/latest/meta-data/

Maka URL pun dimodifikasi menjadi seperti berikut:

https://redacted.com/download?file=/2019/08/[email protected]/latest/meta-data/

Namun lagi-lagi tidak terjadi apa-apa :(

Setelah beberapa waktu, saya menyadari bahwa kemungkinan host yang di hardcode menggunakan protocol HTTPS, sehingga ketika kita mencoba untuk melakukan redirect ke URL Metadata yang berada menggunakan protocol HTTP, maka proses redirect tidak bekerja.

Untuk itu, saya menggunakan sedikit trik, yaitu dengan menggunakan domain yang menggunakan HTTP lalu di-redirect lagi ke URL Metadata tersebut.

Server Target ---> HTTPS domain ---> URL Metadata

Untuk itu, saya membuat file PHP sederhana untuk melakukan redirect ke Metadata:

<?php

header('location: http://169.254.169.254/latest/meta-data/');

Lalu file tersebut diupload pada domain yang menggunakan HTTPS. Maka final URL nya menjadi seperti berikut:

https://redacted.com/download?file=/2019/08/[email protected]/redirect.php

Dan Metadata pun berhasil di download!

AWS Metadata Disclosure via "Hardcoded Host" Download Function

Dan temuan ini mendapat severity P1 di Bugcrowd ^^

comments powered by Disqus