Schneider Electric Remote Code Execution
Schneider Electric Remote Code Execution (CVE-2023-3001)⌗
Schneider Electric’in IGSS (Intelligent Graphical Scada System) yazilimi, endustriyel otomasyon ve kontrol sistemleri icin kullanilan bir SCADA (Supervisory Control and Data Acquisition) platformudur.
Schneider Electric Dashboard⌗
Ilk once IGSS’nin kendi processine bakiyorum IGSSMaster.exe
dnspy ile biraz baktiktan sonra diger modullerine bakiyorum alarm
,dashboard
,job scheduler
,maintenance
vs…
Dashboard.exe!⌗
Bu exeyi biraz inceledigimde IGSS’nin .DASH
adinda proje dosyasini editleme, yeniden olusturma, varolan bir dash dosyasini acma gibi ozellikleri var. Burada dikkat ceken yerler save ve load methodlaridir;
Save
Methodu⌗
Save methodu neler yapiyor, disardan aldigi name parametresi pathFromName fonksiyonu ile kontrol ediyor, pathFromName fonksiyonu da Path.GetExtension’a soruyor Path.GetExtension’ fonksiyonu mscorlib dllinde System.IO namespace’nin bir fonksiyonudur bu fonksiyonda verdigimiz verinin dosya uzantisini cikartiyor ornek olarak abc.txt => .txt
gibi.
Tekrar pathFromName’e geri donelim verdigimiz verinin uzantisini kontrol ediyor verilen degerin uzantisi bossa direk .DASH olmaktadir.
string text = this.pathFromName(name);
public string pathFromName(string name)
{
string extension = Path.GetExtension(name);
if (extension == null || extension == string.Empty)
{
name += ".DASH";
}
return Path.Combine(DashFiles.getDashTempPath(), name);
}
- name parametresini pathFromName fonksiyonuna atiyor.
- name parametresi ile verileni
File.OpenWrite
yardimi ile aciyor. - Serialize ediyor.
SoapFormatter, .NET Framework icerisinde yer alan bir serilestirme aracidir. Bu arac, nesneleri SOAP (Simple Object Access Protocol) formatinda serilestirip yani bir dizi byte donusturup depolamak veya ag uzerinden iletmek icin kullanilir. SoapFormatter, genellikle uzaktan prosedur cagri RPC ve web servisleri ile etkilesimde bulunmak icin kullanilir.
Load
Methodu⌗
WidgetContainer
nesnesini null olarak tanimliyor.CGetGenFileData
sinifindan bir nesne olusturuluyorm_conf.getGenFileDataSource
methodu, gerekli ozelliklere gore veri kaynagi sagliyor.genFileDataSource.getGenFile
name parametresinden aldigi .DASH uzantisi eklenerek olusturulan dosya adini temp file yolunu kullanarak dosyayi alir.- Catch icerigini es geciyorum.
name
parametresini aliyor save methodundaki gibi kontrol vs.- Eger dosya varsa dosyayi okuyor.
- Deserialize ediyor.
Bizim icin en onemli madde 7. maddedir, ozet olarak bir dosyayi aliyor kayit ediyor, duzenliyor, aciyor bunlari yaparken serialize ve deserialize islemi gerceklestiriyor.
Exploit7 Bolumu⌗
SoapFormatter ile cmd.exe /c calc.exe
calistiracagimiz gadgeti olusturuyoruz ve sonuc…