2 poin oleh GN⁺ 2024-01-27 | 1 komentar | Bagikan ke WhatsApp

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 srcset untuk 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⁺:

  1. Postingan blog ini menjelaskan dengan menarik proses menemukan dan melaporkan kerentanan keamanan yang dapat terjadi pada platform online berskala besar seperti Chess.com.
  2. Kerentanan XSS dapat menjadi ancaman serius bagi keamanan situs web, dan menemukan serta memperbaiki kerentanan seperti ini sangat penting untuk melindungi privasi pengguna.
  3. 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

 
GN⁺ 2024-01-27
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

    • Saya menjalani degree apprenticeship di perusahaan FAANG dan cukup beruntung bisa dikonversi menjadi karyawan tetap di sana. Sangat bergantung pada perusahaannya, tetapi kalau hanya melihat prospek kerja langsung, menurut saya program apprenticeship di perusahaan ternama jauh lebih membantu daripada universitas selain Oxbridge
      Kalau ingin ngobrol lebih lanjut, silakan hubungi saya; email saya ada di deskripsi profil
    • ReMarkable saya akan berterima kasih. Anda sudah melakukannya dengan baik, jadi teruskan
      Dan kalau Anda masuk ke IT, ada baiknya juga belajar negosiasi kontrak dan keuangan
    • Berapa lama waktu yang dibutuhkan untuk berhasil melakukan XSS?
    • Saya akan coba memberi referensi ke Meta. Bisa kirim resume/email dan sebagainya ke tehlike gmail com?
  • 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

    • Mengapa itu disebut “satu-satunya cara yang mungkin”? Saya bisa membayangkan banyak cara lain untuk mendeteksi kecurangan
  • 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

    • Mantan istri saya memimpin tim keamanan MySpace sekitar 2006 sampai 2008. Bagian yang benar-benar liar adalah ia langsung masuk ke forum hacker MySpace untuk melihat bagaimana pekerjaan harian mereka berjalan
      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
    • Pikiran pertama saya lebih seperti “senang melihat anak-anak zaman sekarang melakukan hal seperti ini”, tetapi setelah menghitung umurnya, saya terkena pukulan mental yang cukup keras
    • Tunggu, orang ini bahkan belum 20 tahun
  • 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

    • Saya kurang paham. “Orang lain memainkan langkah saya” maksudnya mereka mengganti langkah Anda di permainan dengan langkah mereka? Atau mereka menyalin langkah dari permainan Anda ke permainan mereka? Atau maksudnya yang lain?
    • Bagaimana Anda tahu bahwa mereka memainkan langkah Anda?
    • Dengan “langkah saya”, tepatnya maksudnya apa?
  • 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 variabel
    Penulisnya 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

    • Dari hal yang disebut penulis sepintas di artikelnya, dia lahir setelah 2005, jadi ini makin mengesankan kalau mempertimbangkan betapa mudanya dia
    • Exploit pertama untuk menambahkan pengunjung profil sebagai teman setidaknya memang cukup sederhana, dan judulnya juga permainan kata. Tetapi proses menuju XSS penuh setelah itu menjadi sangat kompleks
  • 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 seperti alert\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

    • Menurut pengalaman saya, biasanya ini ditemukan setelah tanpa sengaja melihat sesuatu yang aneh. Bagian yang benar-benar sulit adalah membuat celah itu benar-benar bisa dieksploitasi, dan dalam kasus ini targetnya adalah editor teks
  • Bagian “Fitur ini mengingatkan saya pada worm MySpace sekitar tahun 2005, padahal saat itu saya bahkan belum lahir!” langsung membuat saya merasa tua

    • Jangan terlalu khawatir. Nanti akan lebih parah
      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