Aller au contenu
Culture DevOps high

Tests de sécurité automatisés

17 min de lecture

Une faille critique publiée aujourd'hui a une probabilité médiane d'être exploitée en moins de cinq jours, selon les rapports de vulnérabilités 2025-2026 (Edgescan, Synack). Pourtant, le délai moyen de remédiation d'une faille critique dépasse encore 50 jours dans la plupart des organisations. Ce décalage entre la vitesse d'exploitation et la vitesse de correction est le problème que les tests de sécurité automatisés cherchent à résorber.

Cette page s'adresse aux équipes qui veulent comprendre les quatre familles de tests de sécurité, SAST, DAST, SCA et fuzzing, et savoir quand chacune s'intègre dans le cycle de développement. Vous repartirez avec une grille de lecture pour choisir les bons outils et les orchestrer dans un pipeline CI/CD, sans opposer vélocité et sécurité.

  • Distinguer les quatre piliers des tests de sécurité (SAST, DAST, SCA, fuzzing) et leurs angles morts respectifs
  • Choisir le bon type de test selon la phase du cycle de développement
  • Prioriser les vulnérabilités détectées avec des critères objectifs (CVSS, EPSS, KEV)
  • Intégrer ces tests dans un pipeline CI/CD sans ralentir les livraisons
  • Éviter les pièges classiques (faux positifs, scans qui bloquent tout, angle mort sur la supply chain)

L'analyse de sécurité repose sur quatre approches complémentaires. Chacune détecte des catégories de vulnérabilités différentes, à des moments différents du cycle de développement. Comprendre leurs forces et limites est essentiel pour construire une stratégie efficace.

ApprocheCibleMomentCe qu'elle détecteLimites
SASTCode sourceDéveloppementInjections, secrets, patterns dangereuxFaux positifs, contexte d'exécution ignoré
DASTApplication déployéeStaging/ProdFailles exploitables, misconfigurationsCouverture limitée, lent
SCADépendancesBuildCVE dans les bibliothèques tiercesNe détecte que les vulnérabilités connues
FuzzingEntrées/APIsTestsComportements inattendus, crashs, edge casesGourmand en ressources

Ces catégories ne sont pas figées : le référentiel OWASP Top 10:2025, publié début 2026 en remplacement de l'édition 2021, illustre ce mouvement. Il introduit deux catégories inédites, les échecs de la chaîne d'approvisionnement logicielle et la mauvaise gestion des conditions exceptionnelles, et fusionne le SSRF dans le contrôle d'accès défaillant. Voir OWASP Top 10 appliqué au DevSecOps pour le détail des dix catégories et leur cartographie avec vos outils.

Le SAST (Static Application Security Testing) analyse le code sans l'exécuter. Il parse le code source, construit un modèle abstrait et recherche des patterns connus de vulnérabilités.

Le SAST excelle à trouver certaines catégories de problèmes. Le point commun : ce sont des motifs reconnaissables directement dans le texte du code, sans avoir besoin d'exécuter l'application pour les repérer.

CatégorieExemplesPourquoi SAST est efficace
InjectionsSQL, XSS, Command injectionPatterns reconnaissables : concaténation de strings avec input utilisateur
Secrets hardcodésAPI keys, tokens, passwordsPatterns regex : password = "...", formats connus (AWS, GitHub)
Crypto faibleMD5, SHA1, DESAppels à des fonctions connues comme obsolètes
Mauvaises pratiqueseval(), exec(), désérialisation non sécuriséeFonctions spécifiques blacklistées

Le SAST a des angles morts importants :

  • Contexte d'exécution : Le code user_input = request.get('name') suivi de db.query(f"SELECT * FROM users WHERE name = '{user_input}'") est une injection SQL évidente. Mais si l'input est validé trois fichiers plus loin, SAST peut ne pas faire le lien.

  • Faux positifs : Sans contexte, SAST signale des problèmes qui n'en sont pas. Un eval() utilisé sur une constante n'est pas dangereux.

  • Logique métier : SAST ne comprend pas que "un utilisateur ne devrait pas pouvoir voir les commandes d'un autre".

Le SAST s'intègre à plusieurs niveaux du cycle de développement :

Point d'intégrationAvantageInconvénient
IDE (temps réel)Feedback immédiat, contexte fraisPeut ralentir l'éditeur
Pre-commitBloque avant le pushPeut frustrer si trop strict
CI (Pull Request)Revue systématiqueFeedback plus tardif
Scheduled (nightly)Analyse approfondieDétection retardée

Le DAST (Dynamic Application Security Testing) teste l'application en cours d'exécution. Il simule les actions d'un attaquant : envoie des requêtes malformées, tente des injections, explore les endpoints.

Le DAST trouve ce que le SAST manque. Ces failles ont un point commun : elles n'existent que lorsque l'application tourne réellement, avec sa configuration et son environnement d'exécution, ce qu'une simple lecture du code ne peut pas révéler.

CatégorieExemplesPourquoi DAST est nécessaire
Injections exploitablesSQL, XSS qui passent vraimentValide que la faille est réellement exploitable
MisconfigurationsHeaders manquants, CORS permissifConfiguration runtime, pas dans le code
Authentification faibleSession fixation, tokens prédictiblesComportement runtime
Fuites d'informationStack traces, versions exposéesRéponses HTTP réelles

Le DAST a aussi ses angles morts :

  • Couverture : Il ne teste que ce qu'il peut atteindre. Un endpoint non documenté ou une fonctionnalité derrière une authentification complexe peut être ignoré.

  • Lenteur : Contrairement au SAST qui analyse du texte, le DAST envoie des requêtes réelles. Un scan complet peut prendre des heures.

  • Environnement : Il faut une application déployée et fonctionnelle. Impossible de tester du code non encore intégré.

Le DAST s'utilise plus tard dans le cycle que le SAST. Une tendance récente mérite d'être connue : des outils DAST nouvelle génération analysent désormais la spécification OpenAPI d'une API pour déduire son usage prévu, et testent la logique métier plutôt que de se limiter à une liste d'endpoints devinés. Cela réduit la configuration manuelle, mais ne remplace pas un pentest humain sur les scénarios les plus critiques.

EnvironnementUsageFréquence
Développement localTests ciblés sur nouvelles fonctionnalitésÀ la demande
Staging/Pre-prodScan complet avant releaseChaque release candidate
ProductionMonitoring continu, pentestHebdomadaire/mensuel

Le SCA (Software Composition Analysis) analyse les bibliothèques tierces utilisées par votre application. Il compare vos dépendances aux bases de données de vulnérabilités connues (CVE). C'est un pilier critique du DevSecOps moderne, et c'est aussi celui qui a le plus évolué ces deux dernières années sous la pression des attaques de chaîne d'approvisionnement.

Le code que vous écrivez représente souvent moins de 20 % de votre application. Le reste vient de dépendances : frameworks, bibliothèques, utilitaires. Chaque dépendance est un vecteur potentiel de vulnérabilités, et le rythme des incidents s'est nettement accéléré.

Le rapport 2026 de Sonatype recense plus de 454 000 nouveaux paquets open source malveillants publiés en 2025, portant le total cumulé bloqué à plus de 1,2 million, soit une hausse de 75 % sur un an. Quelques incidents marquants illustrent cette dynamique :

  • Log4Shell (2021) : vulnérabilité dans Log4j, présente dans des millions d'applications Java.
  • Spring4Shell (2022) : faille dans Spring Framework, framework Java le plus utilisé.
  • Polyfill.io (2024) : supply chain attack via un CDN JavaScript largement utilisé.
  • Shai-Hulud (septembre 2025) : ver auto-réplicant ayant compromis plusieurs centaines de paquets npm en quelques jours, en volant des tokens de publication pour se propager de dépôt en dépôt sans même nécessiter de serveur de commande et contrôle.
  • Compromission d'axios (mars 2026) : un seul compte mainteneur compromis a transformé cette bibliothèque HTTP très populaire, plus de 100 millions de téléchargements par semaine, en vecteur de diffusion d'un cheval de Troie d'accès distant pendant environ trois heures.

Ce dernier point mérite un détour : même les outils de sécurité ne sont pas à l'abri. Début 2026, le scanner Trivy a lui-même été compromis à deux reprises en trois semaines, des attaquants ayant réutilisé des identifiants volés pour injecter du code malveillant dans des releases, dans l'action GitHub trivy-action et dans des images Docker officielles, avec exfiltration de secrets vers un domaine de commande et contrôle typosquatté. La leçon : épingler les versions (par tag précis, idéalement par digest) et surveiller les mainteneurs s'applique aussi aux outils qui servent à détecter les vulnérabilités, pas seulement aux dépendances applicatives. Voir Sécurité de la supply chain logicielle pour approfondir ces mécanismes de défense.

Au-delà du simple constat « cette bibliothèque a une faille connue », un bon outil SCA remonte plusieurs informations complémentaires qui servent ensuite à prioriser le patch : la sévérité technique, la probabilité réelle d'exploitation, la conformité de licence et la profondeur de la dépendance dans votre arborescence.

InformationDescriptionUtilité
CVEVulnérabilités publiées avec identifiant uniqueIdentifier les failles connues
CVSSScore de sévérité (0-10)Prioriser par criticité
EPSSProbabilité d'exploitation sous 30 jours (v4, depuis mars 2025)Prioriser par risque réel
LicenceType de licence (MIT, GPL, propriétaire)Conformité juridique
Dépendances transitivesDépendances de vos dépendancesVisibilité sur la supply chain

Toutes les CVE ne se valent pas. Une stratégie efficace priorise selon plusieurs critères, pour éviter que l'équipe passe autant de temps sur une faille théorique que sur une faille activement exploitée. Voir aussi Gestion des vulnérabilités CVE, du triage au patch pour un processus détaillé.

PrioritéCritèresAction
P0 - CritiqueCVSS ≥ 9.0 ET (EPSS > 10 % OU KEV)Patch immédiat, bloquer le déploiement
P1 - HauteCVSS ≥ 7.0 ET dépendance directePatch sous 7 jours
P2 - MoyenneCVSS ≥ 4.0 OU dépendance transitive critiquePatch sous 30 jours
P3 - BasseCVSS < 4.0, pas d'exploit connuInclure dans maintenance régulière

Fuzzing : tests par injection de données aléatoires

Section intitulée « Fuzzing : tests par injection de données aléatoires »

Le fuzzing (ou fuzz testing) consiste à envoyer des données aléatoires ou semi-aléatoires à une application pour provoquer des comportements inattendus : crashs, fuites mémoire, exceptions non gérées.

Le fuzzing trouve ce que les autres méthodes manquent :

  • Edge cases : Que se passe-t-il avec une string de 10 millions de caractères ? Un entier négatif là où on attend un positif ?
  • Vulnérabilités inconnues : Contrairement au SAST/SCA qui cherchent des patterns connus, le fuzzing peut découvrir des vulnérabilités nouvelles (0-days).
  • Robustesse : Au-delà de la sécurité, le fuzzing améliore la qualité générale en trouvant des bugs de stabilité.

Le fuzzing a lui aussi évolué : au-delà des générateurs purement aléatoires, une génération d'outils guidés par l'IA propose désormais des mutations construites à partir d'une compréhension sémantique de la cible, ce qui permet de découvrir des classes de vulnérabilités que les seules métriques de couverture de code manquent.

TypeDescriptionExemple
Dumb fuzzingDonnées totalement aléatoiresBytes aléatoires envoyés à un parser
Smart fuzzingDonnées aléatoires respectant un formatJSON valide avec valeurs aléatoires
Coverage-guidedAdapte les inputs pour explorer plus de codeAFL, libFuzzer
API fuzzingTeste les endpoints REST/GraphQL en s'appuyant sur les specs OpenAPIBurp, RESTler

Le fuzzing est gourmand en ressources. Il est particulièrement pertinent pour :

  • Code critique : Parsers, cryptographie, validation d'entrées
  • Bibliothèques partagées : Code utilisé par de nombreux projets
  • Avant release majeure : Validation approfondie
  • Nightly builds : En parallèle du développement

La question n'est pas si intégrer ces tests, mais comment les orchestrer efficacement. Une intégration mal pensée génère plus de friction que de sécurité : bloquer chaque commit avec un scan complet ralentit l'équipe, alors qu'un scan trop léger laisse passer l'essentiel. Voici une stratégie éprouvée, détaillée dans Pipeline CI/CD sécurisé :

  1. Pre-commit : détection de secrets

    Premier rempart, le plus à gauche. Bloque les commits contenant des secrets avant qu'ils n'atteignent le dépôt.

    .pre-commit-config.yaml
    repos:
    - repo: https://github.com/gitleaks/gitleaks
    rev: v8.28.0
    hooks:
    - id: gitleaks
  2. CI (Pull Request) : SAST + SCA

    Chaque PR est analysée automatiquement. Les vulnérabilités critiques bloquent le merge.

    # GitHub Actions
    security-scan:
    runs-on: ubuntu-latest
    permissions:
    contents: read
    steps:
    - uses: actions/checkout@v4
    with:
    persist-credentials: false
    # SAST avec Semgrep
    - name: Run Semgrep
    uses: semgrep/semgrep-action@v1
    with:
    config: p/security-audit
    # SCA avec Trivy
    - name: Run Trivy
    run: |
    trivy fs --severity HIGH,CRITICAL --exit-code 1 .
  3. Staging : DAST

    Une fois l'application déployée en staging, les tests dynamiques peuvent s'exécuter.

    dast-scan:
    needs: deploy-staging
    runs-on: ubuntu-latest
    steps:
    - name: DAST scan
    run: |
    nuclei -u https://staging.example.com -t cves/ -severity critical,high
  4. Nightly : fuzzing et scans approfondis

    Les analyses longues s'exécutent la nuit, sans bloquer le développement.

    on:
    schedule:
    - cron: '0 2 * * *' # Tous les jours à 2h
    jobs:
    deep-scan:
    # Analyse complète, tous les seuils

Mesurer l'efficacité de vos tests de sécurité évite de confondre activité (nombre de scans lancés) et résultat (vulnérabilités réellement corrigées). Les rapports 2025-2026 (Edgescan, Synack) situent le délai moyen de remédiation des failles critiques autour de 55 jours, et près d'un tiers des vulnérabilités restent ouvertes plus de 180 jours ; ce sont les seuils à challenger avec les métriques suivantes. Voir aussi KPIs sécurité DevSecOps pour un tableau de bord complet.

MétriqueDescriptionCible
MTTD (Mean Time To Detect)Délai entre introduction et détection< 24h pour critique
MTTR (Mean Time To Remediate)Délai entre détection et correction< 7 jours pour critique
Taux de faux positifsAlertes non pertinentes< 10 %
Couverture% du code analysé par SAST> 90 %
Dette de vulnérabilitésVulnérabilités connues non corrigéesTendance descendante
  • SAST : analyse le code source, rapide, beaucoup de faux positifs, adapté au développement.
  • DAST : teste l'application réelle, lent, peu de faux positifs, adapté au staging/prod.
  • SCA : analyse les dépendances, critique pour la supply chain, adapté au CI/CD.
  • Fuzzing : trouve les edge cases et 0-days, adapté aux phases nightly/release.
  • Combinaison : aucune approche n'est suffisante seule.
  • OWASP Top 10:2025 a introduit deux catégories inédites, échecs de la supply chain et mauvaise gestion des conditions exceptionnelles : vos règles SAST/DAST doivent suivre cette évolution.
  • Même les scanners de sécurité peuvent être compromis (cas Trivy en 2026) : épingler les versions et vérifier les mainteneurs reste indispensable, y compris pour vos propres outils.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn