Meta Description: Kelemahan Local Privilege Escalation dalam perisian Portmaster (Safing.io) melalui Unquoted Service Path pada servis portmastercore. Ini cerita penuh dari penemuan ini.
Tag: kelemahan, privilege escalation, unquoted service path, portmaster, safing, keselamatan windows, bug bounty, local privilege escalation, LPE, golang
Pengenalan
Beberapa bulan lepas, saya telah menggunakan perisian Portmaster - sebuah network monitor yang dibuat oleh Safing.io. Perisian ni sebenarnya bagus, fokus pada privasi pengguna. Tapi masa tengah tengok Windows services yang ia pasang, saya nampak sesuatu yang menarik: Unquoted Service Path dalam servis portmastercore. Konfigurasi silap ni biasa je dalam Windows, tapi impaknya besar - boleh naik taraf privilege sampai mendapat SYSTEM privilege.
Penemuan Teknikal
Masalah ni sebenarnya straightforward. Mana-mana Windows service yang ada ruang (space) dalam path executable dia kena letak dalam tanda quotes. Kalau tidak, Windows akan cuba resolve path tu dengan cara yang pelik - dia check setiap "perkataan" satu-satu sebagai kemungkinan lokasi executable sebelum sampai ke yang betul.
Contoh, kalau service path adalah:
C:\Program Files\Safing\Portmaster\portmastercore.exe
Windows akan cuba execute (ikut urutan):
C:\Program.exe C:\Program Files\Safing.exe C:\Program Files\Safing\Portmaster.exe C:\Program Files\Safing\Portmaster\portmastercore.exe
Yang pertama tu - C:\Program.exe - itulah targetnya. Kalau pengguna biasa (non-admin) boleh letak fail kat situ, Windows akan execute dia sebagai SYSTEM bila service restart.
Untuk buktikan benda ni, saya tulis program kecil dalam Golang - compile jadi Program.exe - yang akan jalankan arahan whoami dan simpan output dalam fail teks. Sebelah lagi, PowerShell loop keep reading whoami.txt tunggu output baru (macam program "tail" dalam Linux). Bila service restart, fail tu tunjukkan nt authority\system. SYSTEM access confirmed.
Demonstrasi video boleh tengok kat sini: https://www.youtube.com/watch?v=EXFd1D7ncjQ
Impak
Mana-mana pengguna tempatan pada mesin tu - termasuk akaun standard yang tak ada admin rights - boleh naik taraf privilege sampai SYSTEM dengan meletak executable jahat di path yang betul, lepas tu tunggu (atau trigger) service restart. Dalam persekitaran Windows yang ada ramai pengguna atau shared environment, ini adalah isu yang serius.
Disclosure
Lepas confirm bug ni, saya report terus kepada team Safing.io. Dorang respond cepat, acknowledge isu tersebut, dan sebagai penghargaan, saya telah diberikan hadiah bernilai RM1,500. Terima kasih kepada Safing.io kerana handle dengan professional.
Penutup
Unquoted Service Path ni dah lama diketahui sebagai salah satu kelemahan Windows tapi masih banyak perisian yang terlepas pandang benda ni. Setiap kali buat local privilege escalation assessment, memang wajib check. Guna tools macam wmic atau Get-UnquotedService dari PowerSploit untuk mudahkan carian. Teruskan curiosity, tapi buat dengan bertanggungjawab.