MEDIUM-002: Remove manual X-Forwarded-For parsing in metrics_protection.go, use c.ClientIP() only (respects SetTrustedProxies) MEDIUM-003: Pin ClamAV Docker image to 1.4 across all compose files MEDIUM-004: Add clampLimit(100) to 15+ handlers that parsed limit directly MEDIUM-006: Remove unsafe-eval from CSP script-src on Swagger routes MEDIUM-007: Pin all GitHub Actions to SHA in 11 workflow files MEDIUM-008: Replace rabbitmq:3-management-alpine with rabbitmq:3-alpine in prod MEDIUM-009: Add trial-already-used check in subscription service MEDIUM-010: Add 60s periodic token re-validation to WebSocket connections MEDIUM-011: Mask email in auth handler logs with maskEmail() helper MEDIUM-012: Add k-anonymity threshold (k=5) to playback analytics stats LOW-001: Align frontend password policy to 12 chars (matching backend) LOW-003: Replace deprecated dotenv with dotenvy crate in Rust stream server LOW-004: Enable xpack.security in Elasticsearch dev/local compose files LOW-005: Accept context.Context in CleanupExpiredSessions instead of Background() LOW-002: Noted — Hyperswitch version update deferred (requires payment integration tests) 29/30 findings remediated. 1 noted (LOW-002). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6.3 KiB
6.3 KiB
MATRICE DE REMÉDIATION — VEZA v0.12.6
Date : 2026-03-11 Mise à jour : 2026-03-12 Référence : PENTEST_REPORT_VEZA_v0.12.6.md
Matrice de remédiation (triée par sévérité décroissante, puis CVSS)
| # | Finding | Sévérité | CVSS | Fichier(s) | Effort estimé | Priorité | Assignation suggérée | Statut |
|---|---|---|---|---|---|---|---|---|
| CRIT-001 | IDOR rooms — lecture conversations privées | CRITIQUE | 9.1 | room_handler.go:134-314 |
3h | Immédiate | Backend dev | ✅ CORRIGÉ |
| CRIT-002 | play_count/like_count publics (violation éthique) | CRITIQUE | 5.3 | models/track.go:39-40 |
4h | Immédiate | Backend dev | ✅ CORRIGÉ |
| HIGH-001 | Race condition TOCTOU downloads marketplace | HAUTE | 7.5 | marketplace/service.go:794-817 |
2h | Immédiate | Backend dev | ✅ CORRIGÉ |
| HIGH-002 | Production HS256 au lieu de RS256 | HAUTE | 7.4 | docker-compose.prod.yml:158, jwt_service.go |
4h | Immédiate | DevOps + Backend | ✅ CORRIGÉ |
| HIGH-003 | User repository context.Background() bypass | HAUTE | 5.3 | user_repository.go:125-150 |
4h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| HIGH-004 | Race condition codes promo | HAUTE | 7.5 | marketplace/service.go:463,753 |
2h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| HIGH-005 | Race condition licence exclusive | HAUTE | 7.5 | marketplace/service.go:393-532 |
2h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| HIGH-006 | Rate limiter bypass (TrustedProxies) | HAUTE | 7.5 | rate_limiter.go:131 |
30min | Immédiate | Backend dev | ✅ CORRIGÉ |
| HIGH-007 | RGPD hard delete incomplet | HAUTE | 6.5 | hard_delete_worker.go:101 |
4h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| HIGH-008 | RTMP callback auth faible | HAUTE | 7.3 | live_stream_callback.go:25-36 |
1h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| HIGH-009 | Co-écoute host hijack | HAUTE | 6.5 | colistening/hub.go:102 |
1h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| HIGH-010 | Modérateur self-strike | HAUTE | 6.5 | moderation_service.go:725 |
1h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| MEDIUM-001 | Recovery codes 2FA avec math/rand | MOYENNE | 5.9 | two_factor_service.go:200 |
30min | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| MEDIUM-002 | Metrics IP spoofing via X-Forwarded-For | MOYENNE | 5.3 | metrics_protection.go:52-54 |
15min | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| MEDIUM-004 | Pagination sans limite maximale | MOYENNE | 5.3 | Pagination middleware + handlers | 2h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| MEDIUM-005 | Stream token forgeable (HS256 prod) | MOYENNE | 5.9 | jwt_service.go:253-277 |
— | Sprint suivant | Résolu par HIGH-002 | ✅ CORRIGÉ |
| MEDIUM-003 | ClamAV image Docker :latest | MOYENNE | 4.8 | docker-compose*.yml |
15min | Sprint suivant | DevOps | ✅ CORRIGÉ |
| MEDIUM-007 | CI actions non pinnées par SHA | MOYENNE | 4.8 | .github/workflows/*.yml |
1h | Sprint suivant | DevOps | ✅ CORRIGÉ |
| MEDIUM-006 | CSP unsafe-inline Swagger routes | MOYENNE | 4.7 | security_headers.go:78 |
30min | Backlog | Backend dev | ✅ CORRIGÉ |
| MEDIUM-008 | RabbitMQ Management UI en prod | MOYENNE | 5.3 | docker-compose.prod.yml |
15min | Backlog | DevOps | ✅ CORRIGÉ |
| MEDIUM-009 | Free trial réutilisable indéfiniment | MOYENNE | 5.3 | subscription/service.go:236 |
1h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| MEDIUM-010 | WebSocket pas de re-validation token | MOYENNE | 5.4 | chat_websocket_handler.go:32 |
2h | Sprint suivant | Backend dev | ✅ CORRIGÉ |
| MEDIUM-011 | Email logué en clair | MOYENNE | 4.3 | handlers/auth.go:52 |
30min | Backlog | Backend dev | ✅ CORRIGÉ |
| MEDIUM-012 | Analytics sans k-anonymité | MOYENNE | 4.3 | playback_analytics_handler.go |
1h30 | Backlog | Backend dev | ✅ CORRIGÉ |
| LOW-001 | Password policy mismatch FE/BE | BASSE | 3.7 | passwordValidator.ts |
30min | Backlog | Frontend dev | ✅ CORRIGÉ |
| LOW-002 | Hyperswitch version datée | BASSE | 3.1 | docker-compose*.yml |
2h (+ tests) | Backlog | DevOps | ⚠️ NOTÉ |
| LOW-003 | dotenv 0.15 obsolète (Rust) | BASSE | 2.0 | Cargo.toml |
30min | Backlog | Backend dev | ✅ CORRIGÉ |
| LOW-004 | Elasticsearch sans auth | BASSE | 3.5 | Docker config | 2h | Backlog | DevOps | ✅ CORRIGÉ |
| LOW-005 | context.Background() dans jobs | BASSE | 2.0 | jobs/*.go |
1h | Backlog | Backend dev | ✅ CORRIGÉ |
| LOW-006 | Redis sans password en dev | BASSE | 2.0 | docker-compose.yml |
— | Backlog | Accepté (dev only) | ✅ ACCEPTÉ |
Résumé des efforts
| Priorité | Nombre de findings | Corrigés | Restant |
|---|---|---|---|
| Immédiate (bloquant v1.0.0) | 5 | 5 | 0 |
| Sprint suivant | 15 | 15 | 0 |
| Backlog | 10 | 9 | 1 (LOW-002 noté) |
| Total | 30 | 29 | 1 |
Plan de remédiation recommandé
Phase 1 — Immédiate (bloquant — avant merge en main) ✅ COMPLÈTE
- CRIT-001 : ✅ Vérification membership sur
GetRoometGetRoomHistory - CRIT-002 : ✅
play_count/like_countsupprimés des réponses API publiques - HIGH-002 : ✅ Production RS256 (paire RSA 2048-bit)
- HIGH-006 : ✅
engine.SetTrustedProxies(nil)configuré - HIGH-001 : ✅ Transaction +
SELECT FOR UPDATEsurGetDownloadURL
Phase 2 — Sprint suivant ✅ COMPLÈTE
- HIGH-004/005 : ✅ Race conditions codes promo et licences protégées
- HIGH-007 : ✅ Hard delete RGPD complété (sessions, settings, follows, notifications, audit_logs)
- HIGH-008 : ✅ RTMP callback auth fail-closed, header-only, constant-time
- HIGH-009/010 : ✅ Co-écoute host vérification + self-strike bloqué
- MEDIUM-001 : ✅ crypto/rand pour recovery codes 2FA
- MEDIUM-009/010 : ✅ Free trial reuse check + WebSocket re-validation 60s 12-15. ✅ Pagination caps, metrics IP, CI SHA pinning, CSP hardening
Phase 3 — Backlog ✅ QUASI-COMPLÈTE
16-29. ✅ Email masking, k-anonymité analytics, password policy FE/BE, dotenv→dotenvy, ES auth, ClamAV pinned, RabbitMQ mgmt UI removed 30. ⚠️ LOW-002 : Hyperswitch version notée — mise à jour nécessite tests d'intégration paiement
Matrice mise à jour le 2026-03-12 — Réf. PENTEST_REPORT_VEZA_v0.12.6.md