« Tüm yayınlar

WordPress Çekirdeğinde Kimlik Doğrulamasız SQL Enjeksiyonu

WordPress REST batch endpoint'indeki dizi kayması pre-auth SQL enjeksiyonuna yol açıyor; CVE-2026-63030/60137 detayları ve hızlı veri çıkarma tekniği.

CVE-2026-63030 ve CVE-2026-60137, WordPress'in REST batch endpoint'inde (/wp-json/batch/v1) bulunan bir dizi senkronizasyon hatasından kaynaklanıyor. serve_batch_request_v1() fonksiyonu, alt istekleri doğrulama ($validation) ve dispatch ($matches) için iki ayrı diziye indeksliyor; bir alt isteğin yolu wp_parse_url() tarafından reddedildiğinde $matches dizisi kayıyor ve sonraki tüm istekler yanlış handler'a yönlendiriliyor. Bu kayma, iç içe geçmiş (nested) batch istekleriyle iki kez istismar edilerek posts endpoint'inin categories isteğini işlemesi sağlanıyor; böylece categories şemasında tanımsız olan author_exclude parametresi WP_Query::author__not_in'e ham haliyle ulaşıyor.

Sorunun kökü, author__not_in değerinin yalnızca dizi (array) olduğunda sanitize edilmesi; string değer is_array() kontrolünü atlayarak doğrudan SQL sorgusuna enjekte edilebiliyor. Bu da veritabanı okuma (boolean oracle ile parola özetleri dahil) ve MySQL FILE yetkisi varsa dosya yazma yoluyla uzaktan kod çalıştırmaya kadar giden bir saldırı zinciri oluşturuyor.

Eğitim amaçlı PoC deposu, klasik kör (blind) boolean çıkarımına kıyasla yaklaşık 75 kat daha hızlı bir teknik sunuyor: X-WP-Total yanıt başlığını bit maskesi kanalı olarak kullanmak ve iç batch'in boyut sınırlamasının (maxItems) route confusion sayesinde atlanmasından yararlanmak. Bu sayede 34 karakterlik bir phpass hash'i ~224 istek yerine yalnızca 3 istekte çıkarılabiliyor. Açık, WordPress 6.9.5 ve 7.0.2 sürümlerinde giderildi; mühendisler için bu vaka, şema tabanlı doğrulamanın dispatch mantığıyla aynı kaynaktan indekslenmesinin kritik önemini gösteriyor.