Skip to content

Instantly share code, notes, and snippets.

@bizouarn
Last active March 13, 2024 22:28
Show Gist options
  • Save bizouarn/2e237510bb50fb5dc9c8e433548cb6ed to your computer and use it in GitHub Desktop.
Save bizouarn/2e237510bb50fb5dc9c8e433548cb6ed to your computer and use it in GitHub Desktop.
La faille de sécurité "Unquoted Service Path" (Windows)

Faille de Sécurité : Unquoted Service Path

Introduction

La faille de sécurité "Unquoted Service Path" est une vulnérabilité potentiellement critique qui peut affecter les systèmes d'exploitation Windows. Cette vulnérabilité résulte d'une mauvaise gestion des chemins d'accès des services installés sur le système, où le chemin d'accès d'un service ne serait pas correctement délimité par des guillemets lorsqu'il contient des espaces. Les attaquants peuvent exploiter cette faille pour exécuter du code malveillant avec des privilèges élevés, compromettant ainsi la sécurité du système.

Comment fonctionne la faille

Lorsqu'un service est installé sur un système Windows, son chemin d'accès est généralement enregistré dans la base de registre. Si ce chemin d'accès comporte des espaces et n'est pas encadré par des guillemets, le système peut interpréter incorrectement le chemin et créer une opportunité pour une attaque.

Par exemple, considérons un chemin d'accès non sécurisé pour un service installé :

C:\Program Files\Mon Service\service.exe

Dans ce cas, la faille de sécurité "Unquoted Service Path" devient une opportunité pour un attaquant. En exploitant cette vulnérabilité, l'attaquant peut injecter du code malveillant dans le système. En plaçant, par exemple, un exécutable à un emplacement comme :

C:\Program Files\Mon.exe

Ce nouvel exécutable sera alors exécuté à la place du service prévu, ouvrant ainsi la voie à l'exécution de code malveillant. Les conséquences peuvent être graves, incluant une élévation de privilèges non autorisée ou même l'installation discrète d'une porte dérobée (backdoor). Ces actions compromettent la sécurité du système, exposant les données sensibles et mettant en péril l'intégrité du système.

Mesures de prévention

  1. Correction des chemins d'accès

Assurez-vous que tous les chemins d'accès des services installés sur le système sont correctement encadrés par des guillemets, surtout s'ils contiennent des espaces. Modifiez manuellement les chemins d'accès incorrects dans la base de registre.

Exemple corrigé :

"C:\Program Files\Mon Service\service.exe"
  1. Utilisation de noms de chemins sans espaces

Privilégiez l'utilisation de noms de chemins sans espaces pour les services installés. Cela élimine la possibilité d'exploitation de cette faille.

  1. Mises à jour régulières

Assurez-vous que votre système d'exploitation et tous les logiciels tiers sont à jour. Les fournisseurs de logiciels publient fréquemment des correctifs de sécurité qui peuvent résoudre de telles vulnérabilités.

  1. Analyse de sécurité régulière

Effectuez des analyses de sécurité régulières pour détecter les vulnérabilités potentielles dans le système. Utilisez des outils de sécurité appropriés pour identifier et corriger les failles de manière proactive.

Comment detecter les services vulnérable

Pour détecter les services potentiellement vulnérable. On peut taper la commande.

wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v """

Conclusion

La faille de sécurité "Unquoted Service Path" peut avoir des conséquences graves si elle est exploitée par des attaquants. En suivant les mesures de prévention mentionnées ci-dessus, vous renforcez la sécurité de votre système en réduisant les risques associés à cette vulnérabilité.

Script de correction automatique powershell

param([switch]$Elevated)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition

function Test-Admin {
  $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false) {
  if ($elevated) {
    # tried to elevate, did not work, aborting
  } else {
    Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
  }
  exit
}

# Obtenir la liste des services avec des chemins non encadrés par des guillemets
$services = Get-WmiObject Win32_Service | Where-Object { $_.StartMode -eq 'Auto' -and $_.PathName -notmatch '^".*"' -and $_.PathName -notlike 'C:\Windows\*' }

foreach ($service in $services) {
    try {
        # Mettre à jour le chemin d'accès binaire du service avec des guillemets
        $newPath = "`"$($service.PathName)`""
        Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$($service.Name)" -Name ImagePath -Value $newPath

        Write-Host "Service $($service.Name) mis à jour avec succès."
    } catch {
        Write-Host "Erreur lors de la mise à jour du service $($service.Name): $_"
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment