· kaynak dev.to (home feed)
WordPress, yorum XSS açığı CVE-2026-93485 için yama yayınladı; düzeltmeler 4.7'ye geri taşındı
WordPress çekirdeğinin yorum hattındaki depolanmış bir XSS açığı olan CVE-2026-93485, tek bir anonim yorumun bir onfocus handler enjekte etmesine imkân tanıyor; yamalar 7.1.1'de geliyor ve geri taşımlar 4.7.36'ya kadar uzanıyor.

WordPress, tek bir anonim yorumun bir sayfaya çalışan JavaScript enjekte etmesine ve oradan sunucuyu ele geçirmesine imkân tanıyan, yorum sistemundeki ciddi bir açık için yamalar yayınladı. CVE-2026-93485 olarak takip edilen ve Comment2XSS (ilk olarak Comment2Shell olarak açıklanmıştı) adı verilen açık, WordPress çekirdeğinin 4.7'den 7.1'e kadar olan sürümlerini etkiliyor. dev.to'daki teknik bir yazıya göre düzeltme 7.1.1 ile geliyor ve desteklenen tüm dallara geri taşınmış durumda — 7.0.5, 6.9.8 ve 4.7.36'ya kadar eski sürümler. Hata, High (Yüksek) olarak derecelendirilmiş 7.1'lik bir CVSS 3.1 puanına sahip ve WordPress HackerOne bug bounty programı aracılığıyla Awesome Motive'den Rafie Muhammad tarafından bildirildi.
Aynı HTML üzerinden iki geçiş
Bir yorum gönderildiğinde WordPress, onu tanımadığı etiket ve nitelikleri ayıklayan allowlist tabanlı bir temizleyici olan KSES'ten geçirir. Depolanan bu yorum daha sonra görüntülendiğinde, comment_text'e bağlanan bir filtre zinciri — wptexturize, convert_chars, make_clickable, force_balance_tags, convert_smilies ve wpautop — çıktıdan önce HTML'i ikinci kez yeniden yazar.
dev.to analizinde açıklandığı gibi, bu filtrelerden hiçbiri tek başına hatalı davranmıyor. Sömürü, kaydetme zamanındaki temizleyicinin depoladığı ile görüntüleme zamanındaki filtrelerin bu depolanmış değeri yeniden yorumlama biçimi arasındaki uyumsuzluk üzerine kurulu.
Bir yeni satır nasıl event handler'a dönüşür
Giriş noktası, bir blockquote etiketinin cite niteliğinin içine yerleştirilen bir yeni satır karakteri. cite, KSES allowlist'inde yer alıyor ve temizleyicinin yeniden kodlama tablosu ampersand'ları, açı parantezlerini ve tırnakları kapsıyor — ama yeni satırları kapsamıyor — bu nedenle nitelik değeri tam olarak gönderildiği gibi depolanıyor.
Render zamanında, içeriği paragraf etiketlerine saran wpautop, etiketlerin içindeki yeni satırları paragraflar arasındaki yeni satırlardan ayırt etmek zorunda. Bunu, etiket içindeki yeni satırları bir yer tutucu HTML yorumuyla değiştirerek yapıyor. Bu yer tutucunun kendisi bir büyüktür işareti içeriyor ve işler tam burada bozuluyor: bir blockquote'un nitelik listesinin sonunu büyüktür işareti dışındaki herhangi bir karakterle eşleştirerek bulan sonraki bir wpautop regex'i, gerçek etiket sınırı yerine yer tutucunun başıboş karakterinde duruyor. Ardından bir temizlik adımı, cite niteliğ değerinin ortasına bir paragraf etiketi yazıyor.
Enjekte edilen paragraf etiketi, wptexturize çalışana kadar hâlâ bir niteliğin içinde duran etkisiz bir metin. O fonksiyon düz tırnakları tipografik olanlara dönüştürüyor ve çok önemli bir şekilde, enjekte edilen etiketi gerçek bir element sınırı olarak okuyor. Onu izleyen düz tırnak, süslü tırnak entity'si olarak yeniden yazılıyor ve cite'ın orijinal kapanış sınırlayıcısını yok ediyor. Ancak wptexturize bilinçli olarak code, pre, kbd ve benzeri etiketlerin içeriğini atlıyor, bu yüzden saldırganın izin verilen bir code elementinin içine yerleştirdiği düz tırnak dokunulmadan kalıyor ve gerçek kapanış sınırlayıcısı hâline geliyor.
Tarayıcı bu nedenle cite değerini erken sonlandırıyor ve saldırganın metninin geri kalanını blockquote üzerindeki gerçek nitelikler olarak ayrıştırıyor — bunların arasında sayfa render edildiği anda, okuyucudan hiçbir etkileşim gerektirmeden çalışan autofocus ile eşleştirilmiş bir onfocus handler var.
Uzaktan kod çalıştırmaya sıçrama
Sonuçlar betiklenmiş bir uyarının çok ötesine gidiyor. dev.to yazısı, oturum açmış bir yönetici zehirlenmiş sayfayı görüntülerse, enjekte edilen betiğin yöneticinin eklenti kurma yetkisini devraldığına dikkat çekiyor — bu da WordPress'te sunucuda rastgele kod çalıştırma yeteneği anlamına geliyor. Böylece anonim bir yorum, depolanmış XSS'i ta uzaktan kod çalıştırmaya kadar zincirleyebiliyor.
Neden önemli
Yorum formları tasarımı gereği yabancılara açıktır ve yöneticiler rutin olarak oturum açıkken kendi yorum bölümlerini okur, dolayısıyla sömürünün ön koşulları egzotik koşullar değil olağan site davranışıdır. Etkilenen sürüm aralığı 4.7'ye kadar uzanıyor, yani yakın zamanda güncellememiş kurulumların büyük bir kısmı açıkta. Bu hata ayrıca mutasyon tarzı XSS'in ders kitabı örneği: tek bir fonksiyon bozuk değildi, ancak birkaç HTML yeniden yazma filtresinin etkileşimi, temizlenip kaydedilmiş içeriğin çıktı zamanında tehlikeli olmasına imkân tanıdı. Yalnızca girdi üzerinde temizlik yapmak yeterli değildi ve aynı sınıf filtre-etkileşimi hatası, görüntülenmeden önce HTML'i birden çok kez yeniden yazan her sistemde denetlenmeye değer.
Site sahipleri ne yapmalı
Dalınız için yamalanmış sürüme güncelleyin: güncel kurulumlar için 7.1.1 ya da desteklenen eski sürümlerde kalanlar için eşdeğer geri taşıma — 7.0.5, 6.9.8 ve 4.7.36'ya kadar eski sürümler. Yazı, güncellemenin kendisini çare olarak sunuyor ve yapılandırma düzeyinde bir geçici çözüm tanımlamıyor; bu yüzden hemen yama uygulayamayan siteler, moderasyondan geçmemiş yorumları canlı bir risk olarak görmeli.
- #wordpress
- #security
- #xss
- #vulnerability
- #cms
İlgili yazılar
- Drupal Webform XSS açığı (CVE-2026-96367) 6.2.12 ve 6.3.1 sürümlerinde giderildi, siteler güncellemeye çağrılıyor
- SonicWall SMA1000'deki CVSS 10.0 ölümlülüğündeki SSRF açığı aktif saldırı altında, hedef dahili CouchDB
- Atlassian dosya okuma açığı CVE-2026-21589 sekiz Data Center ürününü etkiliyor, tek bir ortak yamayla gideriliyor