talas-group/10_QUALITE_TESTS/Audit_Sécurité/PLAN_AUDIT_SECURITE.md

321 lines
11 KiB
Markdown
Raw Normal View History

# Plan d'audit sécurité — Veza
> Checklist OWASP, plan pentest, calendrier d'audits pour la plateforme Veza.
> À exécuter avant chaque phase de lancement (beta, publique, shop).
> Dernière mise à jour : avril 2026.
---
## 1. Périmètre
### 1.1 Composants audités
| Composant | Stack | Criticité |
|-----------|-------|:---------:|
| Backend API | Go/Gin | **Critique** |
| Stream Server | Rust/Axum | Haute |
| Frontend Web | React/Vite | Moyenne |
| Base de données | PostgreSQL 16 | **Critique** |
| Cache/sessions | Redis 7 | Haute |
| Storage | MinIO S3 | Haute |
| Messaging | RabbitMQ 3 | Moyenne |
| Reverse proxy | HAProxy | Haute |
| WAF | Coraza | Haute |
| VPN | WireGuard | Haute |
| OS / infra | Debian, Docker | Haute |
### 1.2 Hors périmètre V1
- Applications desktop (Electron) — pas encore déployé
- AudioGridder — feature V2
- Applications mobiles — pas encore développé
---
## 2. Checklist OWASP Top 10 (2021)
### A01:2021 — Broken Access Control
| # | Vérification | Comment tester | Statut |
|---|-------------|----------------|:------:|
| 1 | Accès horizontal : user A ne peut pas voir les données de user B | Tester GET/PUT/DELETE avec ID d'un autre user | ☐ |
| 2 | Accès vertical : user normal ne peut pas accéder aux endpoints admin | Tester sans rôle admin | ☐ |
| 3 | IDOR sur tous les endpoints à paramètre :id | Fuzzer les IDs (UUID valides d'autres users) | ☐ |
| 4 | Force browsing : pages admin non accessibles sans auth | Scanner /admin/*, /internal/* | ☐ |
| 5 | CORS : origins autorisées uniquement les domaines Talas | Vérifier Access-Control-Allow-Origin | ☐ |
| 6 | Méthodes HTTP : seules GET/POST/PUT/DELETE autorisées | Tester OPTIONS, TRACE, PATCH | ☐ |
### A02:2021 — Cryptographic Failures
| # | Vérification | Statut |
|---|-------------|:------:|
| 7 | TLS 1.2+ obligatoire, pas de TLS 1.0/1.1 | ☐ |
| 8 | Certificats Let's Encrypt valides, auto-renew | ☐ |
| 9 | Pas de secrets en clair dans le code ou les logs | ☐ |
| 10 | Passwords hashés bcrypt cost ≥12 | ☐ |
| 11 | Tokens TOTP chiffrés AES-256-GCM en DB | ☐ |
| 12 | JWT signés RS256, pas HS256 en prod | ☐ |
| 13 | Pas de données sensibles dans les JWT (payload minimal) | ☐ |
### A03:2021 — Injection
| # | Vérification | Statut |
|---|-------------|:------:|
| 14 | SQL injection : GORM paramétré, pas de raw queries non-escaped | ☐ |
| 15 | NoSQL injection : N/A (pas de NoSQL) | ✓ |
| 16 | OS command injection : pas de exec() avec user input | ☐ |
| 17 | LDAP injection : N/A | ✓ |
| 18 | XSS : sanitisation de tous les inputs rendus HTML | ☐ |
| 19 | SSRF : pas de fetch d'URL arbitraire fournie par l'utilisateur | ☐ |
### A04:2021 — Insecure Design
| # | Vérification | Statut |
|---|-------------|:------:|
| 20 | Rate limiting sur login, register, reset password | ☐ |
| 21 | Verrouillage de compte après N échecs | ☐ |
| 22 | Pas de réponse différente "email existe" vs "email inconnu" | ☐ |
| 23 | Captcha ou proof-of-work sur formulaires publics (V1.5) | ☐ |
### A05:2021 — Security Misconfiguration
| # | Vérification | Statut |
|---|-------------|:------:|
| 24 | Headers sécurité : HSTS, CSP, X-Content-Type, X-Frame | ☐ |
| 25 | Pas de stack traces exposées en production | ☐ |
| 26 | Pas de debug mode en production | ☐ |
| 27 | Docker : pas de containers root, images signées | ☐ |
| 28 | Ports exposés : uniquement 80/443 vers l'extérieur | ☐ |
| 29 | MinIO : pas de bucket public sauf previews | ☐ |
| 30 | Redis : auth activée, pas d'accès externe | ☐ |
| 31 | PostgreSQL : auth MD5/scram, pas d'accès externe | ☐ |
### A06:2021 — Vulnerable and Outdated Components
| # | Vérification | Statut |
|---|-------------|:------:|
| 32 | Go : `govulncheck` sans vulnérabilité critique | ☐ |
| 33 | Rust : `cargo audit` sans vulnérabilité critique | ☐ |
| 34 | NPM : `npm audit` sans critical/high | ☐ |
| 35 | Docker images : `trivy image scan` clean | ☐ |
| 36 | OS packages : mise à jour sécurité < 7 jours | |
### A07:2021 — Identification and Authentication Failures
| # | Vérification | Statut |
|---|-------------|:------:|
| 37 | Password policy appliquée (12 car, complexité) | ☐ |
| 38 | Sessions expirent (access 15min, refresh 30j) | ☐ |
| 39 | Logout invalide le refresh token | ☐ |
| 40 | Cookies HTTP-only + Secure + SameSite=Lax | ☐ |
| 41 | OAuth state parameter vérifié | ☐ |
| 42 | 2FA fonctionne et bloque sans code | ☐ |
### A08:2021 — Software and Data Integrity Failures
| # | Vérification | Statut |
|---|-------------|:------:|
| 43 | Uploads scannés ClamAV avant stockage | ☐ |
| 44 | Checksums vérifiés après upload MinIO | ☐ |
| 45 | Webhooks Mollie vérifiés (re-call API) | ☐ |
| 46 | Dépendances : lockfiles commités, pas de floating versions | ☐ |
### A09:2021 — Security Logging and Monitoring Failures
| # | Vérification | Statut |
|---|-------------|:------:|
| 47 | Audit log sur login, logout, password change, admin actions | ☐ |
| 48 | Logs structurés (JSON) en production | ☐ |
| 49 | Alertes Sentry sur erreurs 500 | ☐ |
| 50 | Fail2ban actif sur SSH et HTTP brute-force | ☐ |
| 51 | Métriques Prometheus exportées et dashboardées | ☐ |
### A10:2021 — Server-Side Request Forgery (SSRF)
| # | Vérification | Statut |
|---|-------------|:------:|
| 52 | Pas de proxy/fetch d'URL arbitraire | ☐ |
| 53 | Callbacks OAuth limités aux domaines autorisés | ☐ |
| 54 | Webhooks Mollie : vérification IP source (optionnel) | ☐ |
---
## 3. Tests de pénétration
### 3.1 Scope pentest V1
| Cible | Type de test |
|-------|-------------|
| API REST (tout `/api/v1/*`) | Blackbox + greybox (avec un compte user) |
| Auth (login, register, 2FA, OAuth) | Blackbox |
| Upload fichiers (tracks, samples, cloud) | Greybox |
| WebSocket streaming | Blackbox |
| Infra réseau (ports, services) | Blackbox depuis extérieur |
### 3.2 Outils
| Outil | Usage | Self-hosted ? |
|-------|-------|:-------------:|
| **Nmap** | Scan ports + services | ✓ |
| **OWASP ZAP** | Proxy scanner web, fuzzer | ✓ |
| **Nuclei** | Scan vulnérabilités templates | ✓ |
| **SQLMap** | Injection SQL (validation) | ✓ |
| **ffuf** | Fuzzer endpoints / dirs | ✓ |
| **Burp Suite Community** | Proxy manuel | ✓ |
| **Trivy** | Scan containers Docker | ✓ |
| **govulncheck** | Vulns Go | ✓ |
| **cargo audit** | Vulns Rust | ✓ |
| **npm audit** | Vulns JS | ✓ |
### 3.3 Déroulement d'un pentest
```
Phase 1 — Reconnaissance (2h)
→ Nmap scan réseau externe
→ ffuf directory brute-force
→ Nuclei templates scan
Phase 2 — Authentication (2h)
→ Brute-force login (rate limit test)
→ Password reset flow (token enum)
→ Session hijacking attempt
→ 2FA bypass attempts
→ OAuth redirect manipulation
Phase 3 — Authorization (3h)
→ IDOR sur chaque endpoint avec :id
→ Escalation user → admin
→ Cross-user data access
→ File access cross-tenant (cloud, uploads)
Phase 4 — Input validation (2h)
→ XSS sur tous les champs affichables
→ SQL injection sur search + filtres
→ File upload : extensions interdites, LFI, path traversal
→ Payload size limits
Phase 5 — Business logic (2h)
→ Stock manipulation (réservation concurrente)
→ Payment flow bypass
→ Double-submit paiement
→ Rate limit contournement
Phase 6 — Infrastructure (1h)
→ Docker escape (container → host)
→ Redis accès sans auth
→ PostgreSQL accès direct
→ MinIO bucket listing
Phase 7 — Rapport (2h)
→ Rédaction des findings
→ Classification CVSS
→ Recommandations de remediation
```
**Durée totale** : ~14 heures (2 jours de travail intensif).
---
## 4. Calendrier d'audit
### 4.1 Audits obligatoires
| Quand | Type | Scope |
|-------|------|-------|
| **Avant beta** (mai 2026) | OWASP checklist complète | Tout |
| **Avant ouverture publique** (juin 2026) | Pentest léger (phases 1-4) | API + auth |
| **Avant lancement shop** (août 2026) | Pentest complet + focus paiement | Shop + payment |
| **Trimestriel** | Scan vulnérabilités (Trivy, govulncheck, npm audit) | Dépendances |
| **Après chaque release majeure** | Revue OWASP ciblée | Code modifié |
### 4.2 Audits continus (automatisés en CI)
| Check | Outil | Fréquence |
|-------|-------|-----------|
| Vulnérabilités Go | `govulncheck` | Chaque PR |
| Vulnérabilités Rust | `cargo audit` | Chaque PR |
| Vulnérabilités NPM | `npm audit --audit-level=high` | Chaque PR |
| Docker images | `trivy image` | Chaque build |
| Secrets dans le code | `gitleaks` | Chaque PR |
| Headers sécurité | Script custom (curl + check) | Daily cron |
| Certificat TLS expiration | `openssl s_client` | Weekly cron |
---
## 5. Classification des vulnérabilités
| Niveau | CVSS | Délai de correction | Exemples |
|--------|:----:|:-------------------:|----------|
| **Critique** | 9.0-10.0 | **24h** | RCE, SQLi, auth bypass, données exposées |
| **Haute** | 7.0-8.9 | **72h** | XSS stocké, IDOR critique, CSRF paiement |
| **Moyenne** | 4.0-6.9 | **2 semaines** | XSS réfléchi, info leak mineur, rate limit faible |
| **Basse** | 0.1-3.9 | **1 mois** | Headers manquants, verbose errors, enumeration |
---
## 6. Reporting
### 6.1 Format de rapport pentest
```markdown
## Finding: [Titre]
**Sévérité**: Critique / Haute / Moyenne / Basse
**CVSS**: X.X
**Composant**: Backend API / Frontend / Infra
**Endpoint**: POST /api/v1/...
**CWE**: CWE-XXX
### Description
[Ce qui a été trouvé]
### Preuve
[Commande/screenshot/payload]
### Impact
[Ce qu'un attaquant pourrait faire]
### Remédiation
[Comment corriger]
### Statut
☐ À corriger / ☐ Corrigé / ☐ Accepté (risque mitigé)
```
### 6.2 Suivi
Un fichier `FINDINGS_LOG.md` dans ce dossier trace toutes les vulnérabilités trouvées :
```markdown
| # | Date | Sévérité | Titre | Statut | Corrigé le |
|---|------|----------|-------|--------|-----------|
| 001 | 2026-05-15 | Haute | IDOR sur /tracks/:id | Corrigé | 2026-05-16 |
| 002 | ... | ... | ... | ... | ... |
```
---
## 7. Règles de Coraza WAF à valider
| Règle | Vérifie |
|-------|---------|
| OWASP CRS 4.x activé | ☐ |
| Anomaly scoring threshold = 5 | ☐ |
| SQL injection rules actives | ☐ |
| XSS rules actives | ☐ |
| Path traversal rules actives | ☐ |
| File upload rules actives | ☐ |
| Rate limiting intégré (ou HAProxy) | ☐ |
| Logging des blocked requests | ☐ |
| False positives identifiés et whitelistés | ☐ |
---
## Voir aussi
- [[Auth_&_Core/SPEC_AUTH_CORE]] — implémentation auth
- [[04_INFRA_DEPLOIEMENT/Sécurité]] — hardening infra
- [[04_INFRA_DEPLOIEMENT/Sécurité_WAF_Coraza]] — config WAF
- [[08_CONFORMITE_JURIDIQUE/RGPD]] — obligations données personnelles
- [[ARCHITECTURE_VEZA]] — composants à auditer