BlogEngine 1.3 Kritik Açık ve Çözümü

by Murat Duman 16. Nisan 2008 23:11

BlogEngine 1.3.1.0 ve 1.3.0.29 sürümlerinden düşük sürümler kullanan BlogEngine kurulu site sahiplerini etkileyen ciddi bir açık yakın zamanda açıklandı. Çözüm için http://codeplex.com/blogengine sayfasından 1.3.1 güncel sürümünü indirebilir ya da son sürümleri kendiniz derliyorsanız şu değişiklikleri gerekli dosyalarda yapabilirsiniz.

Not: Aşağıda anlatılanlar bilgilendirme amaçlıdır. Anlatılanların uygulanmasından dolayı oluşan sonuçlar bu yazının yazarının sorumluluğunda değildir.

Öncelikle BlogEngine.Core.dll'i oluşturan BlogEngine.Core projesinin altında  "\Web\HttpHandlers\JavaScriptHandler.cs" dosyasında bulunan RetrieveLocalScript metodunu sadece javascript uzantılı dosyalara ulaşacak şekilde değiştirmeniz gerekiyor.

Açığın bulunduğu kod parçası:

[code=csharp]/// <summary>
/// Retrieves the local script from the disk
/// </summary>
  private static string RetrieveLocalScript(string file)
  {
   string path = HttpContext.Current.Server.MapPath(file);
   string script = null;

   if (File.Exists(path))
   {
    using (StreamReader reader = new StreamReader(path))
    {
     script = reader.ReadToEnd();
     script = StripWhitespace(script);
     HttpContext.Current.Cache.Insert(file, script, new CacheDependency(path));
    }
   }

   return script;
  }[/code]

Açık kapatılmış hali:

/// <summary>
  /// Retrieves the local script from the disk
  /// </summary>
  private static string RetrieveLocalScript(string file)
  {
   if (!file.EndsWith(".js", StringComparison.OrdinalIgnoreCase))
   {
    throw new System.Security.SecurityException("No access");
   }

   string path = HttpContext.Current.Server.MapPath(file);
   string script = null;

   if (File.Exists(path))
   {
    using (StreamReader reader = new StreamReader(path))
    {
     script = reader.ReadToEnd();
     script = StripWhitespace(script);
     HttpContext.Current.Cache.Insert(file, script, new CacheDependency(path));
    }
   }

   return script;
  }

Yukarıda görüldüğü gibi öncesinde bu metod sizin belirttiğiniz sitenizdeki tüm dosyaları geri getirecek şekilde çalışıyordu. Daha açık konuşmak gerekirse http://www.muratduman.net/js.axd?path=web.config şeklindeki bir adresi tarayıcınıza yazdığınızda size geri dönen js.axd dosyasını kaydedip içine baktığınızda sitedeki web.config dosyasını görebilirdiniz (Şu an benim sitemdeki açık kapatılmış durumda). Bunun üzerine gidip http://www.muratduman.net/js.axd?path=App_data/users.xml şeklinde bir adres yazıp salt metin olarak kaydedilmiş olan tüm şifreleri de almanız söz konusu.

Ayrıca search.aspx sayfasında da sonuçlar QueryString'den Encode edilmeden alınıyordu.

 <input type="text" name="q" id="q" value="<%=Request.QueryString["q"] %>" onkeypress="if(event.keyCode==13) SearchPage()" />

Bu bölüme de uygulanabilecek bir enjeksiyon ile site üzerinde istediğiniz işlemi yapmanız mümkün. Düzeltmek için ise kök (root) dizinde bulunan search.aspx sayfasındaki yukarıdaki kısmı bulup aşağıdaki HtmlEncode edilmiş şekli ile değiştirmeniz gerekiyor. (1.3.1.0 ve 1.3.0.29 ve üzeri sürümlerde açık kapatılmış durumda) 

<input type="text" name="q" id="q" value="<%=Server.HtmlEncode(Request.QueryString["q"]) %>" onkeypress="if(event.keyCode==13) SearchPage()" />

BlogEngine kullanan arkadaşlar lütfen bu açıkları en kısa zamanda kapatalım ve bloglarımızı yeni sürümlerine yükseltelim. Sitelerimizden diğer BlogEngine sahiplerine de duyurmaya özen gösterelim. Şifrelerimizi de kısa aralıklarla değiştirmeyi unutmayalım.

P.S: Uzun bir aradan sonra yazılarıma ve blog'uma tekrar geri döndüm. Kritik birşeyler gerekiyormuş demek ki :)

Duyurular için öncelikle Burak Sarıca başta olmak üzere Berk Gürakan ve Ali Rıza Babaoğlan'a teşekkürler.

Yorumlar

Yorum ekle


(Gravatar simgesini gösterecek)

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading



Powered by BlogEngine.NET 1.4.5.7
Theme by Mads Kristensen

Yazar Hakkında

Murat Duman, muratduman, blog author, seo optimized Murat Duman

E-posta Send mail

Son Yorumlar

Yorum RSS comment

Yasal Uyarı

Bu sitede sunulan tüm bilgi, dökümanların kullanımından doğacak sorunlardan yazar sorumlu tutulamaz. Bu site ve günce(blog) işverenimin görüşlerini, amaçlarını, planlarını veya stratejilerini temsil etmez. Tüm yazılanlar aksi belirtilmedikçe benim fikrimdir. Uygunsuz yorumlar silinecektir.

Copyright 2008 © Murat Duman