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
Aboutaçıklamasına doğrudan HTML kodu enjekte ediliyor. - TinyMCE ayarları incelenip
background-imagestil ö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üşü:
- 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.
- 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.
- 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
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.
Daha fazla konuşmak istersen iletişime geçebilirsin; e-postam profil açıklamasında var.
Ayrıca IT’ye gideceksen sözleşme pazarlığı ve finans öğrenmeni de kesinlikle öneririm.
İ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ı.
“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.
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.
İ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.
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.
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ıpalert\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.
“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.
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.