From 6251a3ea8e7b7267a4267c3a7d0f6f24514f458a Mon Sep 17 00:00:00 2001 From: tuxgyver Date: Tue, 1 Sep 2026 15:09:38 +0200 Subject: [PATCH] chore(release): v0.6.0 --- CHANGELOG.md | 38 ++++++++++++++++++++++++++++++++++++++ Makefile | 2 +- README.md | 4 ++-- app/__init__.py | 2 +- app/core/config.py | 2 +- main.py | 4 ++-- wgsecure.iss | 2 +- 7 files changed, 46 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 615b086..44fea1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,44 @@ Ce projet suit le [Versionnage Sémantique](https://semver.org/lang/fr/). --- +## [0.6.0] — 2026-09-01 + +### Ajouté +- **Test de handshake réel, sans monter le tunnel.** Le diagnostic s'arrêtait au constat « le port + UDP ne rejette rien », qui est le maximum qu'une sonde aveugle puisse dire : un serveur WireGuard + ignore silencieusement tout paquet non authentifié, si bien qu'un port non redirigé, une clé + inconnue du serveur et un serveur en parfaite santé produisent exactement la même absence de + réponse. Le tunnel n'étant pas monté, les étapes suivantes étaient sautées et le rapport + concluait « chaîne validée » sur une configuration qui n'avait aucune chance de négocier. + WGSecure construit désormais un vrai message d'initiation et interprète la réponse : il distingue + un handshake complet, une clé pré-partagée attendue, en trop ou différente, un cookie anti-déni + de service, un port fermé et un silence complet — sans ouvrir de tunnel ni demander de privilèges. +- **Détection du filtrage sur port source.** Quand le serveur reste muet, une seconde tentative + part depuis le port du serveur. S'il répond alors, c'est qu'un équipement en chemin n'accepte le + trafic que si le port source égale le port de destination — une règle courante sur FortiGate, + dont l'objet Service porte un `udp-portrange 51820:51820`. Un client WireGuard émettant depuis un + port aléatoire ne peut jamais la satisfaire, et rien dans les journaux ne le disait. + +### Modifié +- **Fenêtre d'administration ramenée à 720 × 600** (minimum 640 × 520) : le découpage en + sous-onglets a supprimé l'empilement qui imposait une grande fenêtre. +- **Encarts d'introduction retirés au-dessus des sous-onglets**, où ils répétaient ce que les + sous-onglets annoncent déjà. Ceux placés dans chaque sous-onglet sont conservés. + +### Corrigé +- **Verdict trompeur quand le tunnel est inactif.** « Chaîne validée jusqu'au tunnel » laissait + croire que tout avait été vérifié, alors que les étapes sautées sont précisément celles qui + échouent quand un tunnel refuse de négocier. Le rapport annonce maintenant « rien de bloquant + détecté, mais le tunnel est inactif » et nomme les étapes non évaluées. +- **Causes du handshake manquant** : le port UDP du serveur figure désormais parmi les pistes + citées, un port erroné ne produisant aucune erreur visible. + +### Technique +- Nouveau module `app/core/wg_handshake.py` : implémentation de la poignée de main + Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s du protocole WireGuard v1. Aucun état n'est conservé, la + session négociée est jetée aussitôt et le serveur traite l'initiation comme celle d'un pair qui + se reconnecte. + ## [0.5.0] — 2026-09-01 ### Ajouté diff --git a/Makefile b/Makefile index 2e6fd1f..0e65872 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ ## ────────────────────────────────────────────── APP := wgsecure -VERSION := 0.5.0 +VERSION := 0.6.0 VENV := .venv PYTHON := $(VENV)/bin/python3 PIP := $(VENV)/bin/pip diff --git a/README.md b/README.md index ddcb590..b004e8b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🛡️ WGSecure (WGS) -🚀 v0.5.0 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard +🚀 v0.6.0 · 🐍 · 🪟🐧 · 🔐 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). @@ -188,4 +188,4 @@ WGSecure/ ## 👤 Auteur Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools) -Version : ![v0.5.0](https://img.shields.io/badge/v0.5.0-septembre%202026-2980b9?style=flat-square) — Septembre 2026 +Version : ![v0.6.0](https://img.shields.io/badge/v0.6.0-septembre%202026-2980b9?style=flat-square) — Septembre 2026 diff --git a/app/__init__.py b/app/__init__.py index 6acaea3..463115e 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,3 +1,3 @@ -__version__ = "0.5.0" +__version__ = "0.6.0" APP_NAME = "WGSecure" APP_SHORT = "WGS" diff --git a/app/core/config.py b/app/core/config.py index e44cead..acc3254 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -36,7 +36,7 @@ _WG_DEFAULT: dict[str, Any] = { } _DEFAULT: dict[str, Any] = { - "version": "0.5.0", + "version": "0.6.0", "admin_password_hash": "", "admin_salt": "", "mfa_enabled": False, diff --git a/main.py b/main.py index c69339c..d0eab69 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """ WGSecure (WGS) — Interface graphique WireGuard avec MFA -Version 0.5.0 +Version 0.6.0 """ import sys import argparse @@ -92,7 +92,7 @@ def main(): ) app = QApplication(sys.argv) app.setApplicationName("WGSecure") - app.setApplicationVersion("0.5.0") + app.setApplicationVersion("0.6.0") app.setOrganizationName("WGS") # Icône globale multi-tailles — barre des tâches + alt-tab app_icon = icons.icon_app() diff --git a/wgsecure.iss b/wgsecure.iss index 68d4308..93ebde0 100644 --- a/wgsecure.iss +++ b/wgsecure.iss @@ -4,7 +4,7 @@ ; ────────────────────────────────────────────── #define MyAppName "WGSecure" -#define MyAppVersion "0.5.0" +#define MyAppVersion "0.6.0" #define MyAppPublisher "WGSecure" #define MyAppExeName "wgsecure.exe"