Bilgi güvenliğinde çoğu zaman küçük görünen yanlış yapılandırmalar büyük güvenlik açıklarına yol açabilir. Windows işletim sistemlerinde sıkça rastlanan bu açıkların başında Unquoted Service Path (tırnak içine alınmamış servis yolu) zafiyeti gelir.
Bu açık saldırganlara yetkili kullanıcı veya servis hesaplarının haklarını ele geçirme fırsatı sunabilir. Özellikle LocalSystem gibi yüksek ayrıcalıklara sahip servislerde görüldüğünde saldırganın sistem üzerinde tam kontrol elde etmesi mümkündür.
Bu nedenle unquoted service path güvenlik açığının tespiti ve düzeltilmesi siber güvenlik operasyonlarında kritik bir adımdır.
Unquoted Service Path Nedir?
Windows servisleri belirli bir çalıştırılabilir dosya yoluna bağlanır. Örneğin:
C:\Program Files\Example App\example.exe
Eğer bu yol tırnak işaretleri ile çevrelenmezse Windows servis çalıştırılırken boşluklu dizin adlarını yanlış yorumlayabilir.
Bunun sonucunda sistem gerçek dosya yerine aynı dizin seviyelerinde bulunan başka bir çalıştırılabilir dosyayı başlatabilir.
Riskli Senaryo
Yukarıdaki yolun tırnak içine alınmadığını varsayalım:
C:\Program Files\Example App\example.exe
Windows bu yolu işlerken şu dosyaları sırasıyla deneyecektir:
C:\Program.exe
C:\Program Files\Example.exe
C:\Program Files\Example App\example.exe
Eğer saldırgan C:\
dizinine Program.exe adında kötü amaçlı bir yazılım bırakabilirse, servis çalıştırıldığında bu dosya devreye girer.
Servis LocalSystem haklarıyla çalıştığı için, saldırgan sistemin yönetici yetkilerini ele geçirebilir.
PowerShell ile Zafiyetin Tespiti
Manuel olarak servis yollarını incelemek zahmetli bir süreçtir. Ancak PowerShell sistem yöneticilerine bu işlemi otomatikleştirmek için güçlü bir araç sunar.
Aşağıdaki komut tırnak işareti kullanılmamış LocalSystem hesabıyla çalışan ve potansiyel olarak riskli servisleri hızlıca listeler:
Get-WmiObject win32_service |
select Name,PathName,StartMode,StartName |
where {
$_.StartMode -ne "Disabled" -and
$_.StartName -eq "LocalSystem" -and
$_.PathName -notmatch "`"" -and
$_.PathName -notmatch "C:\\Windows"
} | Format-List

Komutun Detaylı Açıklaması
- Get-WmiObject win32_service → Sistem üzerindeki tüm servislerin detaylarını getirir.
- select Name,PathName,StartMode,StartName → Servisin adı, çalıştırma yolu, başlangıç modu ve hangi kullanıcı hesabı ile çalıştığı seçilir.
- StartMode -ne “Disabled” → Devre dışı bırakılmış servisler hariç tutulur.
- StartName -eq “LocalSystem” → Yalnızca LocalSystem haklarıyla çalışan servisler listelenir.
- PathName -notmatch “`” “ → Çalıştırma yolunda tırnak işareti olmayan servisler filtrelenir.
- PathName -notmatch “C:\Windows” → Windows’un kendi sistem servisleri dışarıda bırakılır.
Komut çalıştırıldığında yalnızca şüpheli servisler listelenir. Bu da sistem yöneticisinin odaklanmasını kolaylaştırır.
Çözüm ve Alınabilecek Önlemler
Unquoted Service Path zafiyetini gidermek için birkaç temel adım izlenebilir:
- Servis Yollarını Düzenleyin
- Yanlış:
C:\Program Files\Example App\example.exe
- Doğru:
"C:\Program Files\Example App\example.exe"
- Yanlış:
- Dosya ve Klasör İzinlerini Kısıtlayın
Servislerin çalıştığı dizinlere yalnızca gerekli kullanıcıların yazma izni olmalıdır. Özellikle kök dizinlere (C:\
) kullanıcıların dosya bırakma izni verilmemelidir. - Düzenli Olarak Taramalar Yapın
PowerShell betiği düzenli aralıklarla çalıştırılarak olası zafiyetler erken tespit edilmelidir. - Olay Günlüklerini İzleyin
Beklenmedik servis başlatma girişimlerini yakalamak için Windows Event Logs üzerinde alarm ve izleme mekanizmaları kurulmalıdır.
Unquoted service path zafiyeti küçük bir yapılandırma hatası gibi görünse de kritik güvenlik riskleri barındırır. Saldırganlara yüksek ayrıcalıklı yetkiler kazandırabilecek bu açık özellikle kurumsal ortamlarda göz ardı edilmemelidir. PowerShell sayesinde bu tür servislerin hızlıca tespit edilmesi ve servis yollarının düzeltilmesi mümkündür. Düzenli tarama ve güvenlik politikalarıyla desteklendiğinde sistemler bu basit ama etkili saldırı yöntemine karşı korunabilir.