In the name of Allah, the Most Gracious, the Most Merciful.
Silahkan langsung mengunduh paper sederhana pada tautan berikut untuk dapat melihat tulisan ini lebih nyaman:
PDF Version: Download here.
I. SELINGAN YANG TIDAK TERLALU PENTING
Pada tahun 2014 lalu, saya dan beberapa teman di kantor tertarik dengan suatu permainan online ber-genre RPG yang digabungkan dengan konsep puzzle. Dengan konsepnya yang terbilang cukup unik (setidaknya bagi Kami pada saat itu), maka cukup wajar bila game ini sempat menyentuh top 50 di App Store sampai sekitar tahun 2015.
Mengingat bahwa Kami memang bukan merupakan gamer sejati (mudah tertarik karena melihat penampilannya, lalu bermain sebentar, dan dihapus), jadi hubungan Kami dengan game ini pun tidak terlalu lama. Terlebih lagi, Kami memainkannya dengan jujur sekali pada saat itu.
Di suatu kesempatan pada tahun 2015, Saya pribadi sedang agak bingung dalam memilih aplikasi yang hendak dijadikan target secara legal untuk diuji. Seketika itu, muncul perasaan untuk menghilangkan kebingungan sementara dengan melihat game ber-genre RPG yang ada di App Store. Ketika melihat-lihat sebentar, ternyata “Battle Camp” masih berada di top 50 App Store dengan genre RPG. Pada saat itu pun muncul berbagai pola pikir dalam menguji beberapa flow yang sempat Saya mainkan di tahun sebelumnya.
Singkat cerita, setelah kembali meng-install dam memainkannya, ternyata beberapa pola pikir ini berhasil dieksekusi (dibahas kemudian pada laporan ini). Namun respon dari customer support Battle Camp kurang terlalu menarik pada saat itu saat menerima salah satu laporan Saya. Kembali saya pun meninggalkan permainan ini dengan cepat.
Pada tahun 2017, kembali Saya bernostalgia dengan game ini dan hendak melihat kemungkinan laporan Saya ditindaklanjuti oleh pihak Battle Camp. Ternyata, bug itu belum ditutupi. Dan pada kesempatan kali ini, Saya pun mencoba untuk kembali mengutak-utik dan mempelajari beberapa mode permainan sampai akhirnya saya menemukan beberapa bugs lagi di Battle Camp.
Tak lama berselang, Saya mencoba menghubungi Twitter Account mereka yang berujung pada sambutan yang sangat hangat. Perbincangan dan diskusi Kami berjalan dengan sangat baik pada saat itu sampai akhirnya tim Battle Camp sempat menyampaikan permohonan maaf karena belum dapat bertindak cepat dikarenakan kepadatan mereka. Akan tetapi, beberapa bulan kemudian, komunikasi Kami pun kembali hening hingga tidak ada lagi informasi terbaru yang saya terima sampai saat ini.
Mengingat bahwa model pengujian ini cukup menarik untuk dipelajari karena insyaallah dapat mengembangkan pola pikir kita, maka Saya pun mencoba untuk merilisnya kepada para pembaca melalui tulisan ini. (Ya, saya sudah mencoba menghubungi Battle Camp kembali via Twitter pada tahun 2018 ini dan belum juga memperoleh jawaban). Jadi mungkin hal ini merupakan risk yang dapat diterima oleh rekan-rekan Battle Camp mengingat umur bugs nya sudah sekitar tiga tahun.
II. PENDAHULUAN
Baiklah, selesai dengan basa-basi yang agak panjang dan tidak terlalu berhubungan dengan konten dari tulisan ini. Sebagai informasi kembali, “Battle Camp” merupakan salah satu permainan ber-genre RPG yang bersifat online yang diusung dengan model puzzle. Di dalam penerapannya, para pemain akan dihadapkan pada banyak pilihan monster yang dapat diperoleh dengan berbagai cara untuk kemudian digunakan dalam bertarung melawan boss ataupun player lain.
Sebagaimana sifat game ber-genre RPG pada umumnya yang juga disajikan secara online, Battle Camp juga memiliki interaksi dari aplikasi menuju server dari setiap hal yang ditemui oleh para pemainnya. Sebagai contoh, ketika seorang pemain hendak menyelesaikan quest ataupun melawan boss, maka secara otomatis, aplikasi pun akan mengirimkan request ke server berupa hasil penyelesaian ataupun pertarungan yang telah dilakukan oleh para pemain.
Akan tetapi, permasalahan mulai muncul ketika ternyata Battle Camp belum melakukan validasi pada beberapa request sehingga dapat menyebabkan seorang pemain untuk memanipulasi nilai yang ada demi memperoleh beberapa tujuan spesifik di dalam game.
III. KESIMPULAN PERMASALAHAN
Seperti yang telah dijelaskan sebelumnya, issue yang dibahas pada laporan ini dapat “mengizinkan” pemain untuk dapat memanipulasi beberapa hal demi meraih beberapa tujuan berbeda. Adapun secara garis besarnya, issue ini sendiri terbagi menjadi 4 (empat), yaitu.
3.1. Memungkinkan untuk memanipulasi proses penggabungan Monster;
3.2. Memungkinkan untuk melewati quests / goals tanpa harus mengikut cerita (menyelesaikan seluruh quests / goals kurang dari setengah jam);
3.3. Memaksimalkan nilai serangan pada Boss Raid Event;
3.4. Memungkinkan selalu untuk memperoleh kemenangan pada Daily Boss Battle.
IV. INFORMASI DAN SITUASI UNTUK POC
4.1. 0x01 – Parameter Pollution untuk Manipulasi Gabungan Monster (Fixed)
Sebenarnya, saya tidak memiliki nama yang tepat untuk menamakan bug tipe ini. Akan tetapi, mengingat bahwa eksekusinya dilakukan dengan menambahkan parameter tertentu untuk menghasilkan output yang diinginkan, maka jadilah hal yang terbayangkan oleh saya adalah Parameter Pollution.
4.1.1. 0x01 Ringkas Cerita mengenai Fitur Penggabungan Monster
Akan cukup sukar bila kita memulai pembahasan inti tanpa mengetahui terlebih dahulu mengenai flow dari aplikasi ini. Terlebih bila para pembaca belum pernah mencicipi game ini atau bahkan tidak pernah menyukai game tipe ini.
Sederhananya, game ini menyajikan fitur penggabungan monster (dinamakan “Feed”) yang dapat dimanfaatkan oleh pengguna untuk menaikan level monster miliknya tanpa harus bertarung dengan banyak “monster yang tersedia bebas” di area permainan. Semakin tinggi jenis dan level monster yang digabungkan ke monster utama, maka tentu akan semakin tinggi level yang dapat diperoleh monster utama pengguna.
Di dalam pelaksanaannya, pihak penyedia game pun memberikan satu jenis monster unik (dinamakan “Special”) yang memiliki kemampuan untuk menggandakan kenaikan level ketika jenis monster ini digabungkan (dinamakan “Potent Max”). Jadi, semakin banyak pengguna menggabungkan monster tipe “special” ke monster utama miliknya, maka tentu akan semakin drastis kenaikan level yang dapat diperolehnya.
Dari gambar terlihat bahwa penggabungan yang sebelah kiri akan menjadikan nilai monster utama menjadi level 8 (delapan) sedangkan penggabungan yang sebelah kanan akan menjadikan monster utama menjadi level 11 (sebelas).
Hal yang perlu menjadi catatan di sini adalah, batasan jumlah monster yang diizinkan untuk digabungkan dalam sekali feed yaitu sebanyak 5 (lima monster). Bila level monster utama masih kecil, maka nilai feed untuk satu monster masih bernilai murah (yaitu 5 stone). Akan tetapi, bila level monster utama sudah semakin besar, maka harga stone untuk satu feed akan menjadi semakin besar nilainya.
Baiklah, sekarang masuk ke inti pembahasan. Ketika suatu monster hendak digabungkan (di-feed), maka secara otomatis aplikasi ini akan mengirimkan request ke server seperti berikut:
Seperti yang terlihat, terdapat parameter donors pada request dimaksud. Di dalam permainan Battle Camp, parameter ini menandakan keunikan monster yang digabungkan ke monster utama. Jadi, bila ada 5 (lima) monster yang akan digabungkan ke monster utama, maka akan terdapat 5 (lima) parameter unik di dalamnya. Untuk situasi di atas, hanya terdapat 3 (tiga) parameter yang berarti hanya terdapat 3 (tiga) monster yang hendak digabungkan.
4.1.2. 0x01 PoC untuk Manipulasi Penggabungan Monster
Pertanyaan sederhana yang dapat terlintas mengenai fitur ini yaitu hal apakah yang dapat dilakukan untuk memanipulasi fitur dimaksud?
Bila salah satu jawabannya adalah menebak nilai parameter atau memecahkan proses pembuatan nilai parameter dari monster tentu akan menjadi hal yang sukar untuk dilakukan. Ya, dan saya pun tidak akan membuang banyak waktu untuk mencari tahu mengenai proses pembuatannya (terlebih bila melihat response dari tim Battle Camp dalam menanggapi kiriman laporan mengenai bug yang “dimiliki” olehnya). Jadi singkat cerita, hal ini lebih baik diabaikan.
Akan tetapi, bila jawabannya adalah mencoba menduplikasi nilai parameter monster yang digabungkan, maka hal ini akan cukup baik untuk dicoba. Dalam percobaan pertama mengenai hal ini, Saya pun mencoba menduplikasi satu nilai parameter monster yang digabungkan.
Bila kita perhatikan dengan seksama, pada request ini, saya menduplikasi nilai dari “06pMhJa2L9YpwNDD5jwgBA”. Hasilnya pun cukup mengejutkan, ternyata server menerima request ini dan menjadikannya sebagai suatu request yang valid. Singkat cerita, penggabungan dengan menduplikasi monster akan sangat memungkinkan. Bayangkan bila pengguna menduplikasi “Special” monster yang sebenarnya hanya ada satu dalam inventory nya.
Lalu, apakah perjalanan ini terhenti? Tentu tidak. Langkah selanjutnya yang dapat dilakukan yaitu, mari kita coba duplikasikan suatu monster unik sampai batas maksimal yang diizinkan (sebanyak lima kali).
Lalu, bagaimanakah hasilnya? Ternyata lagi-lagi request ini dianggap valid oleh server. Jadi, usaha untuk menduplikasikan monster berjenis special akan berhasil dengan cara ini.
Kemudian, pemikiran saya pada saat itu menjadi semakin terbuka. Bukankah batasan lima gabungan ini hanya tertuang secara tekstual? Bagaimana kalau ternyata penggabungan ini pada dasarnya dapat dieksekusi sebanyak lebih dari lima kali? Untuk memastikannya, Saya pun mencoba untuk menggabungkannya sebanyak mungkin yang dapat dilakukan sejauh saya tidak malas untuk paste.
Terlihat pada gambar bahwa proses duplikasi melebihi dari batas yang diizinkan pun berhasil. Bila tidak salah hitung, jumlahnya yaitu sebanyak 80 (delapan puluh) duplikasi (yang tentu saja dapat lebih dari ini).
4.1.3. 0x01 Keuntungan Pemanfaatan Bug
Tentunya akan terdapat keuntungan yang sangat besar dalam memanfaatkan bug ini, yaitu seorang pengguna dapat menduplikasi “Special” monster miliknya (walaupun hanya satu pada inventory nya), yang kemudian disertai dengan keuntungan pemakaian nilai stone yang kecil. Berikut ini merupakan alur garis besarnya supaya para pembaca tidak memiliki kebingungan saat menelaah maksud tulisan ini.
- Monster utama memiliki level 1. Dengan level sekecil ini, maka nilai stone yang dibutuhkan untuk menggabungkan satu monster akan bernilai 5 (lima) stone. Akan tetapi, nilai ini akan meningkat bila monster utama terlanjur memiliki level yang besar. Dalam satu situasi, dapat saja nilainya mencapai ratusan stone untuk per monster yang digabungkan.
Jadi, pada situasi ini, dengan menduplikasi sebanyak (misalnya) 80 kali, maka total pemakaian stone nya akan berjumlah 400 stone (80×5). Tentunya jumlah ini lebih menguntungkan ketimbang pengguna menggabungkan dengan cara normal.
- Kemudian keuntungan kedua yaitu, pengguna dapat langsung memaksimalkan monster utama nya dengan cepat. Bayangkan usaha yang diperlukan pemain untuk memperoleh (misalnya) 80 monster “special” dengan cara normal demi memaksimalkan level dari monster utama.
4.1.4. 0x01 Status Bug
Bug ini telah diperbaiki oleh pihak Battle Camp (tidak diketahui mengenai waktunya secara pasti). Namun setidaknya, hal ini yang termasuk paling cepat diperbaiki dibandingkan dengan bug lain yang berumur lebih dari 3 (tiga) tahun.
4.2. 0x02 — Parameter Pollution untuk Melewati Seluruh Stage’s Quests / Goals
4.2.1. 0x02 Ringkas Cerita mengenai Alur Quests / Goals di dalam Game
Seperti halnya permainan ber-genre RPG secara umum, Battle Camp juga menyajikan suatu cerita yang dapat dilalui oleh para pemainnya. Cerita ini sendiri terbagi menjadi beberapa bagian yang dipisahkan berdasarkan tempat tertentu. Sebagai contoh, cerita pertama akan memakai latar belakang tempat di “Camp”, kemudian cerita kedua bertempat di “Teepee Hollow”, dan seterusnya hingga cerita terakhir yang bertempat di “Lost Temple”.
Adapun pada Battle Camp, setiap pemain yang berhasil melewati cerita-cerita ini akan memperoleh suatu “prestasi” yang dinamakan sebagai “Badge”. Terus terang, saya tidak mendapati adanya kegunaan “badge” ini secara spesifik selain untuk ajang memperlihatkan diri kepada pemain lain bahwa pemain dimaksud telah melewati cerita terakhir di dalam game ini.
Baik, mari kita kembali pada model permainan yang ada. Setiap cerita yang disajikan akan memiliki beberapa quest ataupun goals yang harus diselesaikan oleh para pemainnya. Di dalam penerapannya, pemain akan memperoleh semacam pengalaman (dikenal sebagai .exp) yang dapat bermanfaatkan untuk menaikan level diri pemain itu ketika sudah mencapai batas .exp tertentu.
Sebagai contoh, untuk dapat naik ke level 7 (tujuh) dari level 6 (enam), maka seorang pemain harus mengumpulkan .exp sebanyak (misalnya) 500. Apabila setiap quest / goals yang diselesaikan akan memberikan .exp sebesar 50, maka akan diperlukan sekitar 10 goals / quest untuk pemain itu naik ke level 7 (tujuh). Tentunya semakin tinggi quest / goals yang diselesaikan, maka akan semakin tinggi pula .exp yang diperoleh. Akan tetapi, perlu menjadi catatan bahwa tingkat kesulitan pun akan semakin meningkat.
Secara spesifik, penyelesaian quests / goals ini terdiri dari beberapa macam seperti berbicara kepada NPC (Non-Playable Character) ataupun melawan suatu boss. Adapun hal yang hendak dijadikan catatan utama dari issue ini yaitu terkait metode pembicaraan dengan NPC. Sebagai informasi, NPC secara umum merupakan karakter di dalam game yang tidak dapat dimainkan oleh pemain manapun. Tugasnya secara rinci hanya berbicara pada karakter (secara otomatis) untuk menyampaikan hal-hal yang harus dilakukan oleh pemain itu sendiri.
Pada situasi ini, terlihat bahwa salah satu quest / goals nya yaitu berbicara dengan NPC bernama “Penny”. Setelah itu, “Penny” akan menyampaikan beberapa hal yang harus dipilih pemain sesuai dengan jalan cerita yang diharapkan. Setelah pemain selesai berbicara dengannya, maka pemain dinyatakan selesai melaksanakan quest / goals dimaksud.
4.2.2. 0x02 PoC untuk Manipulasi Melewati Quests / Goals pada Cerita
Di dalam realitanya, terdapat hal yang sangat menarik dari model quest yang memanfaatkan pembicaraan dengan NPC. Setiap seorang pemain menyelesaikan quest yang ada, maka secara otomatis aplikasi akan mengirimkan request ke server seperti berikut:
Adapun respon yang diperoleh ketika request dimaksud terkirim ke server yaitu suatu response yang bernilai sekitar 300.000 seperti gambar berikut:
Dari gambar ini, dapat diambil suatu kesimpulan yang kuat bahwa parameter “id” yang dikirimkan oleh aplikasi merupakan penanda bahwa telah selesainya suatu quest / goals dilakukan. Dalam hal ini, quest / goals yang telah diselesaikan yaitu stage 1 (satu) dengan cerita ke-9 (sembilan) yang ditandai dengan value: “1_9:complete”. Lalu hal apa yang dapat kita lakukan terkait hal ini?
Secara sederhana, saya pun mencoba melakukan request otomatis dari nilai “1_9:complete” sampai “1_35:complete“. Alasan saya mulai dari nilai 9 (sembilan) dikarenakan nilai ini telah saya lalui (dan ya, kita tidak dapat mengulang quest yang telah dilakukan demi memperoleh .exp berkali-kali).
Hasil dari request otomatis ini cukup menyenangkan karena secara otomatis juga, Saya dapat langsung menyelesaikan suatu cerita dengan cepat tanpa harus menjalani jalan permainan yang ada. Berikut ini merupakan salah satu contoh request yang dikirimkan (berakhir pada “1_11:complete” dikarenakan tidak ada lagi cerita setelahnya pada stage pertama).
Dengan cara yang sama, Saya pun terus melakukan hal ini dari value “2_1:complete” sampai pada value “9_25:complete”. Berikut ini merupakan beberapa contoh penyelesaian cerita yang disertai dengan diperolehnya badge dari masing-masing tempat cerita:
Dan singkat cerita, berikut ini merupakan tampilan pemain yang saya gunakan yang telah berhasil menyelesaikan seluruh story (dan mengoleksi seluruh badge) dalam waktu kurang dari setengah jam sejak permainan dimulai:
4.2.3. 0x02 Keuntungan Pemanfaatan Bug
Beberapa keuntungan yang dapat diperoleh dari pemanfaatan bug ini yaitu seperti:
- Mencapai tempat tertinggi dan memiliki potensi yang sangat besar untuk memperoleh monster bersifat “uncommon” (lebih baik daripada jenis “common”) yang tentunya dapat digunakan untuk mempercepat kenaikan level dari monster yang dimiliki pemain (dengan menggunakan fitur penggabungan monster sebagai “Feed”).
Secara sederhana, bila pemain berusaha mencari monster asupan pada tempat awal (yaitu “camp”), maka akan terbilang lama sekali untuk menaikan level monster utama yang dimiliki. Dengan mencapai tempat tertinggi (yaitu “Lost Temple”), maka pemain akan dapat bertarung dengan “uncommon” monster yang berada di area sekitar dan memiliki monster dimaksud.
- Memperoleh sekitar 20 golds lebih serta sekitar 14.000 stones lebih dalam waktu yang sangat singkat yang menurut saya sudah terbilang cukup untuk membayar biaya penggabungan monster.
- Kemudian, memperoleh lighting yang dapat digunakan untuk bermain melawan monster. Adapun jumlah ini tidak saya ketahui pasti nilainya karena ketika me-reproduce pada dua karakter berbeda, hasilnya pun berbeda. Karakter satu memperoleh sekitar 50 lightings, sedangkan karakter satu lagi hanya memperoleh sekitar 30 lightings
4.2.4. 0x02 Status Bug
Bug ini belum diperbaiki oleh pihak Battle Camp (dan tidak diketahui pasti mengenai kemungkinan diperbaikinya atau tidak). Secara pribadi, Saya pun tidak mengetahui kapan bug ini mulai dapat di-reproduce mengingat Saya baru mulai menemukan hal ini pada tahun 2017 lalu.
4.3. 0x03 — Parameter Pollution untuk Memaksimalkan Serangan pada Boss Raid
4.3.1. 0x03 Ringkas Cerita mengenai Boss Raid
Demi memaksimalkan para pemainnya dalam melakukan interaksi satu sama lain, Battle Camp menyediakan suatu event (tidak saya ketahui pasti waktu pelaksanaannya) yang dapat diikuti oleh seluruh pemain terdaftar. Adapun salah satu “kegiatan” pada event ini yaitu mengalahkan beberapa boss yang disediakan di suatu tempat (dikenal dengan nama “Boss Raid”).
Tentunya, semakin banyak point serangan yang dihasilkan, maka boss ini sendiri akan semakin cepat untuk dikalahkan. Adapun di dalam pelaksanaannya, Battle Camp juga menyediakan hadiah bagi para pemain yang berhasil mengalahkan boss ini dengan nilai tertinggi. Hadiah ini sendiri dapat diperoleh baik secara individu maupun secara grup (yang tergabung di dalam troops). Singkat cerita, Battle Camp menyediakan point baik untuk individu dan ada point untuk troops.
Di dalam event “Boss Raid” ini, setiap pemain tidak akan pernah mengalami kekalahan. Dengan kata lain, satu-satunya “kekalahan” yang akan diterima pemain pada event yaitu hanya apabila event itu telah berakhir (yang umumnya event akan berjalan sekitar enam hari).
4.3.2. 0x03 PoC untuk Manipulasi Nilai Serangan pada Boss Raid
Di dalam penerapannya, di setiap battle yang dihadapi pemain pada event “Boss Raid”, maka pemain harus menyerang sebanyak mungkin dalam waktu satu menit. Ketika waktu satu menit ini berakhir, maka secara otomatis aplikasi akan mengirimkan request ke server dengan tujuan “Battle Won” seperti gambar berikut:
Bila dianalisa lebih jauh, terdapat beberapa parameter yang sangat menarik di dalamnya, yaitu “damage”, “total_damage”, dan “wave_damage”.
Saat itu, mulailah Saya mencoba mencari cara untuk dapat menaikan jumlah nilai serangan ini tanpa harus berlelah-lelah mengumpulkan combo serangan. Singkat cerita, ketika Saya memasuki battle berikutnya, Saya pun mencoba untuk mematikan koneksi internet yang Saya gunakan. Ternyata battle ini sendiri masih berjalan dan Saya masih dapat menyerang monster. Apakah para pembaca sudah terbayang akan kesimpulannya?
Ya, game ini ternyata menyimpan secara offline terlebih dahulu akan nilai serangan yang dieksekusi. Dengan kata lain, bila kita menahan request nilai damage yang tersedia lalu menggantinya menjadi lebih tinggi, maka server tetap akan menerima dan menganggap hal itu valid (dikarenakan tidak terdapatnya validasi unik pada parameter lain yang dihubungkan dengan parameter nilai serangan ini). Berikut ini merupakan hasil manipulasi serangan yang telah Saya lakukan pada salah satu pertarungan melawan suatu boss:
Dari gambar ini, terlihat bahwa Saya mencoba mengubah nilai serangan dari yang semula bernilai 1.544 menjadi 30.000. Dan dari gambar terakhir, terlihat bahwa server telah menerima nilai serangan itu sebagai serangan yang valid. Hal ini sendiri dapat dilihat pada tulisan yang di-highlight.
Saat saya mencoba menaikannya menjadi ratusan ribu, ternyata nilai maksimum yang dapat diterima yaitu sekitar 75.000. Setelah melakukan analisa lebih jauh, ternyata Battle Camp telah menerapkan algoritma jumlah serangan maksimal yang didasarkan dari level serta kemampuan monster dari para pemain. Dengan kata lain, bila seorang pemain memiliki 5 (lima) monster dengan level satu, maka jumlah maksimal serangannya akan berbeda dengan seorang pemain lain yang memiliki 5 (lima) monster dengan level dua.
4.3.3. 0x03 Keuntungan Pemanfaatan Bug
Keuntungan yang dapat diperoleh dari pemanfaatan bug ini yaitu pemain dapat selalu memperoleh point maksimal baik untuk individu maupun secara grup (troops) tanpa harus berlelah-lelah membuat combo pada suatu battle resmi dengan boss yang tersedia.
Singkat cerita, hanya dengan berbekal standard monster, maka seorang pemain akan dapat memaksimalkan point yang didapat olehnya. Berdasarkan uji coba saya, pada saat itu saya berhasil menembus top 5000 dari seluruh pemain terdaftar di suatu event (dengan standard monster yang memiliki level kecil dan hanya didukung dengan jumlah lighting yang juga terbilang kecil).
4.3.4. 0x03 Status Bug
Bug ini belum diperbaiki oleh pihak Battle Camp (dan tidak diketahui pasti mengenai kemungkinan diperbaikinya atau tidak). Namun sebagai informasi, bug ini telah memiliki umur sekitar lebih dari 3 (tiga) tahun (dari awal Battle Camp masih masuk top 50 Games di App Store / Play Store, sampai akhirnya sekarang sudah berada di luar pantauan top 50).
4.4. 0x04 — Parameter Pollution untuk Memaksimalkan Serangan pada Daily Boss Battle
4.4.1. 0x04 Ringkas Cerita mengenai Daily Boss Battle
Daily Boss Battle merupakan salah satu “fasilitas” yang disediakan oleh Battle Camp untuk membuat pemain memperoleh hadiah unik seperti monster (bertipe “rare”), lighting, ataupun yang lainnya.
Akan tetapi, seperti namanya, “Boss”, maka tentu pemain akan mendapati rintangan yang tidak mudah untuk dilewati. Terlebih lagi bila pilihan mode nya adalah hard walaupun tentu hadiah yang diperoleh dengan mode hard ini jauh lebih baik daripada mode easy.
Secara spesifik, sejauh saya menelaah secara sekilas, hanya terdapat tiga boss yang “tersedia” setiap harinya yang bertempat di tempat yang sama. Perlu menjadi catatan bahwa pemain harus selalu menunggu hingga jam 07:00 GMT+7 pagi untuk dapat bertarung kembali melawan daily boss ketika sebelumnya sudah pernah bertarung dengannya.
Berikut ini merupakan salah satu penampakan boss yang tersedia di dalam game:
Singkat cerita, ketika seorang pemain telah dinyatakan kalah dalam pertarungan melawan daily boss, maka secara otomatis aplikasi akan mengirimkan request ke server berupa “battle_lost”.
Dan ketika seorang pemain berhasil mengalahkan boss dimaksud, maka secara otomatis, aplikasi akan mengirimkan request ke server berupa “battle_won”.
4.4.2. 0x04 PoC untuk Memenangkan Daily Boss Battle
Seperti yang telah para pembaca lihat pada bagian penjelasan sebelumnya, ketika seorang pemain memenangkan pertarungan melawan daily boss, maka secara otomatis, aplikasi akan mengirimkan request ke server berupa “battle_won”.
Mengingat bahwa game ini menerapkan sistem offline ketika pertarungan berlangsung dan server hanya menunggu request dari aplikasi, maka kekalahan yang dimiliki oleh pemain dalam daily boss battle akan dapat diubah menjadi kemenangan. Hal ini sendiri dapat dilakukan dengan mengubah request dari battle_lost menjadi battle_won.
Adapun beberapa tahapan yang harus dijalani yaitu:
4.4.2.1. Pastikan pemain untuk tidak perlu menyerang daily boss dengan tingkat kesulitan “hard”. (bayangkan, level rendah mencoba bermain hard. Tentunya lebih baik diabaikan dengan tidak menyerang sama sekali).
4.4.2.2. Ketika waktu berakhir (hanya satu menit), maka secara otomatis aplikasi akan mengirim request ke server berupa battle_lost. Pada kondisi ini, tahan request dimaksud sehingga tidak terkirim ke server terlebih dahulu.
4.4.2.3. Simpan nilai battle_id pada “battle_lost” yang telah kita peroleh dari request sebelumnya.
4.4.2.4. Setelah itu, copy seluruh status battle_won yang telah pemain peroleh dari PoC pada Boss Raid (0x03 di laporan ini) dan replace seluruh request dari battle_lost ini menjadi battle_won dari Boss Raid. Adapun catatan penting yang harus dilakukan pada bagian ini yaitu dengan memasukan nilai battle_id yang didapat dari battle_lost tadi.
4.4.2.5. Singkat cerita, maka hasil akhir perubahannya yaitu seperti berikut ini:
Seperti yang terlihat, Saya telah mengganti request dari battle_lost menjadi battle_won dengan menggunakan nilai battle_id yang sama yang diiringi dengan nilai damage yang besar.
4.4.2.6. Setelah selesai, maka kirimkanlah ke server dan hasilnya pun akan valid. Dengan kata lain, server akan menganggap bahwa pemain telah memperoleh kemenangan dari daily battle boss dimaksud (walaupun pada dasarnya pemain tidak melakukan apa-apa).
4.4.3. 0x04 Keuntungan Pemanfaatan Bug
Keuntungan yang dapat diperoleh dari pemanfaatan bug ini yaitu pemain dapat selalu memperoleh kemenangan di setiap melakukan pertarungan dengan daily boss. Artinya, pemain akan selalu dapat memperoleh hadiah kemenangan dari hasil pertarungan ini yang hadiahnya tentu bermacam-macam.
Berdasarkan pengalaman Saya selama beberapa hari memanfaatkan bug ini, Saya telah memperoleh monster bertipe “rare” beberapa kali yang dapat digunakan untuk menjadi “feed” bagi monster utama yang digunakan.
4.4.4. 0x04 Status Bug
Bug ini juga belum diperbaiki oleh pihak Battle Camp (dan tidak diketahui pasti mengenai kemungkinan diperbaikinya atau tidak). Namun sebagai informasi sederhana, bug ini sendiri baru saya sadari pada tahun 2017 lalu
V. PELAJARAN YANG DAPAT DIAMBIL
Parameter Pollution masih menjadi suatu teknis favorit yang dapat dimanfaatkan untuk mengelabui suatu logika aplikasi yang telah jadi. Adapun di dalamnya, teknik ini baru dapat bermanfaat ketika memang tidak terdapat validasi tertentu yang dilakukan oleh suatu aplikasi dalam memproses suatu flow yang dikirimkan.
Dalam hal ini, Battle Camp memiliki kerentanan di dalam melakukan validasi terhadap nilai serangan, penyelesaian quest, ataupun penggabungan monster. Akan tetapi, di dalam realita bila berbicara di luar aplikasi permainan, hal ini dapat berkembang lebih jauh seperti menghapus ataupun mengubah suatu data (seperti salah satu studi kasus mengenai FortiNet Support Portal yang pernah disampaikan pada blog Saya) atau bahkan sampai dapat melakukan pengaksesan secara illegal terhadap suatu data sensitif (walaupun di realita, konsep ini berhubungan erat dengan nama “IDOR).
VI. REFERENSI
- https://cwe.mitre.org/data/definitions/20.html
- https://cwe.mitre.org/data/definitions/233.html
- https://www.owasp.org/index.php/Testing_for_HTTP_Parameter_pollution_(OTG-INPVAL-004)
VII. CATATAN TAMBAHAN
Silakan langsung mengunduh paper sederhana pada tautan berikut ini untuk dapat melihat tulisan lebih nyaman: [Bahasa] Multiple Parameter Pollution Bug at “Battle Camp” Game that could Leads to Several Illegal Actions