Apache Struts2 Zafiyeti (CVE-2017-5638)

Struts projesi 2000` li yılların başında java tabanlı web uygulamalarının geliştirilmesi için kullanılmıştır. Günümüzde ise Apache altında Jakarta projesinin altında gelişimine devam etmektedir.

Çalışma prensibi ise şemada kısaca özetlenmiştir.

Proje hakkında detaylı bilgi için, struts.apache.org adresine bakabilirsiniz.

08.03.2017 tarihinde ortaya çıkan zafiyette Apache Struts yapısının belli versiyonlarını kullanan web uygulamalarında RCE(Remote Code Execution) yani uzaktan kod çalıştırılmasına izin veren bir zafiyet tespit edilmiştir. Zafiyete CVE-2017-5638 kodu verilmiştir.

Zafiyetten etkilenen struts versiyonları;

Struts 2.3.5 – Struts 2.3.31
Struts 2.5 – Struts 2.5.10

Zafiyetin teknik detayları;

  • Struts kullanan web uygulamalarını bulmak için alttaki “google” dorkundan yardım alınabilir.

inurl:”struts” filetype:action

  • Zafiyet tetikleme kodunun internette farklı versiyonları bulunmaktadır.
  • Bizim test ortamımızda kullanacağımız koda github.com/joaomatosf/jexboss adresinden ulaşabilirsiniz.
  • Öncelikle kodumuzu test ortamımıza çekmek için;

git clone https://github.com/joaomatosf/jexboss.git

komutunu kullanıyoruz.

  • Kodu indirdiğimiz dizine geçiyoruz;

cd jexboss

  • Kodun çalışması için gerekli paketleri yüklüyoruz(gerekli paketler sistemimizde varsa ekran görüntüsündeki çıktıyı alabiliriz);

pip install -r requires.txt

  • Kodu çalıştırmak için alttaki komutundan yardım alabiliriz.

python jexboss.py -u [url] –struts2

Uygulamada zafiyet mevcutsa alttaki çıktıyı alırız ve bize devam edip etmeyeceğimizi sorgusu gelir.

  • YES komutu yardımı ile exploitation sürecinin tamamlanmasını sağlayabiliriz.

ve çıktıdan da görebileceğimiz gibi uygulama sunucumuzun kabuğuna erişmiş bulunmaktayız.

Testin sonucundan da anlaşılacağı gibi zafiyetin risk seviyesi oldukça yüksek. Kütüphaneyi kullananların ayrım olmadan şirketler, üniversiteler hatta hükümet sitelerinde de bulunabildiğine ufak bir araştırma sonucu ulaşılabilir.

Çözüm Önerisi:

Zafiyetten etkilenmemek için Strust’ ın güncel sürümüne yükseltmemiz gerekmektedir. 2.5.10.1 güncellemesiyle zafiyet kapatılmıştır.

Detaylar için: http://struts.apache.org/docs/version-notes-25101.html