349 lines
12 KiB
Markdown
349 lines
12 KiB
Markdown
# Politique de Sécurité - UnionFlow Client
|
||
|
||

|
||

|
||
|
||
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
|