From 73c102cc358c165ae7bbf6aa4fedc3d82e4317d1 Mon Sep 17 00:00:00 2001 From: Johnny Date: Fri, 4 Sep 2026 16:49:51 +0200 Subject: [PATCH] chore(release): v0.7.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- CHANGELOG.md | 7 +++++++ Makefile | 2 +- README.md | 4 ++-- app/__init__.py | 2 +- app/ui/admin_window.py | 38 ++++++++++++++++++++++++++++---------- wgsecure.iss | 2 +- 6 files changed, 40 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 066950f..92f6cba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 ### Corrigé diff --git a/Makefile b/Makefile index cf6bbfd..17b77ef 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ ## ────────────────────────────────────────────── APP := wgsecure -VERSION := 0.7.7 +VERSION := 0.7.8 VENV := .venv PYTHON := $(VENV)/bin/python3 PIP := $(VENV)/bin/pip diff --git a/README.md b/README.md index 032d071..f88e02e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🛡️ 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). @@ -210,4 +210,4 @@ WGSecure/ ## 👤 Auteur Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools) -Version : ![v0.7.7](https://img.shields.io/badge/v0.7.7-septembre%202026-2980b9?style=flat-square) — Septembre 2026 +Version : ![v0.7.8](https://img.shields.io/badge/v0.7.8-septembre%202026-2980b9?style=flat-square) — Septembre 2026 diff --git a/app/__init__.py b/app/__init__.py index 8443a78..81939ea 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,3 +1,3 @@ -__version__ = "0.7.7" +__version__ = "0.7.8" APP_NAME = "WGSecure" APP_SHORT = "WGS" diff --git a/app/ui/admin_window.py b/app/ui/admin_window.py index f59e279..86fc931 100644 --- a/app/ui/admin_window.py +++ b/app/ui/admin_window.py @@ -1908,26 +1908,44 @@ class AdminWindow(QDialog): # Commande PowerShell pour modifier les ACLs du service WireGuard # Ajoute à l'utilisateur actuel les droits de créer/supprimer des services WireGuardTunnel* ps_script = r''' +$ErrorActionPreference = 'Stop' $serviceName = "WireGuard" $currentUserSid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value -# Récupérer la SDDL actuelle -$currentSddl = (Get-WmiObject -Class Win32_Service -Filter "Name='$serviceName'").GetSecurityDescriptor().Descriptor.DACL.ToString() +# Récupérer la SDDL actuelle au format texte natif : "sc sdshow", pas WMI. +# 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) -# LC = List Child (lister les services enfants) +# LC = List Child (lister les services enfants) # SW = Self Write (modifier ses propres services) # LO = List Object (lister) # CR = Control (contrôle) -$newAcl = "D:(A;;CCLCSWLOCRRC;;;$currentUserSid)" +$fullSddl = $currentSddl + "(A;;CCLCSWLOCRRC;;;$currentUserSid)" -# Appliquer la nouvelle SDDL (en ajoutant aux ACLs existantes) -$fullSddl = $currentSddl + $newAcl -sc sdset $serviceName $fullSddl +$setOutput = & sc.exe sdset $serviceName $fullSddl +if ($LASTEXITCODE -ne 0) { + throw "sc sdset a échoué (code $LASTEXITCODE) : $setOutput" +} -# Redémarrer le service pour appliquer les changements -Restart-Service -Name $serviceName -Force -ErrorAction SilentlyContinue +# Redémarrer le service pour que la nouvelle ACL soit prise en compte par +# 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 # que le service) : autorise les membres du groupe "Network Configuration diff --git a/wgsecure.iss b/wgsecure.iss index 3e602f6..9a8b19f 100644 --- a/wgsecure.iss +++ b/wgsecure.iss @@ -5,7 +5,7 @@ ; ────────────────────────────────────────────── #define MyAppName "WGSecure" -#define MyAppVersion "0.7.7" +#define MyAppVersion "0.7.8" #define MyAppPublisher "WGSecure" #define MyAppExeName "wgsecure.exe"