VMVare VCenter RCE (CVE-2021-21972) Analizi - SİBER GÜVENLİK EĞİTİMİ

NELER VAR

6 Mart 2021 Cumartesi

VMVare VCenter RCE (CVE-2021-21972) Analizi



Herkese merhaba. Bu yazımda geçtiğimiz haftalarda yayınlanan Vmware Vcenter RCE açığını keşfeden Mihail Klyuchnikov'un makalesini inceleyeceğim. Ayrıca çeşitli platformlarda nasıl yararlanılabileceğinden söz etmeye çalışacağım.

VCenter da keşfedilen bu zafiyet, yetkili olmayan istemcilerin rastgele komutlar yürütmesine ve çeşitli protokoller aracılığıyla hedeflenen sunucu adına istekler göndermesine izin vermektedir. Bu zafiyeti aşağıdaki CVE numaralarından da takip edebilirsiniz. 

  • Uzaktan kod yürütülmesine (RCE) yol açan yetkisiz dosya yükleme (CVE-2021-21972)
  • Yetkisiz sunucu tarafı istek sahteciliği (SSRF) güvenlik açıkları (CVE-2021-21973)
VMware vCenter / vSphere Nedir?

VMware, çeşitli yazılımlar ve özellikle sanallaştırma ürünlerini geliştiren bir yazılım şirketidir. VMware vSphere, bulut işletim sistemi veya sanallaştırılmış veri merkezi platformu olarak adlandırılır. IT departmanlarının uygulama iş yüklerini en uygun maliyetli bilgi işlem kaynağına verimli bir şekilde yerleştirilmelerini sağlar. vSphere iki temel bileşenden oluşur; VMvare ESXi ve VMware vCenter Server. 

vCenter'dan da kısaca bahsetmek gerekirse; vSphere Client'a benzer bir yazılımdır fakat vCenter Server, vSphere a göre daha güçlü ve performanslı bir sunucudur. vCenter, bir Windows Server ve Linux Server üzerine kurabilirsiniz. vCenter Server'ın ana amacı, sunucu üzerinde kurulu sanal makinelerin merkezi olarak yönetilmesini sağlamasıdır. 

Platformdan kısaca bahsettikten sonra güvenlik açığının keşif aşamalarına bir bakalım. 

Güvenlik Açığını Keşfetmek 

vSphere istemcisinin analizi sırasında keşfin sahibi Mihail blackbox yaklaşımı kullanmış. Bu yaklaşımda test edicinin elinde hiçbir bilgi bulunmamaktadır. 
Mihail, sunucu içerisine authenticate olmadan web paneli üzerinden çok sayıda burp üzerinden request göndererek url bilgilerini çekmektedir. Bu requestleri gönderirken içerisinde hiçbir cookie bilgisi eklemeden gönderip yetkisiz erişim denemesi gerçekleştirmiştir. Bunun sonucunda ise sunucudan "HTTP 200 OK!" yanıtını beklemektedir. Bu yanıt ile yetkisiz istek sonucunda herhangi bir kimlik doğrulaması yapmadan erişim yapılabileceği sonucuna varılabilir. 


Yukarıdaki görselde Burp Suite üzerinden gönderilen requesti ve dönen response u görebilirsiniz. Aslında requestte hangi endpointe authenticate olmadan erişebileceği sorgusunu göndermiştir. Görselde yer alan "JSESSIONID" ye bakıldığı zaman java ile ilgili bir zafiyetin olduğu anlaşılmaktadır. 

Web application'da bazı özellikler için genellikle ayrı ".jar" eklentileri kullanılmaktadır. Örneğin requestte yer alan "vropsluginui" eklentisi, vropslugin-service.jar dosyasında uygulanmaktadır. Requestte yer alan bu eklenti, yetkisiz kullanıcıların, herhangi bir URL'ye erişmesine izin verecek şekilde yapılandırılmıştır.  


Yukarıda yer alan görsel kodun savunmasız kısmıdır. Yetkisiz erişimin ardından bu request'e "uploadOvaFile" parametresi eklenerek Post isteği atılmıştır. İsteğin ardından unauthenticate olan erişimle web ui üzerinden Ova dosyasını yüklemeyi sağlayan özellik ile karşılaşılmıştır. Bu kodları incelediğimizde uploadovafile içerisindeki parametre boş değilse input streami okuyup alınan dosyasının tar işlemine sokulduğu ve alınan "entry_name" in "/tmp/unicorn_ova_dir" altındaki pathte dosyanın oluştuğu görülmektedir. Buradan sunucu içerisinde istediğimiz alana dosyaları yazabileceğimiz anlamına gelmektedir. Aslında sunucu üzerinde rastgele komut çalıştırabileceğimiz alana çok yaklaştığımızı anlıyoruz :) 

Mihail bu tuhaflıktan yararlanarak bir ".tar" arşivi oluşturmak için evilarc programından yararlanmış. 


Evilarc scriptini incelediğiniz zaman -d parametresinin 2 dizin öncesi anlamına geldiğini görebilirsiniz. Yani -d 2 dediğimiz zaman "..\..\" anlayabiliriz. Burada "C:\" kök dizini içerisine "testFolder" dosyası oluşturarak bu dizin altında "testUpload.txt" oluşturulmak istenmiştir. 


POST metodu ile sunucuya URL içerisine yerleştirilerek istek gönderilmiştir. 

Görüldüğü gibi C: kök dizini altında "testFolder" dosyası içerisinde txt dosyası oluşturulmuştur. Bu da artık istenilen her dosyayı, programı sunucu üzerine yükleyebileceğimizi göstermektedir. 

Windows'ta RCE Alma 

Bir hedef sistemde RCE komutları çalıştırabilmek için yetkisiz erişilebilecek bir .jsp kabuğu yüklememiz gerekmektedir. Keşfedilen java açığını kullanabilmek için Windows tarafında ".jsp" dosyasına ihtiyaç bulunmaktadır. Bu jsp ile sunucu içerisinde web shell alma, meterpreter alma gibi işlemleri gerçekleştirebiliriz. 

Yüklenilen dosyanın sahipliğine bakıldığında sahibinin "vsphere-ui" kullanıcısı olduğu görülmektedir. Mihail daha sonra ".jsp" dosyalarını çalıştırabileceği daha etkin bir alan aradığında "C:\ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport" dizini içerisinde .jsp dosyaları olduğunu keşfediyor.


Tam olarak /statsreport/ dizini içerisine yetkisiz erişim kontrolü yapmaktadır. Bu dosyanında yazma işlemi başarılı olmaktadır. Başarılı olduğunu "HTTP/1.1 200" response undan anlayabiliriz. 

vphere-ui kullanıcısının bu path içerisindeki izinlerine bakıldığında hem okuma hem de yazma yetkisinin bulunduğu görülmektedir. Harika! Artık bu pathe .jsp uzantılı bir dosya yüklenebilir. Daha öncede söylediğim gibi bu .jsp dosyası içerisinde web shell, meterpreter shell gibi birçok shell alabiliriz. 

Hazırlanan "testRCE.jsp" uzantılı dosya evilarc scripti aracılığı ile URL e eklenmektedir. POST ile sunucu üzerine yüklendikten sonra remote code execution olup olmadığına bir bakalım. 


.jsp betiği sunucuya yüklendi ve bize sistem üzerinde NT AUTHORITY\SYSTEM ayrıcalıklarıyla rastgele komut yürütme fırsatı oluşturmuştur. 

Linux'ta RCE Almak 

Linux örnekleri için işler biraz daha farklıdır. Fakat Windows'ta olduğu gibi Linux'ta bu durum için savunmasızdır. Mihail Linux üzerinde .jsp ile çalıştırmaya izin verecek herhangi bir dizin bulamamış. Bunun yerine farklı bir yöntem izlemiştir. Windows üzerinde path üzerinde bir dosya oluşturduğumuzda dosyanın sahibinin "vsphere-ui" isimli bir kullanıcıya ait olduğunu keşfetmiştik. Bu kullanıcının haklarıyla rastgele dosyalar yükleneceği de bilinmektedir. Linux sunucusu için öncelikle bir nmap taraması gerçekleştirilmiş. 


Nmap sorgusu sonucunda SSH portunun sunucu üzerinde açık olduğu görülmüştür. İzlenecek yöntemi az çok şuan da tahmin edebiliyorsunuzdur. Bu port üzerinden erişimine sahip olduğumuz kullanıcı ile giriş yapılacaktır. Bunun için kullanıcının ana dizinine bir genel anahtar verilerek SSH aracılığı ile bağlanma işlemi denenmiştir. Öncelikle bir ssh key oluşturulmuştur. 


Daha sonra oluşturulan bu ssh key i ile yine evilarc.py scripti kullanılarak tar arşivi oluşturulmuştur. 

Ardından güvenlik açığı kullanılarak dosya sunucuya yüklenir ve hedef sunucuya SSH aracılığı ile bağlanmaya çalışılır. 


Ve sonuç başarılı. Vsphere-ui kullanıcısının haklarıyla sunucuya artık erişim bulunmaktadır. 

SONUÇ 

Bu makalede, kimliği doğrulanmamış bir kullanıcı olarak VMware vSphere istemcisinde RCE elde etmenin bir yöntemi gösterilmiştir. Komut satırına erişmenin yanı sıra, bir saldırgan, "vrpsplugin" eklentsindeki kimlik doğrulama eksikliğinden dolayı başka kötü niyetli eylemlerde gerçekleştirebilir.

KAYNAKÇA

 

















Hiç yorum yok:

Yorum Gönder