# 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
