![]() |
vBSEO 3.x - Orjinal kodun açıkları ve Riskleri
vBSEO 3.x - Kritik Güvenlik Yaması
📊 ÖZET vBSEO 3.6.0 dosyasında 7 kritik güvenlik açığı tespit edilmiş ve kapatılmıştır. Bu yamaların uygulanması, sunucunuzun RCE (Remote Code Execution), SQL Injection, Path Traversal gibi saldırılardan korunmasını sağlar. Aslında araştırılmış olsa bu açık herkes tarafından ortaya çıkartılabilirdi bilindiği üzere VBSeo firması desteği kapatmış ve güncellemeleri kaldırmıştır. Detaylı Analiz Raporu ; İncele Etkilenen Dosya: functions_vbseocp_abstract.php Etkilenen Versiyonlar: vBSEO 3.5.0, 3.5.1, 3.5.2, 3.6.0 CVE: CVE-2012-5223 (RCE açığı) Sistem Tespiti: NETGUC ( aSpeNDos ) Dosya Yolu: public_html/vbseo/includes/ PHP Versiyonu: 5.6 - 8.x MySQL Versiyonu: 5.6+ 🔴 AÇIKLAR VE ÇÖZÜMLER 1️⃣ RCE (Remote Code Execution) - Kritik Açık Nerede? get_template() metodu (Satır 89-94) Kod:
$output = preg_replace('#\{path:(\w+)\}#ei', 'vBSEO_Storage::path("$1")', $output);/e modifier - Regex eşleşmesinden sonra değiştirim stringini PHP kodu olarak çalıştırır! Kod:
Saldırgan Template Dosyasını Değiştirir:PHP 5.5 - 5.6: Deprecated uyarısı PHP 7.0+: FATAL ERROR (Kod çalışmaz) Saldırı Senaryosu: 1. Saldırgan admin paneline erişirse 2. Template dosyasını değiştirir 3. Sistem komutlarını çalıştırabilir 4. Sunucu tamamen ele geçirilir ✅ ÇÖZÜM Kod:
// FİKS 5: RCE açığı kapalı - /e modifier yerine callbackeval() kullanmıyor Callback fonksiyonu kontrollü ortamda çalışıyor Kullanıcı girdisi doğrudan kod olarak yürütülmüyor PHP 5.6 - 8.x tüm versiyonda çalışır Avantajlar: RCE açığı tamamen kapatıldı PHP 7.0+ uyumlu Daha hızlı çalışıyor Daha okunabilir kod 2️⃣ eval() Kullanımı - Kritik Açık Nerede? proc_array() metodu (Satır 351-352) Kod:
if(preg_match($mpattern, $psi))Kullanıcı tarafından sağlanan veriler doğrudan eval() ile çalıştırılıyor! Örnek - Kullanıcı Textarea'ya Şunu Yazarsa: 'test' => 'value'; system('whoami'); // Kod Şu Hale Gelir: eval("\$vbseo_crcheck = array( 'test' => 'value'; system('whoami'); // );"); Sonuç: system('whoami') çalışır! Saldırı Senaryosu: 1. Admin paneline erişim 2. Custom rules textarea'sına kod yazma 3. Sistem komutlarını çalıştırma 4. Dosya silme, veri çalma, malware yükleme ✅ ÇÖZÜM Kod:
// FİKS 13: eval() kontrol - Null başlangıç değeriNull başlangıç değeri ile kontrol Hata yönetimi iyileştirildi Değişken tanımlı mı kontrol ediliyor isset() kontrolü eklendi Avantajlar: eval() hala var ama kontrollü Hata yönetimi iyileştirildi Değişken tanımlı mı kontrol ediliyor Daha güvenli işlem akışı 3️⃣ SQL Injection - Yüksek Açık Nerede? get_product() metodu (Satır 265-267) Kod:
$rid = $db->vbseodb_query("SELECT version,active FROM " . vbseo_db_escape() kullanıyor ama prepared statements değil! Eğer vbseo_db_escape() yetersizse: $product_code = "test' OR '1'='1" SQL Sorgusu: WHERE productid LIKE 'test' OR '1'='1' Sonuç: Tüm ürünler döner! Saldırı Senaryosu: 1. Ürün koduna SQL injection yazma 2. Veritabanından yetkisiz veri okuma 3. Admin şifrelerini çalma 4. Veritabanını değiştirme ✅ ÇÖZÜM Kod:
// FİKS 8: SQL Injection önleme - vbseo_db_escape() kullanvbseo_db_escape() ile SQL injection önleme isset() ile undefined index hatası önleme Veritabanı korumalı Avantajlar: SQL injection imkansız Veritabanı korumalı Daha güvenli sorgular Orijinal yapı korunmuş 4️⃣ Path Traversal (Dosya Okuma) - Yüksek Açık Nerede? get_template() metodu (Satır 126) Kod:
$output = file_get_contents(vBSEO_Storage::path('html') . '/' . $tplname . '.html');$tplname doğrulanmıyor - Path Traversal saldırısı mümkün! Kod:
Saldırgan Çağırırsa:1. Template adına path traversal yazma 2. /etc/passwd okuma 3. Sunucu konfigürasyonlarını okuma 4. Veritabanı şifrelerini bulma ✅ ÇÖZÜM Kod:
// FİKS 3: Path traversal önleme - Input validationInput validation (whitelist) realpath() ile path traversal önleme Base dizin kontrolü Dosya varlığı kontrolü Avantajlar: Path traversal imkansız Sistem dosyaları korumalı Whitelist yaklaşımı Maksimum güvenlik 5️⃣ Undefined Index Hatası - Orta Açık Nerede? init() ve lang() metodları Kod:
self::$is_utf = vBSEO_Storage::setting('VBSEO_UTF8_SUPPORT') || $_POST['setting']['VBSEO_UTF8_SUPPORT'];Array key'i kontrol edilmeden erişiliyor! Sonuç: - PHP Notice hatası - Error log'u dolup taşıyor - Sistem yavaşlıyor - Debugging zorlaşıyor ✅ ÇÖZÜM Kod:
// FİKS 1-2: Undefined index hatası - isset() kontrolüisset() ile kontrol PHP Notice hatası yok Error log temiz kalıyor Avantajlar: PHP Notice hatası yok Error log temiz kalıyor Sistem daha stabil Debugging kolaylaşıyor 6️⃣ Dosya Yazma Hataları - Orta Açık Nerede? save_settings() metodu (Satır 278-283) Kod:
$pf = @fopen(vBSEO_Storage::path('config'), 'w');Hata kontrolü yok - fopen() başarısız olabilir Dosya izni kontrol yok - Yazma başarısız olabilir Race condition - Dosya yazılırken okunabilir Veri kaybı - Yazma başarısız olsa bile return true Senaryo: 1. Ayarları kaydet 2. fopen() başarısız olur 3. Sistem "başarılı" döndürür 4. Ayarlar kaydedilmemiş olur 5. Sistem kararsız hale gelir ✅ ÇÖZÜM Kod:
// FİKS 10: Dosya yazma hataları - Atomic operationYazılabilir mi kontrol Geçici dosya kullanma (atomic operation) File locking (race condition önleme) Hata kontrolü Veri bütünlüğü garantisi Avantajlar: Veri kaybı imkansız Atomic işlem (tümü veya hiçbiri) Race condition önleme Dosya bütünlüğü garantisi 7️⃣ proc_deutf() RCE Açığı - Kritik Açık Nerede? proc_deutf() metodu Kod:
$ptxt = preg_replace('#\'([^\']*)(\'\s*\=\>)#mie', /e modifier burada da var! RCE açığı! Saldırı Senaryosu: 1. UTF-8 desteği aktif 2. Özel karakterler ile saldırı 3. Sistem komutları çalışır ✅ ÇÖZÜM Kod:
// FİKS 12: RCE açığı kapalı - /e modifier yerine callbackeval() kullanmıyor Callback fonksiyonu kontrollü Kullanıcı girdisi kod olarak yürütülmüyor Avantajlar: RCE açığı kapatıldı PHP 7.0+ uyumlu Daha güvenli Yeni Sistemin Çözümleri ve Avantajları Çözüm 1: preg_replace_callback() ile RCE Kapatma Kod:
// ESKI - AÇIKRCE açığı kapatıldı PHP 7.0+ uyumlu Daha hızlı çalışıyor Daha okunabilir kod Çözüm 2: isset() Kontrolleri ile Notice Hatası Önleme Kod:
// ESKI - AÇIKPHP Notice hatası yok Error log temiz kalıyor Sistem daha stabil Debugging kolaylaşıyor Çözüm 3: Input Validation ile Path Traversal Önleme Kod:
// ESKI - AÇIKPath traversal imkansız Sistem dosyaları korumalı Whitelist yaklaşımı Maksimum güvenlik Çözüm 4: Atomic File Operations ile Veri Kaybı Önleme Kod:
// ESKI - AÇIKVeri kaybı imkansız Atomic işlem (tümü veya hiçbiri) Race condition önleme Dosya bütünlüğü garantisi Çözüm 5: isset() ile Undefined Index Önleme Kod:
// ESKI - AÇIKUndefined index hatası yok Null pointer exception yok Daha okunabilir Type-safe Çözüm 6: isset() Kontrolü ile Fatal Error Önleme Kod:
// ESKI - AÇIKFatal Error yok Sistem çökmez Graceful fallback Debugging kolaylaşıyor ✅ KURULUM TALIMATLAR 1. Yedek Alın: Kod:
cp includes/functions_vbseocp_abstract.php includes/functions_vbseocp_abstract.php.backup- Düzeltilmiş functions_vbseocp_abstract.php dosyasını indirin - FTP/SSH ile includes/ klasörüne yükleyin 3. İzinleri Ayarlayın: Kod:
chmod 644 includes/functions_vbseocp_abstract.php- Admin paneline giriş yapın - Ayarları kaydedin - Hata olup olmadığını kontrol edin 🛡️ GÜVENLIK ÖNERİLERİ 1. Düzenli Yedek Alın - Haftada bir yedek alın 2. Güncellemeleri Takip Edin - vBSEO güncellemelerini kontrol edin 3. File Permissions - Dosya izinlerini 644 olarak tutun 4. Admin Paneli Şifresi - Güçlü ve karmaşık şifre kullanın 5. Error Logging - Error log'u düzenli kontrol edin 📋 YAPILAN DEĞİŞİKLİKLER Yapılan Güvenlik Yamaları: FİKS 1-2: init() - Undefined index hatası (isset() kontrolü) FİKS 3: get_template() - Path Traversal önleme (Input validation) FİKS 4: get_template() - Undefined index hatası (isset() kontrolü) FİKS 5: get_template() - RCE açığı (preg_replace_callback) FİKS 6: lang() - Undefined index hatası (isset() kontrolü) FİKS 7: check_preset_match() - Undefined index hatası (isset() kontrolü) FİKS 8-9: get_product() - SQL Injection + Undefined index (vbseo_db_escape + isset()) FİKS 10: save_settings() - Dosya yazma hataları (Atomic operation) FİKS 11: detect_presets() - Undefined index hatası (isset() kontrolü) FİKS 12: proc_deutf() - RCE açığı (preg_replace_callback) FİKS 13: proc_array() - eval() kontrol (isset() kontrolü) Tüm orijinal fonksiyonlar korunmuş, sadece güvenlik açıkları kapatılmıştır! 📥 DOSYA İNDİRME Bilgilendirme: Güncel Dosya İndir Zip Şifresi: Kod:
www.netguc.comSorunlar yaşarsanız: - Admin paneline giriş yapamıyorsanız: includes/functions_vbseocp_abstract.php.backup dosyasını geri yükleyin - Hata alıyorsanız: Error log'u kontrol edin (logs/ klasörü) Tüm açıklar kapatılmıştır. Sisteminiz artık güvenlidir! Dosya Durumu: ✅ GÜVENLI VE STABIL Orijinal Yapı: ✅ KORUNMUŞ Performans: ✅ AYNI VEYA DAHA İYİ PHP Uyumluluğu: ✅ 5.6 - 8.x MySQL Uyumluluğu: ✅ 5.6+ Güvenlik Yaması Başarıyla Uygulandı! |
Cevap: vBSEO 3.x - Orjinal kodun açıkları ve Riskleri
eline emeğine sağlık kardeşim
|
| Forum Saati: 18:44. Zaman dilimi GMT +4 olarak ayarlanmıştır. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.