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