wp2shell: REST API Batch-Route Karışıklığı ile Kimlik Doğrulamasız WordPress Çekirdek RCE (CVE-2026-63030 + CVE-2026-60137)
Tehdit özeti
17 Temmuz 2026'da WordPress çekirdek ekibi, artık wp2shell adıyla anılan zinciri kapatmak için 6.8.6, 6.9.5 ve 7.0.2 sürümlerini yayımladı. Bu zincir iki ayrı hatadan oluşuyor: CVE-2026-63030 (REST API batch-route karışıklığı) ve CVE-2026-60137 (WP_Query'nin author__not_in parametresi üzerinden çekirdekte SQL injection). Bu ikisi zincirlendiğinde, kimliği doğrulanmamış anonim bir ziyaretçi, varsayılan bir WordPress kurulumunda kod çalıştırmaya ulaşabiliyor — eklenti, tema veya hesap gerekmiyor.
Zinciri, Searchlight Cyber'den Adam Kues keşfetti; ekibi, teknik detayları yamadan sonraya erteledi — gerekçe basit: WordPress 500 milyondan fazla siteyi çalıştırıyor.
Saldırı standart bir kurulumdan başka hiçbir şey gerektirmediği ve yama gününden beri kamuya açık proof-of-concept istismarlar dolaştığı için, bu, yönettiğiniz herhangi bir WordPress sitesinde rutin bir güncelleme değil, aynı gün yama önceliğidir.
Gerçekte ne oldu
WordPress'in REST API'si, bir istemcinin birden fazla alt isteği tek bir çağrıda paketlemesine izin veren bir batch endpoint sunar: /wp-json/batch/v1. Handler, bu alt istekleri dahili olarak iki paralel dizi ile takip eder. Batch içindeki bir alt istek hata verdiğinde, bu iki dizi bir pozisyon kayarak senkronizasyonunu kaybeder — klasik bir off-by-one karışıklığı. Pratik sonucu şu: aynı batch içindeki sonraki bir alt istek, kendi bildirdiği yönlendirme/izin bağlamı yerine başka bir alt isteğin bağlamı altında işlenir.
Bu karışıklık (CVE-2026-63030) kapıyı açar. Bu kapıdan geçen saldırgan girdisi, CVE-2026-60137'nin arkasındaki savunmasız kod yoluna ulaşır: WP_Query içindeki author__not_in parametresinin arındırılmamış işlenmesi, bir SQL injection'a dönüşür. Zincirlendiğinde, bu iki hata anonim bir HTTP isteğini keyfi SQL çalıştırmaya, oradan da uzaktan kod çalıştırmaya taşır — güvenlik basınında dolaşan "wp2shell" adı da buradan geliyor.
Etkilenen sürümler ve yamalar
- CVE-2026-60137 (SQL injection): WordPress 6.8.0–6.8.5, 6.9.0–6.9.4, 7.0.0–7.0.1.
- CVE-2026-63030 (batch-route karışıklığı — SQLi'yi kimlik doğrulamasız RCE'ye dönüştüren parça): WordPress 6.9.0–6.9.4 ve 7.0.0–7.0.1. 6.8.x hattı SQL injection'dan etkileniyor ancak resmi danışma belgesi bu hattı tam kimlik doğrulamasız RCE zinciri üzerinden erişilebilir olarak tanımlamıyor.
- Yamalandığı sürümler: 6.8.6, 6.9.5, 7.0.2.
Ciddiyeti nedeniyle WordPress.org, etkilenen siteler için zorunlu otomatik arka plan güncellemesini devreye aldı. Bu bir güvenlik ağıdır, garanti değildir — otomatik güncellemesi kapalı hostlar, ağır özelleştirilmiş çekirdek kurulumları veya sessizce başarısız olan güncelleme mekanizmaları bu ağın dışında kalır. Kurulu sürümü doğrudan doğrulayın; arka plan güncellemesinin tamamlandığını varsaymayın.
İstismar durumu
Mekanizmayı tam olarak açıklayan yazılar ve çalışan proof-of-concept kodu, yamadan sadece birkaç gün sonra ortaya çıktı — artık tanıdık bir örüntü: yama farkını (patch diffing) inceleyen araştırmacılar (ve saldırganlar) savunmasız yolu hızla yeniden inşa edebiliyor. Birden fazla kaynak, açıklamadan kısa süre sonra yamalanmamış sitelere karşı istismar girişimleri bildirdi. Hâlâ etkilenen bir sürümde çalışan herhangi bir WordPress kurulumunu sadece "savunmasız" değil, "hedef alınmış farz edilmesi gereken" olarak değerlendirin.
Acil müdahale kontrol listesi
- Yönettiğiniz her WordPress kurulumunda çalışan sürümü doğrulayın — panel, WP-CLI (
wp core version) veya filo yönetim aracınız üzerinden. Yalnızca zorunlu otomatik güncellemeye güvenmeyin. - Hâlâ dışarıya açık olan her şeyi hemen 6.8.6, 6.9.5 veya 7.0.2'ye (ya da sonrasına) güncelleyin.
- Hemen yamalayamıyorsanız, giriş noktasını geçici olarak kapatmak için WAF veya reverse proxy'nizde
/wp-json/batch/v1ve eşdeğeri?rest_route=/batch/v1query-string biçimini engelleyin. Bu, zincirin dayandığı giriş noktasını kaldırır; bedeli batch endpoint'i kullanan meşru entegrasyonların etkilenmesidir. Searchlight Cyber'in kendi danışma belgesi bu boşluk için iki ek seçenek daha listeliyor: ihtiyacı olmayan sitelerde REST API'yi tamamen kapatmak (örn. "Disable WP REST API" tarzı bir eklenti ile) veya batch route'u küçük bir tamamlayıcı eklenti ile kimlik doğrulama arkasına almak. - Etkilenen bir sürümde olan ve internetten erişilebilir durumdaki her sitede, zafiyet istismar edilebilir hale geldiği andan yamanızın uygulandığı ana kadar ele geçirilmiş olabileceğini varsayın. Başarılı bir zincir bir web shell ile sonuçlanabilir — yamalamak kapıyı kapatır ama içeri zaten girmiş bir saldırganı çıkarmaz.
- Olayı kapatmadan önce ele geçirilme belirtilerini (IOC) arayın: beklenmeyen admin kullanıcılar,
wp-content/uploadsveya tema/eklenti dizinlerinde tanıdık olmayan dosyalar, değiştirilmişwp-config.phpveya çekirdek dosyaları, beklenmeyen zamanlanmış görevler (wp_cron) ve web sunucusu sürecinden normal uygulama davranışına uymayan giden bağlantılar. - Ele geçirilme ihtimali dışlanamıyorsa, başarılı bir SQL injection'ın açığa çıkarabileceği kimlik bilgilerini rotasyona sokun — veritabanı kimlik bilgileri,
wp-config.phpiçindeki authentication salt/key'ler ve veritabanında saklanan API anahtarları.
Tespit rehberi
Giriş noktası tek bir REST endpoint olduğu için, derin WordPress enstrümantasyonu olmadan bile log incelemesi uygulanabilir:
- Erişim loglarında
/wp-json/batch/v1veyarest_route=/batch/v1'e yapılanPOSTisteklerini, özellikle olağandışı büyük/bozuk gövdeli olanları veya kısa sürede tek kaynaktan gelen yüksek hacimli olanları arayın. - Batch payload'ları içinde SQL meta-karakteri yoğun
author__not_indeğerleri taşıyan iç içe istekleri arayın. - Bulguları, aynı zaman diliminde gerçekleşen dosya yazma etkinliği veya yeni admin seviyesinde kullanıcı oluşturma ile ilişkilendirin.
Bunların hiçbiri yamalamanın yerini tutmaz — yalnızca yama öncesi bir sitenin açıkta kaldığından şüpheleniyorsanız nereye bakacağınızı daraltır.
Sık sorulan sorular
Bu yalnızca savunmasız eklentisi olan siteleri mi etkiliyor?
Hayır. Her iki CVE de WordPress çekirdeğinde ve zincir, üçüncü taraf eklenti veya tema olmayan standart bir kurulumda çalışıyor. Eklenti maruziyeti ayrı, ek bir konu — burada bir ön koşul değil.
Batch endpoint'i WAF'ta engellemek gerçek bir çözüm mü?
Bilinen giriş noktasını kaldıran, anında yamalama mümkün olmadığında işe yarayan bir geçici önlemdir. Altta yatan SQL injection'ı çözmez ve aynı WP_Query parametresine erişilebilecek başka bir yol bu önlem tarafından kapsanmaz. Mümkün olan en kısa sürede yamalayın ve WAF kuralını bir köprü olarak görün, varış noktası olarak değil.
Zorunlu otomatik güncelleme aktif — güvende miyiz?
Muhtemelen, ama doğrulayın. Otomatik güncelleme; kısıtlı hosting, ağır özelleştirilmiş çekirdek kurulumları veya dosya sistemi izin sorunlarında sessizce başarısız olabilir. Yalnızca ayara güvenmek yerine sürüm numarasını doğrudan teyit edin.
Eresus Guard ile kanıt odaklı müdahale
Eresus Guard, DAST, SAST, SCA ve yapılandırma kontrollerini tek bir kanıt odaklı iş akışında birleştirir. wp2shell gibi bir olay için bu, varlık bazında hangi WordPress sürümünün çalıştığını, yamanın ne zaman uygulandığını, boşlukta hangi telafi edici kontrolün (varsa) aktif olduğunu ve ele geçirilme taramasının ne bulduğunu gösterebilmek anlamına gelir. Eresus Guard çalışma alanını inceleyebilir veya kapsam görüşmesi planlayabilirsiniz.
Kaynaklar
- wp2shell — Searchlight Cyber araştırma açıklaması
- WordPress 7.0.2 Güvenlik Sürümü
- New wp2shell WordPress Core Flaw Lets Unauthenticated Attackers Run Code — The Hacker News
- WP2Shell WordPress Vulnerabilities Exploited in the Wild — SecurityWeek
- CVE-2026-63030: wp2shell — Rapid7
- WP2Shell Vulnerabilities: CVE-2026-60137 and CVE-2026-63030 — VulnCheck
Güvenlik Doğrulaması
Bu riski kendi sisteminizde test ettirdiniz mi?
Eresus Security; sızma testi, AI ajan güvenliği ve kırmızı takım operasyonlarıyla gerçek istismar kanıtı üretir.
Pilot test talep etİlgili Hizmetler