19 Ekim 2026'da Tranco popülerlik listesindeki 2.363 .tr alan adının ana sayfasını taradık; 2.080 siteye ulaşabildik. Bu sitelerin 1.105'i (%53) bilinen açığı olan en az bir JavaScript kütüphanesi sürümünü ziyaretçinin tarayıcısına gönderiyor. 455 site (%21) jQuery'nin 3.5.0'dan eski bir sürümünü yüklüyor. Bu sürümlerdeki CVE-2020-11023 açığı, ABD Siber Güvenlik Ajansı CISA'nın sahada sömürülen açıklar listesinde 23 Ocak 2025'ten beri bulunuyor.
Eski sürüm, açığın o sitede kullanılabildiği anlamına gelmez. jQuery açığının işe yaraması için sitenin kendi kodunun dışarıdan gelen HTML'i jQuery ile sayfaya basması gerekiyor. Next.js bulgularının çoğu da yalnızca Windows sunucularda ya da belirli bir yetki denetimi düzeninde geçerli. Sitenizde jQuery varsa 3.5.0 ya da üstüne yükseltin, Next.js kullanıyorsanız aşağıdaki tablodaki güvenli sürüme geçin. Sitenizin hangi sürümleri yüklediğini görmek için alan adınızı JavaScript kütüphane taramasına yazın; hesap gerekmez.

Neyi, nasıl ölçtük?
Siteleri, akademik çalışmalarda kullanılan Tranco listesinden seçtik. Listede .tr ile biten ilk milyon içindeki her alan adını aldık; resmî kurum (gov.tr, bel.tr, tsk.tr ve benzerleri), eğitim (edu.tr, k12.tr) ve altyapı adlarını (cdn, api, mail gibi) çıkardık. Aynı kuruluşa ait birden çok alan adını tek saydık. Geriye 2.363 alan adı kaldı.
Her siteye tek bir hafif tarama yaptık. Tarayıcımız ana sayfayı ve sayfanın yüklediği betik dosyalarını indirdi; toplam 24.081 dosya okudu. Kod çalıştırmadık, form göndermedik, giriş sayfalarına girmedik. Kütüphanenin sürümünü üç yoldan biriyle okuduk:
- Dosyanın içindeki sürüm satırından (örneğin
/*! jQuery v1.12.4). Açıklı kopyaların 1.260'ı bu yolla okundu. - Dosyanın SHA-256 özetinin npm'deki resmî dağıtımla bayt bayt aynı olmasından. 636 kopya bu yolla okundu; dosyada sürüm yazmasa bile sürüm kesin.
- Dosyanın adresinden (örneğin cdnjs adresindeki sürüm klasörü). Yalnızca 7 kopya.
Açık eşleşmesini npm audit komutunun kullandığı veriyle (GitHub Advisory Database ve OSV) ve Retire.js kayıtlarıyla yaptık. Aynı karşılaştırmayı gerçek npm audit çıktısıyla denedik: 69 sürümde npm'in bildirdiği 241 danışmanın hepsini bulduk.
Ne bulduk?
| Bulgu | Site | Taranan 2.080 sitenin |
|---|---|---|
| En az bir kütüphanenin sürümü okundu | 1.738 | %83 |
| Bilinen açığı olan kütüphane sürümü | 1.105 | %53 |
| Kritik ya da yüksek önemli kayıt (ya da sahada sömürülen) | 961 | %46 |
| Sahada sömürülen ya da silahlaştırılmış kayıt | 571 | %27 |
| Desteği bitmiş kütüphane sürümü | 699 | %33 |
| CDN'den integrity (SRI) olmadan yüklenen betik | 438 | %21 |
| Herkese açık kaynak haritası (.map) | 246 | %11 |
En sık rastladığımız açıklı kütüphaneler şunlar:
| Kütüphane | Açıklı sürüm bulunan site | En sık kayıt |
|---|---|---|
| jQuery | 455 | CVE-2020-11023 (CISA KEV) |
| Swiper | 242 | CVE-2026-27212, prototip kirletme, 6.5.1 – 12.1.1 |
| Bootstrap | 192 | CVE-2019-8331, tooltip ve popover üzerinden XSS |
| jQuery Validation | 152 | CVE-2025-3573, hata etiketinde XSS, 1.20.0 öncesi |
| Next.js | 145 | Aşağıda ayrı bölümde |
| jQuery UI | 108 | CVE-2022-31160, checkboxradio XSS, 1.13.2 öncesi |
| Moment.js | 97 | CVE-2022-31129, yavaşlatan düzenli ifade |
| Handlebars | 81 | CVE-2026-33938, şablon derlemede kod enjeksiyonu |
Bu kayıtların neredeyse hepsi bir koşula bağlı. Bootstrap ve jQuery UI açıkları, ilgili bileşene (tooltip, tarih seçici, onay kutusu) dışarıdan gelen değer verilirse çalışıyor. Moment.js'in CVE-2022-24785 kaydı yalnızca sunucuda (Node.js) kullanılan Moment'ı etkiliyor; tarayıcıdaki kopya için anlamı yok. Bu yüzden her kaydın açıklamasını taramada ayrı gösteriyoruz.
jQuery: 2.080 sitenin 1.295'inde
jQuery, taranan sitelerin %62'sinde yüklü. Sitelerdeki en eski jQuery kopyasına göre dağılım:
| En eski kopya | Site | Durum |
|---|---|---|
| 1.x | 184 | Desteği bitti, CVE-2020-11023 var |
| 2.x | 98 | Desteği bitti, CVE-2020-11023 var |
| 3.0 – 3.4 | 173 | CVE-2020-11023 var, 3.5.0'a yükseltilebilir |
| 3.5 – 3.7 | 826 | Bu açık yok |
| 4.x | 14 | Bu açık yok |
119 sitede birden fazla jQuery kopyası var. Genellikle sayfanın kendisi bir sürüm yüklüyor, bir eklenti ya da üçüncü taraf bileşeni (sohbet, harita, form aracı) kendi kopyasını getiriyor. CVE-2020-11023 taşıyan 495 kopyanın 386'sını site kendi sunucusundan, 72'sini bir CDN'den yüklüyor; 32 kopya ise üçüncü tarafın betiğiyle geliyor. Üçüncü taraf kopyasını site sahibi değil, o hizmeti veren firma güncelleyebilir.
WordPress çekirdeğinin getirdiği jQuery kopyalarının hiçbirinde bu açık çıkmadı. WordPress klasörlerinden gelen eski kopya yalnızca 3 tane; ikisi temaya, biri eklentiye ait. Eski jQuery çoğunlukla hazır site şablonlarından ve elle eklenmiş dosyalardan geliyor.

Bu açık sitenizde gerçekten çalışır mı?
CVE-2020-11023, jQuery'nin <option> öğesi içeren HTML'i işlerken yaptığı bir hatadan doğuyor. GitHub danışma kaydına göre HTML önceden temizlenmiş olsa bile kod çalışabiliyor. Açığın kullanılabilmesi için üç şey birlikte olmalı:
- Site, ziyaretçinin ya da başka bir kaynağın yazdığı bir HTML parçasını alıyor (yorum, arama sonucu, API'den gelen içerik).
- Sitenin kodu bu HTML'i jQuery'nin
.html(),.append(),.prepend()gibi bir işleviyle sayfaya basıyor. - Sayfadaki jQuery 3.5.0'dan eski.
Dışarıdan yapılan bir tarama yalnızca üçüncü koşulu görebilir. İlk iki koşulu ancak sitenin kodunu bilen biri kontrol edebilir. CISA'nın listesine girmesi, açığın dünyada en az bir sitede gerçekten kullanıldığını gösteriyor; FIRST'ün EPSS modeli 18 Ekim 2026 itibarıyla önümüzdeki 30 günde sömürülme olasılığını %84 olarak veriyor. Bu sayılar sizin sitenizin durumunu söylemez, ama yükseltmeyi ertelemek için de iyi bir neden bırakmaz.
Hemen yükseltemiyorsanız danışma kaydı, HTML'i jQuery'ye vermeden önce DOMPurify ile SAFE_FOR_JQUERY seçeneği açık olarak temizlemeyi öneriyor. Bu bir geçici önlem; kalıcı çözüm yükseltme.
Yükseltme siteyi bozar mı?
1.x ya da 2.x'ten 3.x'e geçiş, eski eklentilerde hata çıkarabilir. jQuery ekibinin jQuery Migrate eklentisi, kaldırılmış işlevleri geçici olarak geri getirir ve tarayıcı konsoluna hangi kodun güncellenmesi gerektiğini yazar. Taradığımız sitelerin 221'inde jQuery Migrate zaten yüklü. Önerilen yol: önce bir deneme ortamında 3.7.1'i Migrate ile birlikte yükleyin, konsoldaki uyarıları giderin, sonra Migrate'i kaldırın.
Next.js: 164 sitede, bulguların çoğu koşullu
164 sitede Next.js kullanılıyor ve 145'inde sürüm bilinen bir kayıtla eşleşiyor. Next.js'te tarayıcıya giden dosyadaki sürüm, sunucuda çalışan sürümle aynıdır; bu yüzden bu bulgular sunucuyu da ilgilendirir.
Next.js'te "sahada sömürülen ya da silahlaştırılmış" sınıfına giren 117 bulgunun tamamı iki kayıttan geliyor ve ikisi de güçlü bir koşula bağlı:
| Kayıt | Koşul | Site | Güvenli sürüm |
|---|---|---|---|
| CVE-2026-75604 (CVSS 9,0, Metasploit modülü var) | Yalnızca Windows sunucuda çalışan Next.js | 96 | 15.5.24 ya da 16.3.3 |
| CVE-2025-29927 (CVSS 9,1, Metasploit modülü var) | Yalnızca yetki denetimi middleware'de yapılıyorsa | 28 | 12.3.5 · 13.5.9 · 14.2.25 · 15.2.3 |
Bu iki kaydın sitede geçerli olup olmadığını anlamak için sunucunun yanıt başlıklarına baktık. CVE-2026-75604 eşleşen 96 sitenin 3'ünde başlıklar sunucunun Windows olduğunu gösteriyor (IIS ya da ASP.NET); 4'ü Vercel'de çalışıyor, yani Windows değil. 86 sitede başlıklar işletim sistemini söylemiyor, 3 siteye ikinci denemede ulaşılamadı. Yani bu bulguların çoğu büyük olasılıkla bu siteleri etkilemiyor, ama dışarıdan kesin söyleyemiyoruz.

CVE-2025-29927 için Next.js danışma kaydı, Vercel'de barındırılan sitelerin bu açığa karşı kendiliğinden korunduğunu söylüyor. Kendi sunucunuzda next start ile çalışan ve oturum denetimini middleware'de yapan bir siteniz varsa ilk iş sürümü yükseltmek. Yükseltemiyorsanız danışma kaydı, x-middleware-subrequest başlığı taşıyan dış istekleri uygulamaya ulaşmadan engellemeyi öneriyor.
Desteği bitmiş sürümler: 699 site
Desteği biten bir sürüme yeni bir açık için düzeltme gelmez. En sık görülenler, endoflife.date verisine göre:
| Sürüm dalı | Site |
|---|---|
| Bootstrap 4 | 210 |
| jQuery 1 | 184 |
| Bootstrap 3 | 147 |
| jQuery 2 | 102 |
| jQuery UI 1.13 | 45 |
| jQuery UI 1.12 | 43 |
| Vue.js 3.2 | 39 |
| Next.js 14 | 27 |
Bootstrap 4'te bugün bilinen bir kritik açık olmasa bile, yarın çıkacak bir açığın düzeltmesi bu dala gelmeyecek. Yükseltme planını bu yüzden açık çıkmadan yapmak daha ucuz.
Tedarik zinciri: betiği kimden alıyorsunuz?
Bir betiği başka bir sunucudan (CDN) yüklediğinizde, o sunucudaki dosya değişirse sitenizdeki kod da değişir. Tarayıcıya dosyanın değişmediğini denetletmenin yolu integrity (SRI) özniteliği. 438 site, CDN'den en az bir betiği integrity olmadan yüklüyor. Bunların 201'inde tarama, dosya resmî dağıtımla bayt bayt aynı olduğu için kopyalanacak hazır integrity değerini veriyor. 130 sitede CDN adresi tam sürüm yazmıyor (örneğin jquery@3), bu durumda dosya habersiz değişebilir ve integrity de eklenemez.
Bir sitede, 2024'te el değiştirip ziyaretçileri dolandırıcılık sitelerine yönlendiren polyfill.io adresine hâlâ başvuru var. Tarayıcımız bu tür adreslerden dosya indirmez; yalnızca sayfada adı geçtiğini raporlar.
9 sitede, kütüphanenin resmî dosyasının sonuna kod eklenmiş. Her birini tek tek açtık: hiçbirinde dış bir adrese veri gönderme, kodu gizleme ya da kart alanı okuma belirtisi yok. Eklenen kodlar dokunmatik olay ayarı gibi sitenin kendi küçük düzeltmeleri; iki sitede ise jQuery dosyası Internet Archive'ın (Wayback Machine) eklediği kodla birlikte kopyalanmış. Bu durum zararlı değil ama dosyanın kaynağını bilmediğinizi gösterir.
246 site, betiklerinin kaynak haritasını (.map) herkese açık bırakmış. Kaynak haritası, küçültülmüş kodun okunabilir hâlini ve çoğu zaman sitenin klasör yapısını içerir. Bu bir açık değil, ama saldırganın işini kolaylaştırır.
Sunucu tarafında kullanılması gereken bir gizli anahtara (Stripe, AWS, GitHub ve benzerleri) hiçbir sitenin betiğinde rastlamadık. 110 sitede Google API anahtarı var; bu anahtarların tarayıcıda görünmesi normal, ama Google Cloud konsolunda hangi alan adlarından ve hangi API'lerle kullanılabileceği kısıtlanmalı.
Siteniz için ne yapmalı?
- Alan adınızı JavaScript kütüphane taramasına yazın. Sonuç, her kütüphane için sürümün okunduğu satırı, okunan her dosyayı ve aynı daldaki güvenli sürümü gösterir.
- jQuery 3.5.0'dan eskiyse yükseltin. Kopya bir WordPress eklentisi ya da temasından geliyorsa o bileşeni güncelleyin; WordPress sitenizdeki eklentilerin kendi açıkları için WP Lens ayrı bir tarama yapar.
- Next.js kullanıyorsanız sunucunuzun işletim sistemini ve oturum denetiminin nerede yapıldığını kontrol edin, sonra yukarıdaki tablodaki güvenli sürüme geçin.
- CDN'den yüklediğiniz her betiğin adresine tam sürümü yazın ve
integrityekleyin. - Kodunuz elinizdeyse
package-lock.json,yarn.lockya dacomposer.lockdosyanızı SBOM sayfasında eşleyin. Dışarıdan görülemeyen bağımlılıklar da kontrol edilir. - Yeni açıklar her gün yayımlanıyor. Sitenizi ücretsiz bir hesaba ekleyip bu taramayı yaptığınızda, son taramanızdaki kütüphane sürümlerine yeni bir açık kaydı eklenirse haber veririz.
Bir bulgunun sitenizde geçerli olup olmadığından emin değilseniz bize yazın, birlikte bakalım.
Bu araştırmanın sınırları
- Yalnızca ana sayfayı ve onun yüklediği betikleri okuduk. Giriş arkasındaki sayfalar, sayfa açıldıktan sonra yüklenen betikler ve sunucudaki bağımlılıklar sayılara girmedi; gerçek oranlar bu yüzden daha yüksek olabilir.
- 2.363 alan adının 119'unda güvenlik duvarı taramayı engelledi, 79'una ulaşılamadı, 85'inin DNS kaydı yoktu. Bu siteler hesaba katılmadı.
- Sürümü okunamayan kütüphaneyi "açık yok" saymadık; sayılara hiç girmedi.
- Üreticinin kendi derlemesi olan ve yamaları geri taşımış olabilecek kopyaları (sürüm adında "-sec", "-aem", "-joomla" olanlar) sayılardan çıkardık.
- Bir sürümün açıklı olması, açığın o sitede kullanılabildiğini göstermez. Bu yazıdaki sayılar güncellenmesi gereken siteleri gösterir, saldırıya açık siteleri değil.
Yöntem
- Örneklem: Tranco listesinin ilk milyonundaki .tr alan adları; resmî kurum, eğitim ve altyapı adları ile aynı kuruluşun tekrarları çıkarıldı (2.363 alan adı).
- Tarama tarihi: 19 Ekim 2026. Tarayıcı kimliği
NoroxiTools/1.0; eşzamanlı en çok 6 site, site başına en çok 30 dosya. - Sürüm: dosya içi sürüm satırı, resmî dağıtım özeti (SHA-256) ya da dosya adresi.
- Açık verisi: GitHub Advisory Database, OSV, Retire.js. KEV durumu CISA'nın kataloğundan, EPSS FIRST'ten, destek sonu endoflife.date'ten.
- Sunucu işletim sistemi yalnızca yanıt başlıklarından okundu (Server, X-Powered-By); başlık bir şey söylemiyorsa "bilinmiyor" saydık.
- Yüzdeler aşağı yuvarlandı. Hiçbir sitenin adını yayımlamıyoruz.
Kaynaklar
- Tranco popülerlik listesi: tranco-list.eu
- CISA Known Exploited Vulnerabilities kataloğu: cisa.gov
- CVE-2020-11023 danışması: GHSA-jpcq-cgw6-v4j6
- jQuery 3.5.0 sürüm notu: blog.jquery.com
- CVE-2026-75604 danışması: GHSA-p293-qw3h-jr36
- CVE-2025-29927 danışması: GHSA-f82v-jwr5-mffw
- EPSS: first.org/epss
- Destek sonu verisi: endoflife.date
Bu hafta sömürülenler · her pazartesi
KEV'e girenler, yeni PoC'ler, WordPress triyajı ve bu hafta ne yapmalı. Hesap gerekmez.