# Politique de Sécurité - UnionFlow Client ![Security](https://img.shields.io/badge/Security-A+-green) ![OWASP](https://img.shields.io/badge/OWASP-Top%2010-blue) Ce document décrit les pratiques de sécurité, les vulnérabilités connues et les procédures de signalement pour l'application UnionFlow Client. ## 📋 Table des Matières - [Versions Supportées](#versions-supportées) - [Architecture de Sécurité](#architecture-de-sécurité) - [Authentification et Autorisation](#authentification-et-autorisation) - [Protection des Données](#protection-des-données) - [Headers de Sécurité](#headers-de-sécurité) - [Gestion des Secrets](#gestion-des-secrets) - [Vulnérabilités Connues](#vulnérabilités-connues) - [Signalement de Vulnérabilités](#signalement-de-vulnérabilités) - [Conformité](#conformité) ## 🔄 Versions Supportées | Version | Supportée | Fin de Support | |---------|-----------|----------------| | 1.0.x | ✅ Oui | 31 Déc 2025 | | < 1.0 | ❌ Non | N/A | ## 🏗️ Architecture de Sécurité ### Modèle de Sécurité L'application implémente une architecture de sécurité en profondeur (Defense in Depth): ``` ┌─────────────────────────────────────────────┐ │ 1. TLS/HTTPS (Transport) │ │ - Certificats SSL/TLS valides │ │ - HSTS activé (max-age=1 an) │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ 2. Headers de Sécurité HTTP │ │ - CSP, X-Frame-Options, etc. │ │ - Protection XSS, Clickjacking │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ 3. Authentification OIDC (Keycloak) │ │ - OAuth 2.0 / OpenID Connect │ │ - JWT Tokens signés │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ 4. Autorisation (RBAC) │ │ - Vérification rôles multiples │ │ - Permissions granulaires │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ 5. Validation des Entrées │ │ - Hibernate Validator │ │ - Validateurs personnalisés │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ 6. Logging Sécurisé │ │ - Pas de données sensibles │ │ - Audit trails │ └─────────────────────────────────────────────┘ ``` ## 🔐 Authentification et Autorisation ### Authentification - **Méthode**: OpenID Connect (OIDC) via Keycloak - **Protocole**: OAuth 2.0 Authorization Code Flow - **Tokens**: JWT (JSON Web Tokens) signés avec RS256 ### Configuration Keycloak Requise ```properties # Serveur d'authentification quarkus.oidc.auth-server-url=https://security.lions.dev/realms/unionflow # Client configuration quarkus.oidc.client-id=unionflow-client quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET} # Scopes quarkus.oidc.authentication.scopes=openid,profile,email,roles # TLS Verification quarkus.oidc.tls.verification=required # JAMAIS 'none' en production ``` ### Rôles et Permissions #### Hiérarchie des Rôles 1. **SUPER_ADMIN** - Accès complet système 2. **ADMIN_ENTITE** - Administration organisation 3. **ADMIN** - Administration locale 4. **GESTIONNAIRE_*** - Gestion fonctionnelle 5. **TRESORIER** - Gestion financière 6. **MEMBRE** - Accès membre standard #### Permissions Granulaires - `canManageMembers()` - Gestion des membres - `canManageFinances()` - Gestion financière - `canManageEvents()` - Gestion des événements - `canViewReports()` - Consultation des rapports - `canAccessSuperAdmin()` - Accès super-admin ### Gestion des Sessions - **Timeout**: 60 minutes par défaut - **Cookie Flags**: - `HttpOnly`: ✅ Activé (prévention XSS) - `Secure`: ✅ Activé (HTTPS uniquement) - `SameSite`: `Strict` (prévention CSRF) ### Gestion des Tokens JWT - **Access Token**: Durée de vie courte (15-30 min) - **Refresh Token**: Durée de vie longue (7 jours) - **Stockage**: Cookies HttpOnly (JAMAIS localStorage) - **Rafraîchissement**: Automatique 5 min avant expiration - **Cache**: Limite de 10,000 tokens (protection DoS) ## 🛡️ Protection des Données ### Données Sensibles #### Classification | Type | Niveau | Stockage | Transmission | |------|--------|----------|--------------| | Mots de passe | Critique | Hachés (bcrypt) | HTTPS uniquement | | Tokens JWT | Critique | Cookies HttpOnly | HTTPS uniquement | | Email | Confidentiel | Chiffré DB | HTTPS uniquement | | Téléphone | Confidentiel | Chiffré DB | HTTPS uniquement | | Nom/Prénom | Public | Clair | HTTPS uniquement | #### Protection en Transit - **Protocole**: TLS 1.2+ uniquement (pas de TLS 1.0/1.1) - **Cipher Suites**: Modernes et sûres uniquement - **HSTS**: Activé avec `includeSubDomains` et `preload` #### Protection au Repos - **Base de données**: Chiffrement au niveau base (via backend) - **Fichiers**: Chiffrement du système de fichiers recommandé - **Logs**: Pas de données sensibles loggées ### Conformité RGPD - **Minimisation des données**: Collecte uniquement des données nécessaires - **Droit à l'oubli**: API de suppression disponible - **Portabilité**: Export de données en JSON/Excel - **Audit**: Logs de toutes les opérations sensibles ## 🔒 Headers de Sécurité ### Configuration Production Tous les headers suivants sont automatiquement configurés en production: ```properties # Prévention MIME Sniffing X-Content-Type-Options: nosniff # Protection Clickjacking X-Frame-Options: DENY # HSTS (HTTPS forcé) Strict-Transport-Security: max-age=31536000; includeSubDomains; preload # Content Security Policy Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none' # Protection XSS (legacy) X-XSS-Protection: 1; mode=block # Politique de référents Referrer-Policy: strict-origin-when-cross-origin # Permissions Policy Permissions-Policy: geolocation=(), microphone=(), camera=() ``` ### Content Security Policy (CSP) ⚠️ **Note**: `unsafe-inline` et `unsafe-eval` sont nécessaires pour PrimeFaces/JSF qui génèrent des scripts inline. Une migration vers des nonces CSP est prévue dans une version future. ## 🔑 Gestion des Secrets ### Secrets à Protéger 1. **KEYCLOAK_CLIENT_SECRET** - Secret client Keycloak 2. **Clés de chiffrement** - Si applicable 3. **Tokens API** - Pour services externes ### Bonnes Pratiques #### ✅ À FAIRE - Utiliser des **variables d'environnement** pour tous les secrets - Utiliser un **gestionnaire de secrets** (HashiCorp Vault, AWS Secrets Manager) - **Régénérer** les secrets régulièrement (rotation) - Utiliser des **secrets différents** pour dev/staging/prod - **Auditer** l'accès aux secrets #### ❌ À NE JAMAIS FAIRE - ❌ Committer des secrets dans Git - ❌ Hardcoder des secrets dans le code - ❌ Partager des secrets par email/Slack - ❌ Utiliser des secrets par défaut - ❌ Logger des secrets ### Vérification dans Git ```bash # Vérifier qu'aucun secret n'est présent git secrets --scan # Nettoyer l'historique si nécessaire git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch src/main/resources/application-dev.properties" \ --prune-empty --tag-name-filter cat -- --all ``` ## 🚨 Vulnérabilités Connues ### Critiques Corrigées (v1.0.0) | ID | Vulnérabilité | Statut | Correction | |----|---------------|--------|------------| | SEC-001 | Secret Keycloak en dur | ✅ Corrigé | Supprimé du code | | SEC-002 | TLS verification=none en dev | ✅ Corrigé | Activé `required` | | SEC-003 | Exposition erreurs backend | ✅ Corrigé | Messages génériques | | SEC-004 | Logging données sensibles | ✅ Corrigé | Logs anonymisés | | SEC-005 | Cache tokens illimité | ✅ Corrigé | Limite 10,000 | | SEC-006 | Cookie Secure=false | ✅ Corrigé | Activé en prod | ### Risques Résiduels | Risque | Niveau | Mitigation | |--------|--------|------------| | Dépendance PrimeFaces inline scripts | Moyen | CSP avec unsafe-inline | | Session fixation | Faible | Régénération session à login | ## 📢 Signalement de Vulnérabilités ### Processus de Signalement Si vous découvrez une vulnérabilité de sécurité: 1. **NE PAS** créer d'issue publique 2. **Envoyer un email** à: security@lions.dev 3. **Inclure**: - Description détaillée de la vulnérabilité - Étapes pour reproduire - Impact potentiel - Version affectée - Preuve de concept (si applicable) ### Délais de Réponse - **Accusé de réception**: 24 heures - **Évaluation initiale**: 72 heures - **Correctif critique**: 7 jours - **Correctif haute priorité**: 30 jours ### Récompenses Nous proposons un programme de Bug Bounty pour les vulnérabilités critiques validées. Contactez security@lions.dev pour plus de détails. ## 📊 Conformité ### Standards de Sécurité - **OWASP Top 10 2021**: ✅ Conforme - **OWASP ASVS Level 2**: ✅ Conforme - **CWE Top 25**: ✅ Vérifié ### Audits de Sécurité | Date | Type | Résultat | Rapport | |------|------|----------|---------| | 2025-12-17 | Interne | Pass | `docs/audit-2025-12.pdf` | ### Tests de Sécurité #### Automatisés (CI/CD) - **Dependency Check**: OWASP Dependency-Check Maven plugin - **SAST**: Spotbugs Security Plugin - **Secrets Scanning**: GitGuardian #### Manuels (Périodiques) - **Pentesting**: Annuel - **Code Review**: À chaque release majeure - **Configuration Review**: Trimestriel ## 🛠️ Outils de Sécurité Recommandés ### Développement ```bash # Analyse de dépendances mvn org.owasp:dependency-check-maven:check # Analyse statique mvn spotbugs:check # Secrets scanning git secrets --scan --recursive ``` ### Production - **WAF**: Cloudflare, AWS WAF, ou ModSecurity - **IDS/IPS**: Suricata, Snort - **Log Monitoring**: ELK Stack, Splunk - **Vulnerability Scanner**: Nessus, OpenVAS ## 📚 Références - [OWASP Top 10](https://owasp.org/www-project-top-ten/) - [OWASP ASVS](https://owasp.org/www-project-application-security-verification-standard/) - [Keycloak Security](https://www.keycloak.org/docs/latest/securing_apps/) - [Quarkus Security](https://quarkus.io/guides/security) --- **Dernière mise à jour**: 17 Décembre 2025 **Contact Sécurité**: security@lions.dev **PGP Key**: Disponible sur demande