93 lines
4.4 KiB
Markdown
93 lines
4.4 KiB
Markdown
|
|
# Matrice de Remédiation — VEZA v0.12.6
|
||
|
|
|
||
|
|
**Date** : 2026-03-13
|
||
|
|
**Référence** : PENTEST_REPORT_VEZA_v0.12.6.md
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Priorité de remédiation
|
||
|
|
|
||
|
|
Les actions sont classées par **priorité d'implémentation** (combinaison sévérité + facilité de fix + impact business).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Actions Prioritaires (P1 — Avant release v1.0.0)
|
||
|
|
|
||
|
|
| ID | Finding | Sévérité | Fichier(s) | Action | Effort | Responsable |
|
||
|
|
|----|---------|----------|------------|--------|--------|-------------|
|
||
|
|
| REM-001 | HIGH-001 | HIGH | `handlers/common.go:601-610` | Remplacer `c.GetHeader("X-Forwarded-For")` par `c.ClientIP()` + configurer `SetTrustedProxies()` | 1h | Backend |
|
||
|
|
| REM-002 | HIGH-002 | HIGH | `user_service.go:75`, `social_service.go:321`, `types/stats.go:31` | Supprimer `followers_count`/`following_count` de `PublicUserResponse` et `SuggestionUser`. Exposer uniquement dans le dashboard privé. | 2h | Backend |
|
||
|
|
| REM-003 | MEDIUM-001 | MEDIUM | `auth/service.go:156, :986` | Remplacer `bcrypt.DefaultCost` par `bcryptCost` (12) importé depuis `password_service.go` ou une constante partagée | 30min | Backend |
|
||
|
|
| REM-004 | MEDIUM-004 | MEDIUM | `social/models.go:32` | Ajouter `json:"-"` sur `LikeCount` du modèle `Post` ou créer une DTO publique sans ce champ | 30min | Backend |
|
||
|
|
|
||
|
|
**Effort total P1** : ~4h
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Actions Recommandées (P2 — Sprint suivant)
|
||
|
|
|
||
|
|
| ID | Finding | Sévérité | Fichier(s) | Action | Effort |
|
||
|
|
|----|---------|----------|------------|--------|--------|
|
||
|
|
| REM-005 | MEDIUM-002 | MEDIUM | `sast.yml`, `security-scan.yml`, `cd.yml`, `stream-ci.yml`, `container-scan.yml`, `staging-validation.yml` | Épingler les 12+ GitHub Actions par SHA. Configurer Dependabot pour les mises à jour. | 2h |
|
||
|
|
| REM-006 | MEDIUM-003 | MEDIUM | `.env.production:40` | Renommer en `.env.local` ou `.env.development`. Mettre les valeurs HTTPS par défaut. Ajouter validation au startup. | 1h |
|
||
|
|
| REM-007 | MEDIUM-005 | MEDIUM | `handlers/dashboard.go:149-150` | Créer `TrackPreviewPublic` (sans métriques) et `TrackPreviewPrivate` (avec métriques). Utiliser le bon type selon le contexte. | 1h |
|
||
|
|
| REM-008 | LOW-001 | LOW | `config/config.go:138` | Passer `CookieSameSite` de `lax` à `strict` si pas de flow OAuth redirect cross-site | 30min |
|
||
|
|
| REM-009 | LOW-003 | LOW | `utils/utils.go:57` | Aligner `HashPassword()` sur `bcryptCost = 12` ou la supprimer si non utilisée en prod | 15min |
|
||
|
|
|
||
|
|
**Effort total P2** : ~5h
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Actions Optionnelles (P3 — Backlog)
|
||
|
|
|
||
|
|
| ID | Finding | Sévérité | Fichier(s) | Action | Effort |
|
||
|
|
|----|---------|----------|------------|--------|--------|
|
||
|
|
| REM-010 | LOW-002 | LOW | `migrations/*.sql` | Auditer les 30+ CASCADE DELETE. Remplacer par RESTRICT/SET NULL pour orders, payments, subscriptions | 4h |
|
||
|
|
| REM-011 | INFO-001 | INFO | `veza_back_api_db/` | Ajouter au `.gitignore`, purger de l'historique git avec BFG | 1h |
|
||
|
|
| REM-012 | INFO-002/003 | INFO | `cmd/tools/hash_gen/main.go`, `cmd/tools/create_test_user/main.go` | Aligner sur bcryptCost 12 | 15min |
|
||
|
|
| REM-013 | LOW-004 | LOW | `staging-validation.yml:35` | Épingler `docker/setup-buildx-action` par SHA | 10min |
|
||
|
|
|
||
|
|
**Effort total P3** : ~5.5h
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Résumé par effort
|
||
|
|
|
||
|
|
| Priorité | Findings | Effort total |
|
||
|
|
|----------|----------|--------------|
|
||
|
|
| P1 (Bloquant v1.0.0) | 4 | ~4h |
|
||
|
|
| P2 (Sprint suivant) | 5 | ~5h |
|
||
|
|
| P3 (Backlog) | 4 | ~5.5h |
|
||
|
|
| **Total** | **13** | **~14.5h** |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Workflow de remédiation
|
||
|
|
|
||
|
|
```
|
||
|
|
1. REM-001 (IP spoofing fix) → Test: vérifier rate limit avec X-Forwarded-For forgé
|
||
|
|
2. REM-002 (followers_count) → Test: vérifier que /api/v1/users/:id ne retourne plus followers_count
|
||
|
|
3. REM-003 (bcrypt cost) → Test: vérifier que le hash créé a un cost de 12
|
||
|
|
4. REM-004 (Post like_count) → Test: vérifier que les posts API n'exposent pas like_count
|
||
|
|
5. REM-005 (GitHub Actions SHA) → Test: vérifier que tous les `uses:` contiennent un SHA
|
||
|
|
6. REM-006 (.env.production) → Test: vérifier que le startup refuse HTTP origins en production
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Métriques de suivi
|
||
|
|
|
||
|
|
| Métrique | Valeur actuelle | Cible v1.0.0 |
|
||
|
|
|----------|----------------|---------------|
|
||
|
|
| Findings CRITICAL | 0 | 0 |
|
||
|
|
| Findings HIGH | 2 | 0 |
|
||
|
|
| Findings MEDIUM | 5 | 0 |
|
||
|
|
| Findings LOW | 4 | ≤ 2 |
|
||
|
|
| Actions pinned by SHA | ~60% | 100% |
|
||
|
|
| bcrypt cost consistency | 2 valeurs (10, 12) | 1 valeur (12) |
|
||
|
|
| Public popularity metrics | 3 endpoints | 0 endpoints |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
*Matrice générée le 2026-03-13 — VEZA v0.12.6*
|