Kayıt Ol

Giriş

Şifremi Kaybettim

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Giriş

Kayıt Ol

Canyoupwn.me ~

TR | Misfortune Cookie (CVE-2014-9222) Analizi

cm

Bu yazımızda sizlerle etki alanı oldukça geniş olan ve yüksek risk içeren bir zafiyeti inceleyeceğiz. Misfortune Cookie olarak adlandırılan zafiyet routerlarda web arayüzü sunmak için kullanılan Allegro Rompager adlı gömülü web server uygulamasında bulunuyor. Bu yazılımın birçok marka/model routerda kullanılması zafiyetin etki alanını bir hayli genişletiyor. Zafiyet aracılığıyla saldıgan herhangi bir şifreye ihtiyaç duymadan router’ın web kontrol paneline erişim sağlayabiliyor. Bu da zafiyeti oldukça riskli bir hale getiriyor. Hadi incelemeye başlayalım.

NOT: Yazıda kullanılan kod parçaları ve görseller alıntıdır.

 

0x00: Zafiyet Tespiti

Zafiyetimizin istismar vektörü, adından da anlaşılacağı gibi, cookie verisi. Gelin önce sunucuya gönderilen cookie değerine bir bakalım.

req

Gönderilen cookie’nin formatı “CX=value” şeklinde. Bunun sebebini web server’ın cookie’yi parse eden kısmına bakınca daha iyi anlıyoruz.

 

Yukarıdaki MIPS Assembly kodlarını anlamakta sıkıntı çekiyorsanız (ben çektim) şu kaynaklara göz gezdirmenizi öneririm:

MIPS Quick Tutorial

MIPS Instruction Set

Burada yapılan işlemler özetle şu şekilde (“CX=value” formatını hatırlayın);

  • Ilk karakter ‘C’ ye eşitmi?
  • Evet ise => “X=value” olan kısmı al
  • ‘=’ ayracı ile string’i iki kısıma ayır (“X” ve “value”)
  • *(0x6B28 + X*0x28) = value

 

Son adım bana biyerden tanıdık geliyor..

  • *(base_addr + i*sizeof(item)) = value

Bu pattern x86 mimarisinde de sıklıkla karşılaştığım dizi elemanlarına erişme pattern’i. (bkz: x86 Asm Cheat Sheet). Buradan anlaşılacağı üzere gönderdiğimiz cookie’ler, her elemanı 40 byte olan -nitekim cookie ile gönderilen değerimiz 40 karakter- bir dizide tutuluyor. Biz sunucuya “C0=blabla” şeklinde bir cookie gönderdiğimizde aslında cookie dizisinin 0. indexine “blabla” değerini yazmış oluyoruz. Uygulama girdiyi alırken herhangi bir sınır kontrolü yapmadığı içinde write-what-where durumu oluşuyor (yani istediğimiz adrese istediğimiz değeri yazabiliyoruz).

Zafiyeti tanımladığımıza göre şimdi istismarına geçelim.

 

0x10: Exploitation

ZynOS‘in zafiyeti istismar etmemizi kolaylaştıracak bir özelliği var; pswauthen. Komut arayüzünden bu komutu ‘0’ argümanıyla birlikte girdiğiniz takdirde geçici bir süre için web arayüzüne şifresiz erişim sağlayabiliyorsunuz. Komutun yaptığı şey ise belli bir adresteki flag değerini sıfıra eşitlemek. Daha sonradan Rompager bu adresteki değere bakıp 0’ı gördüğünde kullanıcıya şifresiz erişim sağlıyor. Bu da demek oluyor ki elimizdeki zafiyeti kullanarak bu adresin içerisini sıfırlayıp modem arayüzüne şifresiz şekilde erişebiliriz! Tek yapmamız gereken flag adresi ile dizinin adresi arasındaki farkı bulup 40’a bölmek ve bunu uygun cookie formatında yazıp request halinde sunucuya göndermek.

  • 0x8034FF94 – 0x804163D4 = 0xFFF39BC0
  • 0xFFF39BC0 / 0x28 = 0x0666171
  • 0x06661718 = 107353880 (indis karşılığı)

Göndermemiz gereken cookie değeri: “C107353880=\0”

Cookie değeri null-byte içereceğinden request’i netcat ile göndermeniz gerekir.

aaasss

Böylece zafiyetimizi istismar etmiş olduk.

Bu zafiyeti kullanan bir malware salgını hakkında yazdığım raporu buradan okuyabilirsiniz.

 

Kaynakça:
  1. http://mis.fortunecook.ie/
  2. http://mis.fortunecook.ie/too-many-cooks-exploiting-tr069_tal-oppenheim_31c3.pdf
  3. http://cawanblog.blogspot.com.tr/2015/02/misfortune-cookie-cve-2014-9222.html

Hakkında CanYouPwnMe

Hero!

Beni Takip Et