Kategoriler
web-application

CWE-77: Command Injection

CWE-77: Command Injection Nedir?


CWE-77: Command Injection; en tehlikeli web güvenlik açıklarından biridir. Birçok güvenlik testçisi ve ödül avcısı, hedef uygulama üzerinde yaratabilecekleri etki nedeniyle CWE-77: Command Injection güvenlik açıklarını bulmayı hedefler.


Bu makalede sonunda komut enjeksiyonuna yol açabilecek çeşitli güvenlik açıklarına giriş ile birlikte komut enjeksiyonu güvenlik açıklarına genel bir bakış sağlayacaktır. CWE-77: Command Injection, saldırganların uygulamanın çalıştığı sunucuda rasgele işletim sistemi komutları yürütmesine olanak tanıyan bir tür web güvenlik açığıdır. Command Injection güvenlik açıkları, uygulamalar arka planda kabuk komutlarını çalıştıran kabuk komutlarını veya komut dosyalarını kullandığında ortaya çıkar.


Kullanıcı girdisinin base64 kodlamasını gerçekleştiren bir uygulamanın aşağıdaki URL’sini ele alalım.
http://ornek.com/encode.php?text= helloworld
Bu kullanıcı girişi, encode.php dosyasına bir get parametresi olarak aktarılır .


Aşağıdakiler encode.php’nin kaynak kodudur:


<? php
$ input = $ _ GET [‘metin’];
system (“echo -n”. $ girdi . ”| base64 ″);
?>
Önceki kod parçacığından fark edebileceğimiz gibi, kullanıcı girdisi PHP’de işletim sistemi komutlarını yürütmek için kullanılan php system () işlevine aktarılır .
Bir kullanıcı girdiye bir sistem komutu eklerse, aşağıdaki gibi görünen bir işletim sistemi komutu olarak yürütülür:

http://ornek.com/encode.php?text= test; id
Kullanıcıya döndürülen yanıt şu şekildedir:
test: dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK
Gördüğümüz gibi, kelime testi kodlanmadı. Ancak yanıt olarak dönen uzun kodlanmış bir metin var. Bu metnin kodunu çözmek ise şu şekildedir.


$ echo -n “dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK” | base64 -d
uid = 33 (www-veri) gid = 33 (www-veri) grupları = 33 (www-veri)
Gördüğünüz gibi kodlanmış metin, uygulamaya geçirilen id komutunun çıktısıdır.


CWE-77: Command Injection Güvenlik Açıkları Neden Tehlikelidir?


Güvenlik açıklarının komut enjeksiyon sınıfı, en tehlikeli web güvenlik açıklarından biri olarak kabul edilir. Çünkü bir saldırgana temeldeki işletim sistemi üzerinde denetim verir. Bu kontrol, hedef sunucunun ağdaki diğer sistemlerle sahip olduğu güveni kullanarak dahili ağ üzerinden yanal hareket dahil olmak üzere birkaç farklı şekilde kullanılabilir.


CWE-77: Command Injection’a Neden Olabilecek Güvenlik Açıkları
Güvenlik açığı bulunan uygulama, son kullanıcının uygulamanın varsayılan işlevlerini genişletmesine ve sistem komutlarını yürütmesine izin verdiğinde komut yürütme güvenlik açıkları ortaya çıkarken, komutları uygulamanın kodu aracılığıyla yürütmek de mümkündür. Bu genellikle kod yürütme olarak bilinir. Bir kod yürütme güvenlik açığı olduğunda bile, nihai amaç, bunun aracılığıyla rastgele sistem komutları yürütmektir. Bunu göz önünde bulundurarak, komut enjeksiyonu veya kod yürütme yoluyla komut yürütmeye yol açabilecek bazı güvenlik açıklarından bahsedelim.

Aşağıda, sonunda komut yerleştirme saldırılarına yol açabilecek güvenlik açıklarından bazıları verilmiştir.
Keyfi komut enjeksiyonu: Önceki örneğimizde tartıştığımız gibi, uygulamaların doğrudan kullanıcıdan rastgele sistem komutları alan ve bunları temeldeki ana bilgisayarda yürüten uygulamalara sahip olması mümkündür. Bu, komut enjeksiyonu güvenlik açığının bir örneği olarak ifade edilebilir.


Keyfi dosya yüklemeleri: Uygulamalar kullanıcıların rastgele dosya uzantılarına sahip dosyaları yüklemelerine izin verdiğinde ve bu yüklenen dosyalar webroot’a yerleştirildiğinde komut enjeksiyonuna yol açmaktadır. Bu, web uygulamalarının komut enjeksiyonuna karşı savunmasız hale gelmesinin bir başka yaygın yoludur.
Güvenli olmayan serileştirme: Standart komut enjeksiyonu güvenlik açıklarının yanı sıra, güvenli olmayan seriyi kaldırma gibi diğer güvenlik açıkları kullanılarak keyfi komut yürütme de mümkün olabilir. Bu, sunucu tarafındaki kodun, kullanıcı tarafından geçirilen serileştirilmiş içeriği uygun şekilde doğrulamadan serileştirmesini kaldırması gerçeğinden yararlanır.

Bu genellikle güvenlik açıklarının güvenli olmayan serileştirme sınıfı olarak bilinmesine rağmen, hedef uygulama sınıf yolunda uygun araçların bulunması gibi belirli gereksinimleri karşıladığında, sonunda komut enjeksiyonuna yol açar.
Sunucu tarafı şablon enjeksiyonu: Web uygulamaları, dinamik HTML yanıtları oluşturmak için Jinja2 veya Twig gibi sunucu tarafı şablonlama teknolojilerini kullandığında, sunucu tarafı şablon enjeksiyonuna sahip olmak mümkündür. SSTI güvenlik açıkları, kullanıcı girişi bir şablona güvenli olmayan bir şekilde gömüldüğünde ortaya çıkar ve sunucuda uzaktan kod yürütülmesine neden olur.

XML

XML harici varlık enjeksiyonu: XML dış varlık güvenlik açığı, zayıf yapılandırılmış bir XML ayrıştırıcı kullanarak kullanıcı kontrollü XML girişini ayrıştıran uygulamalara karşı ortaya çıkan başka bir güvenlik açığı türüdür. XXE güvenlik açıkları genellikle sunucudan rastgele dosyaların okunmasına ve hizmet reddi saldırılarına neden olur.

Ancak, belirli koşullar karşılandığında sunucuda komut yürütülmesine de yol açabilirler. Örneğin, savunmasız hedef sunucuda PHP wait: // wrapper etkinleştirilirse, sunucuda rasgele komutlar çalıştırmak mümkündür.