# 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