Menemukan XSS di Chess.com
- Sambil menikmati catur sebagai hobi dan bereksperimen dengan keterampilan teknis, penulis menemukan kerentanan XSS di Chess.com.
- Chess.com adalah situs catur terbesar di internet dengan lebih dari 100 juta anggota.
Gambaran umum
- Pada awal 2023, penulis mulai sering bermain di Chess.com.
- Penulis mengajak seorang teman mendaftar ke situs tersebut dan langsung menjadi teman melalui fitur pertemanan.
- Lalu muncul rasa penasaran apakah penambahan teman otomatis bisa dilakukan dengan cara serupa worm MySpace.
- Penulis membuat akun baru dan memeriksa tab Network di developer tools untuk menemukan URL penambahan teman otomatis.
Middlegame
- Penulis mencoba XSS menggunakan editor teks kaya TinyMCE.
- Dengan proxy Burp, penulis menyisipkan kode HTML secara langsung ke deskripsi 'About'.
- Setelah memeriksa konfigurasi TinyMCE, penulis membuat payload XSS menggunakan properti gaya
background-image. - Berbagai simbol diuji untuk menemukan cara menjalankan XSS.
- Pada akhirnya, penulis mengembangkan metode untuk mengekstrak cookie dan objek JavaScript.
Endgame
- Penulis berupaya menjalankan XSS secara penuh.
- Penulis menemukan cara baru menggunakan atribut
srcsetuntuk memakai sintaks JS yang lebih luas. - Dengan encoding Base64, payload XSS dapat dijalankan secara langsung.
- Dampaknya besar karena editor TinyMCE digunakan di seluruh situs.
Analisis
- Akar penyebab kerentanan ini adalah fitur unggah ulang gambar.
- Pemeriksaan hosting gambar dapat dilewati dengan menyertakan nama domain Chess.com.
- Editor teks kaya cocok untuk mencapai XSS karena mengizinkan beragam elemen HTML.
- TinyMCE sudah versi terbaru, tetapi sanitasi terhadap HTML akhir tidak dilakukan.
- Chess.com perlu melakukan sanitasi pada HTML akhir yang ditampilkan kepada pengguna.
Pendapat GN⁺:
- Postingan blog ini menjelaskan dengan menarik proses menemukan dan melaporkan kerentanan keamanan yang dapat terjadi pada platform online berskala besar seperti Chess.com.
- Kerentanan XSS dapat menjadi ancaman serius bagi keamanan situs web, dan menemukan serta memperbaiki kerentanan seperti ini sangat penting untuk melindungi privasi pengguna.
- Tulisan ini menekankan kepada pengembang perangkat lunak dan profesional keamanan pentingnya menyadari kerentanan pada komponen aplikasi web seperti editor teks kaya dan mencegahnya.
1 komentar
Komentar Hacker News
Saya OP. Terima kasih banyak atas komentar-komentar positifnya. Sedikit latar belakang, saya adalah siswa berusia 17 tahun di Inggris yang sedang mempersiapkan A-Levels, dan saya masih mempertimbangkan akan kuliah di mana serta opsi degree apprenticeship
Profil GitHub saya bisa dilihat di sini -> https://github.com/Jayy001
Saya adalah salah satu anggota inti HashPals, pembuat Search-That-Hash, dan juga maintainer utama repositori open source perangkat lunak gratis untuk tablet ReMarkable
Kalau ingin ngobrol lebih lanjut, silakan hubungi saya; email saya ada di deskripsi profil
Dan kalau Anda masuk ke IT, ada baiknya juga belajar negosiasi kontrak dan keuangan
Di masa ketika pengalaman saya di internet cuma sebatas selalu kalah sebagai “pustakawan sukarelawan” di Chess.com, saya biasa menyuntikkan karakter yang di-escape secara aneh, tag penutup, string kontrol umum, bahkan objek OLE ke game Chess.com real-time
Eric, pendirinya, dengan sopan meminta audit yang lebih formal, tetapi saya menolak karena tidak ingin ketahuan bahwa saya hanyalah script kiddie berusia 11 tahun. Sebagai gantinya, saya menjelaskan regex yang diperlukan untuk penyensoran ruang chat, dan kami juga membahas masalah yang lebih besar: bagaimana mendeteksi kecurangan di lingkungan asinkron
Setelah dipikir-pikir, saya bilang satu-satunya cara yang mungkin adalah membandingkan semua langkah penting bernilai tinggi dalam permainan dengan langkah terbaik yang diketahui dari engine, lalu menggunakan inferensi statistik untuk membedakan manusia yang sangat kuat dari para cheater
Tentu saja, pada saat itu pendekatan itu benar-benar mustahil, dan kesimpulannya juga begitu. Meski begitu, tetap menjadi kenangan internet yang cukup bagus bahwa seorang anak yang baru lulus dari sekolah dasar pernah mendiskusikan topik yang begitu rumit dengan webmaster sungguhan
Bagian “Fitur ini mengingatkan saya pada worm MySpace sekitar tahun 2005, padahal saat itu saya bahkan belum lahir!” benar-benar membuat saya sadar bahwa saya bertambah tua setiap hari
Keinginan keras untuk membiarkan pengguna memasukkan HTML ke situs benar-benar menjadi sumber masalah besar. Sekarang kita akan mem-parse input HTML dengan benar lalu menghapus atribut dan tag yang dilarang, tetapi saat itu semuanya ditangani dengan kegilaan regex
Saya tidak tahu apakah ini terkait, tetapi saya pernah melihat langsung orang lain memainkan langkah saya di game Chess.com dan bahkan sempat merekamnya. Pernah juga game yang sedang berlangsung muncul untuk saya, dan saya bisa melakukan langkah dalam situasi yang seharusnya tidak memungkinkan
Kalau dicari di Google, ada cukup banyak thread terkait. Saya tidak tahu apakah Chess.com sudah memperbaikinya dalam beberapa bulan terakhir, tetapi ketika saya mencoba melaporkannya, mereka tidak mau mendengarkan
Semua game ini terjadi saat saya tidak login ke situs. Saat login saya belum pernah mengalaminya, tetapi catur kurang baik untuk tekanan darah saya jadi saya tidak terlalu sering bermain
Dari judulnya saya mengira ini akan jauh lebih pemula, tetapi ternyata dia membuat exploit yang menembus berbagai lapisan validasi input lewat bypass yang cerdas. Dia bahkan menyiapkan subdomain agar terlihat seperti domain default
Saya tidak menyangka ini akan berhasil, dan itu sendiri sudah menarik. Kalau memikirkan betapa rumitnya mem-parse domain dengan regex, rasanya memang mudah ada yang terlewat. Atau mungkin sesederhana memeriksa
'...'di dalam sebuah variabelPenulisnya benar-benar paham bidangnya. Sulit untuk tidak kagum membayangkan berapa lama dia mendalami ini untuk mencapai tingkat keterampilan seperti itu. Sepertinya ini akan jadi karier yang sangat menarik
Tulisan yang bagus, OP. Semoga perjalanan hacking-mu juga terus berlanjut. Kalau belum tahu, pada payload seperti
alert(1), ketika tanda kurung difilter atau di-encode, Anda bisa mencoba menggunakan backtick sepertialert\1``Kalau ingin meningkatkan kemampuan injeksi JavaScript Anda satu tingkat, cheat sheet XSS dari Brute Logic dan Javascript for Hackers dari Gareth Heyes adalah referensi yang bagus. Sebagian orang meremehkan cross-site scripting, tetapi ini masih sangat kuat dan sangat luas penyebarannya. Terutama seperti yang ditunjukkan plugin-baby, jika cookie sesi tidak diberi HttpOnly maka dampaknya lebih besar lagi
Sangat keren. Saya suka membaca tulisan analisis bug bounty, terutama yang tentang XSS. Semuanya selalu terlihat mudah ditemukan, tetapi itu hanya bias konfirmasi, dan dalam praktiknya saya pasti tidak melihat semua pengujian yang tidak membuahkan hasil dan waktu yang dihabiskan ke jalan buntu
Bagian “Fitur ini mengingatkan saya pada worm MySpace sekitar tahun 2005, padahal saat itu saya bahkan belum lahir!” langsung membuat saya merasa tua
Yang ingin saya tanyakan kepada OP tentang insiden ini adalah, bagaimana Anda mengetahuinya? Apakah dari Darknet Diaries, atau dari jalur lain?
Saya merasa lucu ketika editor rich text disebut sebagai “holy grail”. Chess.com memang situs web besar, tetapi setiap kali saya melihat editor seperti itu atau fitur yang terlalu mencolok di tempat seperti forum lama, saya langsung berpikir situs itu mungkin penuh lubang. Bagaimanapun, ini tulisan yang bagus
Bagian “Selama pelaporan dan peninjauan bug bounty, ketika saya mencoba mereproduksinya lagi, para developer berusaha menerapkan pemblokiran dan muncullah pesan error berikut…” terasa cukup jauh dari semangat program bug bounty