chore(release): v0.7.8
Corrige l'ACL du service WireGuard (bouton "Configurer les permissions") qui n'était en réalité jamais posée : la SDDL était lue via Get-WmiObject.DACL.ToString(), qui ne produit pas de SDDL valide. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,13 @@ Ce projet suit le [Versionnage Sémantique](https://semver.org/lang/fr/).
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [0.7.8] — 2026-09-04
|
||||||
|
|
||||||
|
### Corrigé
|
||||||
|
- **ACL du service WireGuard jamais réellement posée par « Configurer les permissions ».** Le script PowerShell récupérait la SDDL actuelle via `Get-WmiObject ... .DACL.ToString()` — `.DACL` est un tableau d'objets PowerShell, pas une chaîne SDDL, donc `.ToString()` ne produisait pas la syntaxe attendue par `sc sdset`. L'échec n'était jamais vérifié : le bouton annonçait un succès alors que l'ACL n'était jamais appliquée, laissant l'installation/désinstallation du tunnel exiger une élévation en plus de celle (inévitable) du split-DNS — deux invites UAC au lieu d'une. Remplacé par `sc.exe sdshow` (format texte natif) avec insertion correcte de l'ACE et vérification explicite des codes de sortie (`sc sdset`, `Restart-Service`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [0.7.7] — 2026-09-04
|
## [0.7.7] — 2026-09-04
|
||||||
|
|
||||||
### Corrigé
|
### Corrigé
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
## ──────────────────────────────────────────────
|
## ──────────────────────────────────────────────
|
||||||
|
|
||||||
APP := wgsecure
|
APP := wgsecure
|
||||||
VERSION := 0.7.7
|
VERSION := 0.7.8
|
||||||
VENV := .venv
|
VENV := .venv
|
||||||
PYTHON := $(VENV)/bin/python3
|
PYTHON := $(VENV)/bin/python3
|
||||||
PIP := $(VENV)/bin/pip
|
PIP := $(VENV)/bin/pip
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 🛡️ WGSecure (WGS)
|
# 🛡️ WGSecure (WGS)
|
||||||
|
|
||||||
🚀 v0.7.7 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard
|
🚀 v0.7.8 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard
|
||||||
|
|
||||||
**WGSecure** est une interface graphique multiplateforme (Windows & Linux) pour gérer une connexion WireGuard avec une surcouche MFA (authentification à deux facteurs TOTP).
|
**WGSecure** est une interface graphique multiplateforme (Windows & Linux) pour gérer une connexion WireGuard avec une surcouche MFA (authentification à deux facteurs TOTP).
|
||||||
|
|
||||||
@@ -210,4 +210,4 @@ WGSecure/
|
|||||||
## 👤 Auteur
|
## 👤 Auteur
|
||||||
|
|
||||||
Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools)
|
Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools)
|
||||||
Version :  — Septembre 2026
|
Version :  — Septembre 2026
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
__version__ = "0.7.7"
|
__version__ = "0.7.8"
|
||||||
APP_NAME = "WGSecure"
|
APP_NAME = "WGSecure"
|
||||||
APP_SHORT = "WGS"
|
APP_SHORT = "WGS"
|
||||||
|
|||||||
+28
-10
@@ -1908,26 +1908,44 @@ class AdminWindow(QDialog):
|
|||||||
# Commande PowerShell pour modifier les ACLs du service WireGuard
|
# Commande PowerShell pour modifier les ACLs du service WireGuard
|
||||||
# Ajoute à l'utilisateur actuel les droits de créer/supprimer des services WireGuardTunnel*
|
# Ajoute à l'utilisateur actuel les droits de créer/supprimer des services WireGuardTunnel*
|
||||||
ps_script = r'''
|
ps_script = r'''
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
$serviceName = "WireGuard"
|
$serviceName = "WireGuard"
|
||||||
$currentUserSid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
|
$currentUserSid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
|
||||||
|
|
||||||
# Récupérer la SDDL actuelle
|
# Récupérer la SDDL actuelle au format texte natif : "sc sdshow", pas WMI.
|
||||||
$currentSddl = (Get-WmiObject -Class Win32_Service -Filter "Name='$serviceName'").GetSecurityDescriptor().Descriptor.DACL.ToString()
|
# Win32_Service.GetSecurityDescriptor().Descriptor.DACL est un TABLEAU
|
||||||
|
# d'objets Win32_ACE — .ToString() dessus ne produit pas une chaîne SDDL
|
||||||
|
# valide (ça donnait un texte type "System.Management.ManagementBaseObject[]",
|
||||||
|
# jamais vérifié ni signalé), donc "sc sdset" échouait silencieusement et
|
||||||
|
# le bouton annonçait un succès alors que l'ACL n'était jamais posée —
|
||||||
|
# d'où une invite d'élévation qui persistait pour le tunnel en plus de
|
||||||
|
# celle, inévitable, du split-DNS.
|
||||||
|
$sdshowLines = & sc.exe sdshow $serviceName
|
||||||
|
$currentSddl = ($sdshowLines | Where-Object { $_ -like 'D:*' } | Select-Object -First 1)
|
||||||
|
if (-not $currentSddl) {
|
||||||
|
throw "Lecture de la SDDL actuelle de '$serviceName' impossible (sc sdshow)"
|
||||||
|
}
|
||||||
|
$currentSddl = $currentSddl.Trim()
|
||||||
|
|
||||||
# Ajouter l'utilisateur actuel avec les permissions nécessaires
|
# Ajouter l'utilisateur actuel avec les permissions nécessaires, à
|
||||||
|
# l'intérieur de la clause D: existante (jamais en concaténant deux
|
||||||
|
# préfixes "D:" distincts, ce qui produit une SDDL invalide) :
|
||||||
# CC = Create Child (créer des services enfants)
|
# CC = Create Child (créer des services enfants)
|
||||||
# LC = List Child (lister les services enfants)
|
# LC = List Child (lister les services enfants)
|
||||||
# SW = Self Write (modifier ses propres services)
|
# SW = Self Write (modifier ses propres services)
|
||||||
# LO = List Object (lister)
|
# LO = List Object (lister)
|
||||||
# CR = Control (contrôle)
|
# CR = Control (contrôle)
|
||||||
$newAcl = "D:(A;;CCLCSWLOCRRC;;;$currentUserSid)"
|
$fullSddl = $currentSddl + "(A;;CCLCSWLOCRRC;;;$currentUserSid)"
|
||||||
|
|
||||||
# Appliquer la nouvelle SDDL (en ajoutant aux ACLs existantes)
|
$setOutput = & sc.exe sdset $serviceName $fullSddl
|
||||||
$fullSddl = $currentSddl + $newAcl
|
if ($LASTEXITCODE -ne 0) {
|
||||||
sc sdset $serviceName $fullSddl
|
throw "sc sdset a échoué (code $LASTEXITCODE) : $setOutput"
|
||||||
|
}
|
||||||
|
|
||||||
# Redémarrer le service pour appliquer les changements
|
# Redémarrer le service pour que la nouvelle ACL soit prise en compte par
|
||||||
Restart-Service -Name $serviceName -Force -ErrorAction SilentlyContinue
|
# le pipe IPC déjà ouvert (une SDDL mise à jour n'est pas relue par un
|
||||||
|
# process déjà démarré).
|
||||||
|
Restart-Service -Name $serviceName -Force
|
||||||
|
|
||||||
# Mécanisme officiel WireGuard (distinct de l'ACL ci-dessus, qui ne couvre
|
# Mécanisme officiel WireGuard (distinct de l'ACL ci-dessus, qui ne couvre
|
||||||
# que le service) : autorise les membres du groupe "Network Configuration
|
# que le service) : autorise les membres du groupe "Network Configuration
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
; ──────────────────────────────────────────────
|
; ──────────────────────────────────────────────
|
||||||
|
|
||||||
#define MyAppName "WGSecure"
|
#define MyAppName "WGSecure"
|
||||||
#define MyAppVersion "0.7.7"
|
#define MyAppVersion "0.7.8"
|
||||||
#define MyAppPublisher "WGSecure"
|
#define MyAppPublisher "WGSecure"
|
||||||
#define MyAppExeName "wgsecure.exe"
|
#define MyAppExeName "wgsecure.exe"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user