Files
2026-03-01 22:00:28 +00:00

349 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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