1 milyondan fazla aktif web sitesi kurulumuna sahip olan WordPress için Better Search Change eklentisinde kritik öneme sahip bir güvenlik açığı keşfedildi ve yamandı. Başarılı saldırılar, keyfi dosya silmelere, hassas verilerin alınmasına ve kod yürütülmesine yol açabilir.

Güvenlik Açığı Önem Düzeyi

Güvenlik açıklarının ciddiyeti, düşükten kritik seviyeye kadar değişen derecelendirmelerle bir puan sistemiyle puanlanır:

  • Düşük 0,1-3,9
  • Orta 4,0-6,9
  • Yüksek 7,0-8,9
  • Kritik 9.0-10.0

Better Search Change eklentisinde keşfedilen güvenlik açığının ciddiyeti, 1-10 şiddet ölçeğinde 9,8 puanla en yüksek seviye olan Kritik olarak derecelendiriliyor.

İllüstrasyon: Wordfence

Daha İyi Arama WordPress Eklentisini Değiştirin

Eklenti WP Engine tarafından geliştirilmiştir ancak orijinal olarak WP Engine tarafından satın alınan Delicious Brains geliştirme şirketi tarafından oluşturulmuştur. Better Search Change, bir site veya sunucu taşıma görevinde yararlı olan, WordPress web sitesi veritabanında arama ve değiştirme görevini çalıştırma sürecini basitleştiren ve otomatikleştiren bir kavak WordPress aracıdır. Eklenti ücretsiz ve ücretli bir Pro sürümüyle gelir.

Eklenti web sitesi ücretsiz sürümün aşağıdaki özelliklerini listeler:

  • “Tüm tablolar için serileştirme desteği
  • Belirli tabloları seçme yeteneği
  • Kaç alanın güncelleneceğini görmek için bir “deneme” çalıştırma yeteneği
  • WordPress’in çalışan kurulumu dışında sunucu gereksinimi yok
  • WordPress Çoklu Site desteği”

Ücretli Pro sürümünde nelerin değiştiğini takip etme yeteneği, eklenti çalışırken veritabanını yedekleme ve içe aktarma yeteneği ve genişletilmiş destek gibi ek özellikler bulunur.

Eklentinin popülaritesi kullanım kolaylığı, kullanışlılığı ve güvenilir bir eklenti olma geçmişinden kaynaklanmaktadır.

PHP’de Nesne Yerleştirme Güvenlik Açığı

WordPress bağlamında bir PHP Object Injection güvenlik açığı, kullanıcı tarafından sağlanan bir girişin güvenli olmayan şekilde serileştirilmesi durumunda ortaya çıkar. Serileştirmeden çıkarma, nesnelerin dize temsillerinin tekrar PHP nesnelerine dönüştürüldüğü bir süreçtir.

Kâr amacı gütmeyen Dünya Çapında Açık Uygulama Güvenliği Projesi (OWASP), PHP Object Injection güvenlik açığının genel bir tanımını sunar:

“PHP Object Injection, bir saldırganın bağlama bağlı olarak Kod Enjeksiyonu, SQL Enjeksiyonu, Yol Geçişi ve Uygulama Hizmet Reddi gibi farklı türden kötü amaçlı saldırılar gerçekleştirmesine olanak tanıyan uygulama düzeyinde bir güvenlik açığıdır.

Güvenlik açığı, kullanıcı tarafından sağlanan girdinin unserialize() PHP işlevine aktarılmadan önce uygun şekilde temizlenmemesi durumunda ortaya çıkar. PHP nesne serileştirmesine izin verdiğinden, saldırganlar güvenlik açığı bulunan bir unserialize() çağrısına anlık serileştirilmiş dizeler geçirebilir ve bu da uygulama kapsamına rastgele PHP nesnesinin/nesnelerinin enjeksiyonuna neden olabilir.

PHP Object Injection güvenlik açığından başarıyla yararlanabilmek için iki koşulun karşılanması gerekir:

  • Uygulama, kötü niyetli saldırılar gerçekleştirmek veya bir ‘POP zinciri’ başlatmak için kullanılabilecek PHP sihirli yöntemini (__wakeup veya __destruct gibi) uygulayan bir sınıfa sahip olmalıdır.
  • Saldırı sırasında kullanılan tüm sınıfların, savunmasız unserialize() çağrılırken bildirilmesi gerekir, aksi takdirde bu tür sınıflar için nesne otomatik yüklemenin desteklenmesi gerekir.”

Bir saldırgan, kendi seçtiği seri hale getirilmiş bir nesneyi içerecek bir girişi yükleyebilir (enjekte edebilirse), potansiyel olarak rastgele kod çalıştırabilir veya web sitesinin güvenliğini tehlikeye atabilir. Yukarıda belirtildiği gibi, bu tür güvenlik açıkları genellikle kullanıcı girdilerinin yeterince temizlenmemesinden kaynaklanmaktadır. Sterilizasyon, yalnızca beklenen giriş türlerine izin verilmesi ve güvenli olmayan girişlerin reddedilmesi ve engellenmesi için giriş verilerinin incelenmesine yönelik standart bir işlemdir.

Better Search Change eklentisinde güvenlik açığı, arama ve değiştirme işlemleri sırasında seri durumdan çıkarma yöntemiyle ortaya çıktı. Bu senaryoda eksik olan kritik bir güvenlik özelliği, bir saldırganın bir nesne serileştirilmediğinde kötü amaçlı eylemleri tetiklemek için kullanabileceği bir dizi bağlantılı sınıf ve işlevden oluşan POP zinciriydi.

Better Search Change eklentisi böyle bir zincir içermese de, aynı web sitesine yüklenen başka bir eklenti veya temanın bir POP zinciri içermesi durumunda, bu durumun bir saldırganın saldırı başlatmasına izin verebileceği riski devam etti.

Wordfence güvenlik açığını şöyle açıklıyor:

“WordPress için Better Search Change eklentisi, güvenilmeyen girişin seri durumdan çıkarılması yoluyla 1.4.4 dahil olmak üzere tüm sürümlerde PHP Object Injection’a karşı savunmasızdır.
Bu, kimliği doğrulanmamış saldırganların bir PHP Nesnesi enjekte etmesini mümkün kılar.

Güvenlik açığı bulunan eklentide POP zinciri mevcut değil. Hedef sisteme yüklenen ek bir eklenti veya tema aracılığıyla bir POP zinciri mevcutsa, saldırganın rastgele dosyaları silmesine, hassas verileri almasına veya kod yürütmesine olanak tanıyabilir.”

Bu keşfe yanıt olarak WP Engine, sorunu derhal ele aldı. 18 Ocak 2024’te yayınlanan 1.4.5 sürümüne yönelik güncellemenin değişiklik günlüğü girişi, alınan önlemleri vurguluyor:

“Güvenlik: Arama ve değiştirme işlemleri sırasında bir nesnenin serileştirilmesi artık ‘allowed_classes’ => false değerini geçerek nesnenin başlatılmasını ve veritabanında depolanan kötü amaçlı kodu çalıştırma olasılığını ortadan kaldırır.”

Bu güncelleme, Wordfence’in 18 Aralık 2023’te güvenlik açığını sorumlu bir şekilde açıklamasının ardından geldi ve bunu WP Engine’in düzeltmeyi geliştirmesi ve test etmesi izledi.

Yanıt Olarak Ne Yapmalı?

Better Search Change eklentisinin kullanıcılarından, web sitelerini istenmeyen etkinliklerden korumak için derhal en son sürüme güncelleme yapmaları isteniyor.