Analyse de sécurité
Guide de l'analyse de sécurité CodeQL et des bonnes pratiques de sécurité pour le thème Zer0-Mistakes.
Table of Contents
Analyse de sécurité
Le thème Zer0-Mistakes utilise GitHub CodeQL pour l’analyse automatisée des vulnérabilités de sécurité dans plusieurs langages.
Vue d’ensemble de CodeQL
CodeQL est le moteur d’analyse sémantique de code de GitHub qui détecte les vulnérabilités de sécurité dans votre base de code.
Langages analysés
| Langage | Mode de compilation | Couverture |
|---|---|---|
| Ruby | Aucun (interprété) | Code du gem, plugins |
| JavaScript/TypeScript | Aucun | Ressources frontend |
| Python | Aucun | Scripts, utilitaires |
| GitHub Actions | Aucun | Fichiers de workflow |
Configuration du workflow
Déclencheurs
L’analyse CodeQL s’exécute :
- À chaque push vers
main - À chaque pull request vers
main - Hebdomadairement (dimanche à 1h37 UTC)
Fichier de workflow
name: "CodeQL Advanced"
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '37 1 * * 0'
jobs:
analyze:
runs-on: ubuntu-latest
permissions:
security-events: write
packages: read
actions: read
contents: read
strategy:
matrix:
include:
- language: javascript-typescript
- language: ruby
- language: python
- language: actions
Consulter les résultats
Onglet Security de GitHub
- Accédez à l’onglet Security du dépôt
- Cliquez sur Code scanning alerts
- Examinez les vulnérabilités par gravité
Niveaux de gravité des alertes
| Niveau | Action requise |
|---|---|
| Critique | Corriger immédiatement |
| Élevé | Corriger avant la prochaine version |
| Moyen | Corriger lors du prochain sprint |
| Faible | Suivre et corriger quand c’est possible |
Types de vulnérabilités courants
Ruby
- Injection SQL
- Injection de commande
- Traversée de répertoire
- Désérialisation non sécurisée
JavaScript
- Cross-site scripting (XSS)
- Pollution de prototype
- Génération aléatoire non sécurisée
- Problèmes de manipulation du DOM
GitHub Actions
- Injection de script
- Exposition d’identifiants
- Checkout non sécurisé
Corriger les vulnérabilités
Exemple : injection SQL
Code vulnérable :
# BAD: User input directly in query
User.where("name = '#{params[:name]}'")
Code corrigé :
# GOOD: Parameterized query
User.where(name: params[:name])
Exemple : prévention du XSS
Code vulnérable :
// BAD: Direct HTML insertion
element.innerHTML = userInput;
Code corrigé :
// GOOD: Text content only
element.textContent = userInput;
Bonnes pratiques de sécurité
Gestion des dépendances
# Audit Ruby dependencies
bundle audit check --update
# Update dependencies
bundle update
Gestion des secrets
- Ne jamais valider de secrets dans le dépôt
- Utilisez GitHub Secrets pour les valeurs sensibles
- Faites tourner les identifiants régulièrement
Validation des entrées
- Validez toutes les entrées utilisateur
- Assainissez les données avant leur affichage
- Privilégiez les listes d’autorisation aux listes de blocage
Requêtes personnalisées
Vous pouvez ajouter des requêtes CodeQL personnalisées pour des vérifications spécifiques au projet :
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: $
queries: security-extended,security-and-quality
Rejet des alertes
Pour rejeter un faux positif :
- Accédez à l’alerte dans l’onglet Security
- Cliquez sur Dismiss alert
- Sélectionnez la raison :
- Ne sera pas corrigé
- Faux positif
- Utilisé dans les tests
Dépannage
Délai d’analyse dépassé
Pour les grandes bases de code :
- Utilisez des runners plus puissants
- Excluez les répertoires non essentiels
- Répartissez l’analyse par langage
Échecs de build
Si un build manuel est requis :
- name: Run manual build steps
if: matrix.build-mode == 'manual'
run: |
bundle install
bundle exec jekyll build
Réponse de sécurité
Signalement des vulnérabilités
Si vous découvrez une vulnérabilité de sécurité :
- N’ouvrez pas de ticket public
- Signalez les problèmes de sécurité en privé par e-mail
- Suivez le principe de divulgation responsable
Avis de sécurité
Pour les problèmes critiques :
- Créez un Security Advisory
- Demandez un CVE si nécessaire
- Publiez le correctif et l’avis simultanément
Ressources associées
Voir aussi
- [[Development]]
- [[Dependency Updates]]
- [[CI/CD Pipeline]]