veza/veza-backend-api/docs/VULNERABILITY_SCANNING.md
2025-12-12 21:34:34 -05:00

6 KiB

Vulnerability Scanning

Ce document décrit comment scanner les vulnérabilités dans le projet Veza Backend API.

🔒 Scan des Dépendances Go

Installation de govulncheck

go install golang.org/x/vuln/cmd/govulncheck@latest

Ou via le Makefile :

make install-tools

Exécution locale

Scan complet

govulncheck ./...

Scan avec rapport détaillé

govulncheck -json ./... > vulncheck-report.json
govulncheck ./... > vulncheck-report.txt

Via Makefile

make security

Cette commande exécute :

  • gosec pour l'analyse statique de sécurité
  • govulncheck pour les vulnérabilités des dépendances

Interprétation des résultats

  • CRITICAL : Vulnérabilité critique nécessitant une action immédiate
  • HIGH : Vulnérabilité élevée nécessitant une attention prioritaire
  • MEDIUM : Vulnérabilité moyenne à traiter
  • LOW : Vulnérabilité faible, peut être traitée plus tard

Correction des vulnérabilités

  1. Identifier la dépendance vulnérable dans le rapport
  2. Vérifier si une version corrigée existe :
    go list -m -u <package>
    
  3. Mettre à jour la dépendance :
    go get -u <package>@latest
    go mod tidy
    
  4. Re-scanner pour vérifier :
    govulncheck ./...
    

🐳 Scan des Images Docker

Installation de Trivy

Via Homebrew (macOS)

brew install trivy

Via Docker

docker pull aquasec/trivy:latest

Via script d'installation

# Linux
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo "deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy

Exécution locale

Construire l'image Docker

make docker-build
# ou
docker build -t veza-backend-api:scan .

Scanner l'image

# Scan avec sortie table
trivy image veza-backend-api:scan

# Scan avec sortie JSON
trivy image -f json -o trivy-report.json veza-backend-api:scan

# Scan uniquement CRITICAL et HIGH
trivy image --severity CRITICAL,HIGH veza-backend-api:scan

# Scan avec ignore des vulnérabilités non corrigées
trivy image --ignore-unfixed veza-backend-api:scan

Via Docker (si Trivy n'est pas installé localement)

docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  aquasec/trivy:latest image veza-backend-api:scan

Scan d'un fichier Dockerfile

trivy fs --security-checks vuln .

🔄 CI/CD

GitHub Actions

Le workflow .github/workflows/vulnerability-scan.yml exécute automatiquement :

  1. Scan Go (govulncheck) :

    • Sur chaque push/PR vers main ou develop
    • Tous les lundis à 2h UTC (schedule)
    • Bloque le merge si HIGH/CRITICAL trouvées
  2. Scan Docker (Trivy) :

    • Sur chaque push/PR (mode gate)
    • Sur schedule (mode report only)
    • Upload des résultats dans GitHub Security

Déclenchement manuel

# Via GitHub CLI
gh workflow run vulnerability-scan.yml

# Via l'interface GitHub
# Actions > Vulnerability Scan > Run workflow

📊 Exemples de Rapports

Rapport govulncheck

Vulnerability #1: GO-2024-XXXX
  Package: github.com/example/package
  Version: v1.2.3
  Fixed in: v1.2.5
  Severity: HIGH
  Description: Description of the vulnerability
  Call stacks:
    - main.go:42: functionCall()

Rapport Trivy

veza-backend-api:scan (alpine 3.18.0)
Total: 15 (CRITICAL: 2, HIGH: 5, MEDIUM: 6, LOW: 2)

┌─────────────────────┬────────────────┬──────────┬─────────────────────┐
│      Library         │ Vulnerability  │ Severity │   Installed Version │
├─────────────────────┼────────────────┼──────────┼─────────────────────┤
│ openssl              │ CVE-2024-XXXX  │ CRITICAL │ 3.1.0-r0            │
│ libcrypto            │ CVE-2024-YYYY  │ HIGH     │ 3.1.0-r0            │
└─────────────────────┴────────────────┴──────────┴─────────────────────┘

🛠️ Intégration dans le Makefile

Le Makefile inclut déjà une cible security :

make security

Cette commande exécute :

  • gosec : Analyse statique de sécurité
  • govulncheck : Scan des vulnérabilités Go

Pour ajouter le scan Docker :

# Ajouter dans le Makefile
docker-scan: docker-build
	@echo "$(GREEN)🔒 Scan de l'image Docker...$(NC)"
	@trivy image $(DOCKER_IMAGE):$(DOCKER_TAG)

⚠️ Mode "Report Only"

Par défaut, le workflow CI bloque les PRs si des vulnérabilités HIGH/CRITICAL sont trouvées.

Pour activer le mode "report only" (ne bloque pas), modifier le workflow :

- name: Check for HIGH/CRITICAL vulnerabilities
  run: |
    # ... scan ...
    exit 0  # Ne pas bloquer, juste reporter    

📝 Bonnes Pratiques

  1. Scanner régulièrement : Exécuter les scans au moins une fois par semaine
  2. Mettre à jour les dépendances : Maintenir les dépendances à jour
  3. Réviser les rapports : Analyser les vulnérabilités et prioriser les corrections
  4. Documenter les exceptions : Si une vulnérabilité ne peut pas être corrigée immédiatement, documenter pourquoi
  5. Automatiser : Utiliser les workflows CI pour automatiser les scans

🔗 Ressources