9 puan yazan GN⁺ 2025-12-19 | 1 yorum | WhatsApp'ta paylaş
  • 16 yaşındaki bir lise öğrencisi, Mintlify platformundaki bir zafiyeti kullanarak X, Vercel, Cursor, Discord gibi büyük şirketlerin dokümantasyon sitelerinde cross-site scripting (XSS) saldırısının mümkün olduğu bir vakayı derleyip yayımladı. Bu zafiyet sayesinde bug bounty olarak 11.000 dolar aldı
  • Mintlify’nin dahili yolu /_mintlify/static/[subdomain]/[...route], alan adı doğrulaması olmadan harici dosyaları yükleyebilecek şekilde tasarlanmıştı
  • Saldırgan, SVG dosyasına JavaScript enjekte ederek Discord gibi büyük servislerin alan adlarında kötü amaçlı betikler çalıştırabildi
  • Zafiyet, Mintlify kullanan neredeyse tüm müşterileri etkiledi ve tek bir bağlantı tıklamasıyla hesap ele geçirme mümkün olabildi
  • Bu olay, tedarik zinciri güvenliğindeki tek bir zafiyetin büyük ölçekli zarara yol açabileceğini gösteren bir örnek olarak değerlendiriliyor

Discord’da keşif

  • 2025 Kasım’ında Discord’un yapay zeka tabanlı dokümantasyon platformu Mintlify’a geçmesiyle zafiyet araştırması başladı
    • Araştırmacı, mevcut özel platformdan Mintlify’a geçişin hemen ardından yeni dokümantasyon sisteminin yapısını analiz etti
  • Discord’un dokümantasyon alan adı (discord.mintlify.app), Mintlify’nin dahili yolunu (/_mintlify/*) olduğu gibi açığa çıkarıyordu
    • Bu yolun, kimlik doğrulama gibi temel işlevler için erişilebilir olması gerekiyordu

Mintlify platform yapısı

  • Mintlify, Markdown tabanlı dokümantasyon yazımını destekleyen ve bunu otomatik olarak web dokümantasyonuna dönüştüren bir servis
  • Tüm dokümantasyon siteleri *.mintlify.app alt alan adında veya özel alan adlarında çalışıyor
  • Dahili olarak /_mintlify/api/user, /_mintlify/markdown/, /_mintlify/static/ gibi endpoint’ler kullanıyor

Zafiyetin araştırılma süreci

  • /_mintlify/_markdown/_sites/[subdomain]/[...route] endpoint’inin alan adı doğrulaması olmadan başka dokümanların dosyalarını döndürdüğü keşfedildi
    • Ancak bu yol yalnızca render edilmemiş Markdown metni döndürdüğü için kod çalıştırmak mümkün değildi
  • Sonrasında Mintlify CLI paketi analiz edilerek /_mintlify/static/[subdomain]/[...route] endpoint’i de bulundu
    • Bu yol statik dosyaları döndürüyor ve dosya uzantısı whitelist’i uyguluyordu
    • HTML ve JS dosyaları engellenmişti, ancak SVG dosyalarına izin veriliyordu

Saldırının gerçekleştirilmesi

  • Saldırgan, içine JavaScript enjekte edilmiş bir SVG dosyasını kendi Mintlify dokümanına yükledi
  • Discord alan adında bu dosya çağrıldığında (https://discord.com/_mintlify/_static/.../lmao.svg) betik çalışıyordu
  • Bu sayede yalnızca Discord’da değil, Mintlify kullanan tüm şirketlerin dokümantasyon alan adlarında XSS çalıştırmak mümkün oldu

İş birliği ve bildirim

  • Araştırmacı, zafiyeti doğrulamak için diğer güvenlik araştırmacılarıyla birlikte çalıştı
  • Discord, bildirimden hemen sonra geliştirici dokümantasyonunun tamamını 2 saatliğine devre dışı bıraktı ve ardından eski platformuna geri döndü
  • Mintlify, zafiyetten Discord üzerinden haberdar olduktan sonra mühendislik ekibi ile araştırmacılar arasında bir Slack kanalı açarak düzeltme çalışmalarına hemen başladı

Etki alanı

  • X(Twitter), Vercel, Cursor, Discord gibi Mintlify müşterilerinin büyük bölümü etkilendi
  • Her şirketin resmi alan adında tek bir kötü amaçlı bağlantıyla hesap ele geçirme ihtimali vardı
  • Tedarik zincirindeki tek bir zafiyet, yüzlerce şirketin güvenliğinde zincirleme risk yaratabiliyor

Ödül ve sonuç

  • Araştırma ekibi toplamda yaklaşık 11.000 dolarlık bug bounty aldı
    • Discord 4.000 dolar ödedi, Mintlify ise her bir zafiyet için ek ödül verdi
  • Bu vaka, tedarik zinciri güvenliğinin önemi ile tek bir platform zafiyetinin etki alanını gösteren temsilî bir örnek olarak kaldı

1 yorum

 
GN⁺ 2025-12-19
Hacker News yorumları
  • Bu exploit gerçekten korkutucu bir örnek
    Tek bir bağlantıya tıklamak bile yeterli; örneğin https://discord.com/_mintlify/static/evil/exploit.svg gibi bir bağlantıya basıldığında, Discord alan adında JavaScript çalıştırılıyor
    Bunun sonucunda oturum çerezleri veya token'lar çalınabiliyor, hesap tamamen ele geçirilebiliyor; geliştirici uygulamaları ya da webhook'lar manipüle edilebiliyor, API üzerinden sunucular silinebiliyor veya ödeme bilgileri kullanılarak Nitro satın alınabiliyor; yani etki çok büyük
    Bu ölçekte bir zararı düşününce 4.000 dolarlık bug bounty ödülü fazla düşük geliyor

    • Çerez veya token çalmak için HTTP-only olmayan çerezler ya da localStorage içinde token bulunması gerekir; Discord'un böyle bir yapıda olup olmadığını merak ediyorum
      Oturum çerezleri her zaman HTTP-only olarak ayarlanırsa bu tür saldırılara karşı çok daha dayanıklı olunur
      Frontend geliştiricileri arasında bu temel güvenlik kavramlarını bilmeyen bu kadar çok kişi olması şaşırtıcı
    • 4.000 dolar çok az” fikrine katılıyorum
      Karaborsada bunun değeri çok daha yüksek olabilirdi
  • SVG dosyalarına script gömülebilmesinin kendisi başlı başına bir güvenlik hatası gibi geliyor
    Etkileşimli demoları veya oyunları tek bir SVG ile yapabilmek havalı olsa da, bu aynı zamanda büyük bir zafiyet kaynağı
    Bu yüzden birçok platform SVG yüklemeyi yasaklıyor ya da önizlemeyi engelliyor
    Discord'da da SVG yükleyince kod olduğu gibi görünüyor ve Facebook Messenger ya da WeChat gibi yerlerde de paylaşılamıyor
    Dosya boyutunun küçük olması ve çözünürlükten bağımsızlık gibi avantajlarına rağmen, raster görüntü formatlarının hâlâ daha yaygın kullanılmasına üzülüyorum

    • Tüm SVG'ler hem yükleme sırasında hem de render edilirken çok sıkı şekilde sanitize edilmelidir
      Rails'in Active Storage'ı varsayılan olarak SVG'leri sanitize etmez, buna dikkat etmek gerekir
    • XML External Entity (XXE) sorunu da benzer bir örnekti
      Ayrıntılar için OWASP belgesine bakılabilir
    • Mesajlaşma uygulamaları <script> etiketini sadece yok saysa bu çözüm olur mu diye merak ediyorum
      Ama muhtemelen bu tek başına yeterli olmaz
    • Bu durum Flash dönemindeki güvenlik açıklarını yeniden hatırlatıyor
    • SVG ile ilgili daha büyük sorun, render sonucunun yazılımdan yazılıma değişmesi
      Raster formatlarda bu tür sorunlar neredeyse yok
  • Bu olay sanki günümüz yapay zeka startup ekosisteminin bir kesitini gösteriyor
    VC parasıyla büyüyen bir yapay zeka dokümantasyon startup'ı, güvenlik doğrulaması olmadan büyük müşteriler kazanıyor ve sonunda milyonlarca insanı riske atıyor
    Mintlify kısa süre önce karmaşık bir caching mimarisiyle övünen bir blog yazmıştı, ama görünüşe göre en temel güvenliği bile bilmiyorlar
    Böyle bir açığı bulan kişi ise sadece 5.000 dolar alıyor
    Bence bu, günümüzdeki yapay zeka temelli geliştirme kültürünün ne kadar kırılgan olduğunu gösteren bir örnek

    • Aslında bu tür saldırılara açık olan sadece yapay zeka startup'ları değil; bu, JavaScript ekosisteminin genelindeki yapısal bir sorun
      Karmaşık bağımlılık zincirleri ve çok sayıda üçüncü taraf DLL cehennemi asıl neden
    • XSS'lerin çoğu tek alan adı mimarisi yüzünden oluyor
      Discord API belgelerini doğrudan discord.com üzerinden sunmasaydı bu sorun yaşanmazdı
    • Bir dokümantasyon sitesi için neden karmaşık bir caching yapısına ihtiyaç duyulduğunu anlamıyorum
      Sadece CDN yetmez mi?
  • Bu, müşteri hesaplarının tamamen ele geçirilmesine yol açabilecek bir hata ve ödül miktarı çok düşük
    Bu çağda XSS'ye izin vermek için bir gerekçe olmamalı

    • XSS hâlâ ortadan kalkmış değil ve CSP ya da Trusted Types gibi savunmalar da kusursuz değil
      Anubis'te bu yıl iki tane reflected XSS bulundu
      Üçüncü taraf bağımlılıklarını mutlaka denetlemek gerekiyor
      İlgili güvenlik duyuruları için buraya ve buraya bakılabilir
    • Genel olarak XSS açıklarının piyasa değeri çok düşüktür
      Büyük sosyal ağlar dışında bunlardan para kazanmak zordur
  • Böyle bir zafiyeti bulan 16 yaşındaki hackeri tam zamanlı ya da yarı zamanlı işe alıp sürekli güvenlik denetimi yaptırmak nasıl olur diye düşündüm
    Yıllık 50.000 dolar bile verseniz şirket güvenliği muhtemelen ciddi şekilde güçlenir

    • Ama araştırmacıya çıktı baskısı yükleyen bir sözleşme yapısı uygun olmaz
      Bug bounty sonuç odaklı ödeme yaptığı için daha verimli
      Yine de ödül düşükse araştırmacı bunu üçüncü taraflara satmaya yönelebilir
    • Bug bounty katılımcılarının çoğunun uzmanlık alanı farklıdır
      XSS, IAM, shell exploit gibi herkesin ayrı uzmanlığı var; tek bir kişinin her şeyi kapsaması zor
    • Dürüst olmak gerekirse bu şirketlerin güvenliğe pek önem verdiğini sanmıyorum
  • 16 yaşında birinin bunu bulmuş olması etkileyici
    Ama XSS'yi supply chain attack olarak adlandırmak bana biraz yabancı geliyor

    • Terim kullanımı biraz hatalı gibi ama yaşı küçük olduğu için anlaşılabilir
    • Yine de supply chain açısından bakınca bir mantığı var
      Sorun Mintlify gibi bir ara katmanda çıkarsa son kullanıcıların kendilerini savunacak bir yolu kalmıyor
      Kötü amaçlı kod güvenilen zincirin içinden taşınıyor; bu yüzden bir tür supply-chain düzeyinde XSS sayılabilir
  • İşbirlikçinin raporunda daha da ciddi bir RCE zafiyeti de yer alıyor
    Ayrıntılar için bu bloga bakılabilir

  • Bu tür örnekleri görünce,
    1️⃣ Content Security Policy (CSP) mutlaka ayarlanmalı
    2️⃣ NodeJS sunucularında --disallow-code-generation-from-strings seçeneği varsayılan olarak kullanılmalı
    Vercel gibi servis sağlayıcılar, CSP kullanılmadığında uyarı göstermeli
    NodeJS için ek güvenlik bayrakları bu yazıda özetlenmiş

  • Kullanıcı kimliğinin bağlı olduğu ana alan adında üçüncü taraf bir hizmeti proxy'lemek yapılabilecek en kötü tercihlerden biri
    Mintlify, dev-docs.discord.com gibi ayrı bir alt alan adına ayrılmalıydı

    • Ben de Mintlify benzeri bir ürün işletiyorum ama kod tabanına erişim veya Git entegrasyonu sunmuyoruz
      Müşteri istese bile güvenlik riski fazla büyük
      Yine de SEO nedeniyle dokümantasyonu ana alan adında tutmak isteyen çok oluyor
      Mintlify açısından bu olayın çok stresli olduğunu tahmin edebiliyorum
    • Bu tür zafiyetlerin özünde alan adı ayrımının yapılamamış olması var
      Üçüncü taraflar için ayrı bir alt alan adı kullanılmalı ve ana uygulamanın kimlik doğrulama çerezleri host-only olarak sınırlandırılmalı
      Mümkünse tamamen farklı bir alan adı kullanmak (discorddocs.com gibi) daha da güvenli olur
    • Şirketlerin dokümantasyon sitelerini ana alan adında tutmasının sebebi, kod örneklerine gerçek API anahtarlarını otomatik yerleştirebilmek
      Ama güvenlik riskine kıyasla bu tercih fazla tehlikeli
  • Artık SVG dosyalarını asla açmayacağım
    16 yaşında birinin bunu bulmuş olması gerçekten efsanevi

    • Yine de açmanız gerekiyorsa bunu yalnızca sandbox'lanmış bir tarayıcı ortamında yapın