Unquoted Service Path Vulnerability in the "Portmastercore" Service Lead to LPE


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.