2 puan yazan GN⁺ 2024-01-27 | 1 yorum | WhatsApp'ta paylaş

Chess.com'da XSS keşfi

  • Satrançla hobi olarak ilgilenip teknik şeylerle oynarken Chess.com'da bir XSS zafiyeti keşfediliyor.
  • Chess.com, 100 milyondan fazla üyesi olan internetteki en büyük satranç sitesidir.

Genel bakış

  • 2023'ün başlarında Chess.com'da çok zaman geçirilmeye başlanıyor.
  • Bir arkadaş siteye kaydolmaya ikna ediliyor ve arkadaşlık özelliği kullanılarak anında arkadaş olunuyor.
  • MySpace solucanına benzer şekilde otomatik arkadaş eklemenin mümkün olup olmadığı merak ediliyor.
  • Yeni bir hesap oluşturulup geliştirici araçlarının ağ sekmesi incelenerek otomatik arkadaş ekleme URL'si bulunuyor.

Orta oyun

  • TinyMCE zengin metin editörü kullanılarak XSS deneniyor.
  • Burp proxy kullanılarak About açıklamasına doğrudan HTML kodu enjekte ediliyor.
  • TinyMCE ayarları incelenip background-image stil özelliği kullanılarak bir XSS payload'u oluşturuluyor.
  • XSS'i çalıştırmanın yolunu bulmak için çeşitli semboller test ediliyor.
  • Sonunda çerezleri ve JavaScript nesnelerini dışarı aktarabilen bir yöntem geliştiriliyor.

Oyun sonu

  • XSS'i tamamen çalıştırmak için uğraşılıyor.
  • srcset özelliği kullanılarak daha geniş JS sözdiziminin kullanılabildiği yeni bir yöntem bulunuyor.
  • Base64 kodlaması kullanılarak XSS payload'u doğrudan çalıştırılıyor.
  • TinyMCE editörü site genelinde kullanıldığı için etki büyük oluyor.

Analiz

  • Zafiyetin kök nedeni görseli yeniden yükleme özelliğidir.
  • Görsel barındırma kontrolü, Chess.com alan adı eklenerek aşılabiliyor.
  • Zengin metin editörü çeşitli HTML öğelerine izin verdiği için XSS elde etmek açısından elverişli.
  • TinyMCE günceldi ancak nihai HTML üzerinde sanitization eksikti.
  • Chess.com, kullanıcıya gösterilen nihai HTML için sanitization uygulamalıdır.

GN⁺'nin görüşü:

  1. Bu blog yazısı, Chess.com gibi büyük ölçekli çevrimiçi platformlarda ortaya çıkabilecek güvenlik zafiyetlerinin keşfedilmesi ve raporlanması sürecini ilgi çekici biçimde anlatıyor.
  2. XSS zafiyetleri web sitesi güvenliği için ciddi bir tehdit oluşturabilir; bu tür açıkların bulunup giderilmesi, kullanıcıların gizliliğini korumak açısından çok önemlidir.
  3. Yazı, yazılım geliştiriciler ve güvenlik uzmanları için zengin metin editörü gibi web uygulaması bileşenlerindeki zafiyetleri fark etmenin ve bunları önlemenin önemini vurguluyor.

1 yorum

 
GN⁺ 2024-01-27
Hacker News yorumları
  • OP benim. Olumlu yorumlar için gerçekten teşekkürler. Biraz arka plan vereyim: Birleşik Krallık’ta A-Levels’a hazırlanan 17 yaşında bir öğrenciyim; hangi üniversiteye gideceğimi ve degree apprenticeship seçeneklerini hâlâ değerlendiriyorum.
    GitHub profilimi buradan görebilirsiniz -> https://github.com/Jayy001
    HashPals’in çekirdek üyelerinden biriyim, Search-That-Hash’i yaptım ve ReMarkable tabletleri için ücretsiz yazılım açık kaynak deposunun da bakımcısıyım.

    • Bir FAANG şirketinde degree apprenticeship yaptım ve şans eseri orada tam zamanlı işe geçtim. Şirketten şirkete çok değişir ama yalnızca kısa vadeli iş olanaklarına bakarsak, tanınmış bir şirketteki çıraklık programının Oxbridge dışındaki üniversitelerden çok daha faydalı olduğunu düşünüyorum.
      Daha fazla konuşmak istersen iletişime geçebilirsin; e-postam profil açıklamasında var.
    • ReMarkable’ım sana minnettar olacak. İyi iş çıkarıyorsun, devam et.
      Ayrıca IT’ye gideceksen sözleşme pazarlığı ve finans öğrenmeni de kesinlikle öneririm.
    • XSS’i çalıştırmanız ne kadar sürdü?
    • Meta’ya önermeyi deneyeceğim. Özgeçmişini/e-postanı tehlike gmail com’a gönderebilir misin?
  • İnternet deneyimim Chess.com’da “gönüllü kütüphaneci” olarak sürekli yenilmekten ibaretken, canlı Chess.com oyunlarına garip biçimde escape edilmiş karakterler, kapanış etiketleri, yaygın kontrol dizgeleri, hatta OLE nesneleri bile enjekte ederdim.
    Kurucu Eric daha resmi bir denetim yapmamı nazikçe istedi ama 11 yaşında bir script kiddie olduğumu belli etmek istemediğim için reddettim. Bunun yerine sohbet odası sansürü için gereken regex’leri anlattım ve asenkron bir ortamda hileyi nasıl tespit edebileceğimiz gibi daha büyük bir sorunu birlikte ele aldık.
    Düşünüp taşındıktan sonra, mümkün olan tek yöntemin oyunda kritik önemdeki tüm yüksek değerli hamleleri motorun bilinen en iyi hamleleriyle karşılaştırmak ve istatistiksel çıkarımla güçlü insan oyuncuları hilecilerden ayırmak olduğunu söyledim.
    Elbette o zamanlar bu saçma derecede imkânsız bir yaklaşımdı ve sonuç da öyle oldu. Yine de ilkokuldan yeni çıkmış bir çocuğun gerçek bir webmaster ile böyle incelikli konuları tartışmış olması, oldukça güzel bir internet anısı olarak kaldı.

    • “Mümkün olan tek yöntem” neden bu olsun? Hileyi tespit etmek için akla birkaç farklı yöntem gelebilir.
  • “Bu özelliğin bana 2005 civarındaki MySpace solucanını hatırlatması komik, çünkü o zaman daha doğmamıştım bile!” kısmında her gün yaşlandığımı hissettim.

    • Eski eşim 2006’dan 2008 civarına kadar MySpace güvenlik ekibini yönetiyordu. Asıl çılgın kısım, gün içinde işlerin nasıl ilerlediğini görmek için bizzat MySpace hacker forumlarına girmesiydi.
      Kullanıcıların siteye HTML koymasına izin verme konusundaki ısrar devasa bir sorundu. Bugün olsa HTML girdisini düzgün ayrıştırıp yasaklı öznitelikleri ve etiketleri kaldırırdık; o zamanlar ise regex çılgınlığıyla hallediliyordu.
    • İlk düşüncem daha çok “bugünün gençlerinin böyle şeyler yapmasını görmek güzel” oldu ama yaşını hesaplayınca zihinsel olarak darbe aldım.
    • Bir dakika, bu kişi 20 yaşın altındaymış.
  • İlgili mi bilmiyorum ama Chess.com oyununda başka birinin benim hamlemi benim yerime yaptığını bizzat gördüm ve hatta kaydettim. Devam eden bir oyun bana açıldı ve normalde hamle yapamamam gereken bir durumda hamle yapabildiğim de oldu.
    Google’da ararsanız bununla ilgili epey başlık var. Chess.com’un son birkaç ayda bunu düzeltip düzeltmediğini bilmiyorum ama ben bildirmeye çalıştığımda dinlemek istemediler.
    Tüm bu oyunlar siteye giriş yapmamışken gerçekleşti. Giriş yapmışken hiç yaşamadım ama satranç tansiyona iyi gelmediği için çok sık oynamıyorum.

    • Tam anlayamadım. “Başka biri benim hamlemi yapıyor” derken oyunda sizin hamlenizi kendi hamlesiyle değiştirdiğini mi kastediyorsunuz? Yoksa sizin oyununuzdaki hamleyi kendi oyununda aynen takip ettiğini mi? Ya da başka bir şey mi?
    • Onların sizin hamlenizi yaptığını nasıl anlayabiliyorsunuz?
    • “Benim hamlem” derken tam olarak ne demek istiyorsunuz?
  • Sadece başlığa bakınca çok daha acemi işi bir içerik beklemiştim ama aslında birden fazla girdi doğrulama katmanını zekice bir atlatmayla delen bir exploit yazmış. Ana alan adı gibi görünmesi için alt alan adı bile ayarlamış.
    Bunun işe yarayacağını beklemiyordum; bu yönüyle bile ilginçti. Alan adlarını regex ile ayrıştırmanın ne kadar karmaşık olduğunu düşününce gözden kaçması kolay görünüyor. Ya da belki de sadece değişken içinde '...' kontrolü yapıyorlardı, kim bilir.
    Yazar alanını iyi biliyor. Bu seviyede beceri için ne kadar uzun süre uğraştığına hayran kalıyorsunuz. Oldukça ilginç bir kariyeri olacak gibi.

    • Yazarın yazıda laf arasında söylediğine göre 2005’ten sonra doğmuş; çok genç olduğunu da hesaba katınca daha da etkileyici.
    • Profil ziyaretçilerini arkadaş olarak ekleyen ilk exploit en azından oldukça basitti ve başlık da bir kelime oyunu. Ama tam XSS’e giden süreç sonrasında epey karmaşıklaşmış.
  • Güzel yazı, OP. Umarım hacking yolculuğun da iyi devam eder. Henüz bilmiyorsan, alert(1) gibi payload’larda parantezler filtreleniyor veya encode ediliyorsa backtick kullanıp alert\1`` denemeyi deneyebilirsin.
    JavaScript injection’ını bir seviye ileri taşımak istiyorsan Brute Logic’in XSS cheat sheet’i ve Gareth Heyes’in Javascript for Hackers’ı iyi kaynaklar. Bazıları cross-site scripting’i hafife alıyor ama hâlâ çok güçlü ve yaygın. Özellikle plugin-baby’nin işaret ettiği gibi session cookie’lerinde HttpOnly yoksa.

  • Çok güzel. Bug bounty analiz yazılarını, özellikle XSS yazılarını okumayı seviyorum. Hep bulması kolaymış gibi görünüyor ama bu sadece doğrulama yanlılığı; gerçekte hiçbir sonuç vermeyen testlere ve çıkmaz sokaklara harcanan zamanı ben görmüyorum elbette.

    • Benim deneyimime göre genelde tesadüfen tuhaf bir şey fark ettikten sonra bulunuyor. Asıl zor kısım o açığı gerçekten istismar edilebilir hâle getirmek; bu örnekte hedef metin düzenleyicisiymiş.
  • “Bu özelliğin bana 2005 civarındaki MySpace solucanını hatırlatması komik, çünkü o zaman daha doğmamıştım bile!” kısmında doğrudan yaşlandığımı hissettim.

    • Çok endişelenmeyin. Daha da kötüleşiyor.
      Bu olayla ilgili OP’ye sormak istediğim şey, bunu nasıl öğrendiği. Darknet Diaries miydi, yoksa başka bir kanal mı?
  • Zengin metin düzenleyicisini “kutsal kâse” diye adlandırması komik. Chess.com büyük bir web sitesi ama eski forum tarzı yerlerde böyle düzenleyiciler ya da gereğinden fazla süslü özellikler gördüğümde her seferinde sitenin delik deşik olup olmadığını düşünüyorum. Her hâlükârda harika yazı.

  • “Bug bounty raporu ve inceleme sırasında, ben yeniden üretmeye çalışırken geliştiriciler engelleme uygulamaya çalıştı ve şu hata mesajı çıktı…” kısmı bug bounty programının amacından epey uzak görünüyor.