CaenHackYouAcademy
DevSecOps

Tests de sécurité automatisés

SAST, DAST, SCA : ce que chacun trouve, et ce qu'il rate.

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. Pourtant, le délai moyen de remédiation d'une faille critique dépasse encore cinquante 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.

Quatre approches complémentaires

Chacune détecte des catégories de vulnérabilités différentes, à des moments différents du cycle. Comprendre leurs forces et leurs angles morts est la condition d'une stratégie efficace.

ApprocheCibleMomentCe qu'elle détecteLimites
SASTle code sourcedéveloppementinjections, secrets, motifs dangereuxfaux positifs, contexte d'exécution ignoré
DASTl'application déployéerecette, productionfailles exploitables, mauvaises configurationscouverture limitée, lent
SCAles dépendancesconstructionvulnérabilités connues des bibliothèquesne voit que le connu
Fuzzingles entrées et interfacestestscomportements inattendus, plantages, cas limitesgourmand en ressources

Quatre angles d'attaque du même problème.

Chaque famille a son moment : les déplacer ne les rend pas plus efficaces, seulement plus coûteuses.

Complémentarité, pas exclusivité

Aucune approche ne suffit seule. Une injection SQL peut être vue par le SAST (motif dans le code) et par le DAST (exploitation réelle). Une vulnérabilité critique sera vue par le SCA, mais pas son exploitabilité dans votre contexte. C'est leur combinaison qui offre une couverture utile.

SAST : analyse statique du code

Le SAST analyse le code sans l'exécuter : il en construit un modèle abstrait et y recherche des motifs connus de vulnérabilités.

CatégorieExemplesPourquoi le SAST est efficace
InjectionsSQL, XSS, injection de commandesmotif reconnaissable : concaténation de chaînes avec une entrée utilisateur
Secrets en durclés d'API, jetons, mots de passeformats connus et expressions régulières
Cryptographie faibleMD5, SHA-1, DESappels à des fonctions connues comme obsolètes
Mauvaises pratiqueseval(), désérialisation non sécuriséefonctions précises, mises en liste noire

Le point commun : ce sont des motifs lisibles dans le texte du code.

Trois angles morts

Le contexte d'exécution : une entrée validée trois fichiers plus loin, et le SAST ne fait pas le lien. Les faux positifs : sans contexte, il signale des problèmes qui n'en sont pas — un eval() appliqué à une constante n'est pas dangereux. La logique métier : il ne comprend pas qu'un utilisateur ne devrait pas voir les commandes d'un autre.

Point d'intégrationAvantageInconvénient
Éditeur, en temps réelretour immédiat, contexte fraispeut ralentir l'éditeur
Pré-commitbloque avant l'envoifrustrant si trop strict
Intégration continuerevue systématiqueretour plus tardif
Analyse nocturneanalyse approfondiedétection retardée

Stratégie recommandée : règles légères dans l'éditeur et en pré-commit, analyse complète en intégration.

DAST : tests dynamiques

Le DAST teste l'application en cours d'exécution : il simule les actions d'un attaquant — requêtes malformées, tentatives d'injection, exploration des points d'entrée.

CatégorieExemplesPourquoi le DAST est nécessaire
Injections exploitablesSQL, XSS qui passent vraimentil valide que la faille est réellement exploitable
Mauvaises configurationsen-têtes manquants, CORS permissifc'est de la configuration d'exécution, absente du code
Authentification faiblefixation de session, jetons prévisiblescomportement observable seulement à l'exécution
Fuites d'informationtraces d'exception, versions exposéesréponses HTTP réelles

Ces failles n'existent que lorsque l'application tourne, avec sa configuration réelle.

Ses limites sont symétriques : la couverture — il ne teste que ce qu'il atteint, et un point d'entrée non documenté sera ignoré —, la lenteur — un scan complet peut prendre des heures — et l'environnement — il faut une application déployée et fonctionnelle.

EnvironnementUsageFréquence
Poste de développementtests ciblés sur les nouveautésà la demande
Recette, pré-productionscan complet avant livraisonà chaque version candidate
Productionsupervision continue, test d'intrusionhebdomadaire ou mensuel

Les outils récents déduisent l'usage prévu d'une API depuis sa spécification, mais ne remplacent pas un test d'intrusion humain.

SCA : analyse des dépendances

Le code que vous écrivez représente souvent moins de 20 % de votre application le reste vient de dépendances. Chacune est un vecteur potentiel, et le rythme des incidents s'est nettement accéléré : le rapport 2026 de Sonatype recense plus de 454 000 nouveaux paquets malveillants publiés en 2025, portant le total cumulé bloqué à plus de 1,2 million — une hausse de 75 % en un an.

IncidentCe qu'il a révélé
Log4Shell (2021)une vulnérabilité dans Log4j, présente dans des millions d'applications Java
Spring4Shell (2022)une faille dans le framework Java le plus utilisé
Polyfill.io (2024)une attaque via un réseau de diffusion de contenu très employé
Shai-Hulud (2025)un ver auto-répliquant ayant compromis des centaines de paquets npm en quelques jours, en volant des jetons de publication
axios (2026)un seul compte mainteneur compromis a transformé une bibliothèque à plus de cent millions de téléchargements hebdomadaires en vecteur de diffusion, pendant trois heures

Cinq incidents, une même leçon : la confiance dans une dépendance est une décision, pas un état de fait.

Même les scanners sont des cibles

Début 2026, le scanner Trivy a lui-même été compromis à deux reprises en trois semaines : des attaquants ont réutilisé des identifiants volés pour injecter du code malveillant dans des publications — action de forge et images officielles — avec exfiltration de secrets. Épingler les versions et surveiller les mainteneurs s'applique aussi aux outils censés détecter les vulnérabilités.

InformationDescriptionUtilité
CVEvulnérabilité publiée avec un identifiant uniqueidentifier les failles connues
CVSSscore de sévérité de 0 à 10prioriser par criticité
EPSSprobabilité d'exploitation sous 30 joursprioriser par risque réel
Licencetype de licence du composantconformité juridique
Dépendances transitivesles dépendances de vos dépendancesvisibilité sur la chaîne

Un bon outil ne dit pas seulement « cette bibliothèque a une faille » : il donne de quoi décider.

PrioritéCritèresAction
P0, critiqueCVSS ≥ 9,0 et (EPSS > 10 % ou présence au catalogue KEV)correctif immédiat, déploiement bloqué
P1, hauteCVSS ≥ 7,0 et dépendance directecorrectif sous 7 jours
P2, moyenneCVSS ≥ 4,0 ou dépendance transitive critiquecorrectif sous 30 jours
P3, basseCVSS < 4,0, aucun exploit connumaintenance régulière

Toutes les vulnérabilités ne se valent pas : sans priorisation, une faille théorique coûte autant qu'une faille exploitée.

KEV, *Known Exploited Vulnerabilities*

Le catalogue KEV de la CISA recense les vulnérabilités activement exploitées dans la nature — plus de 1 300 entrées mi-2026, en croissance continue. Une CVE inscrite au KEV, même avec un CVSS modéré, doit être traitée en priorité absolue.

Fuzzing : injecter des données aléatoires

Le fuzzing consiste à envoyer des données aléatoires ou semi-aléatoires à une application pour provoquer des comportements inattendus : plantages, fuites mémoire, exceptions non gérées. Il trouve ce que les autres méthodes manquent — les cas limites (une chaîne de dix millions de caractères, un entier négatif là où on attend un positif), les vulnérabilités inconnues, puisqu'il ne cherche pas un motif connu, et la robustesse générale.

TypeDescriptionExemple
Aveugledonnées totalement aléatoiresoctets aléatoires envoyés à un analyseur
Guidé par formatdonnées aléatoires respectant une structureJSON valide, valeurs aléatoires
Guidé par couvertureadapte les entrées pour explorer plus de codeAFL, libFuzzer
Sur interfaceteste les points d'entrée REST ou GraphQL depuis leur spécificationRESTler

Gourmand en ressources : à réserver au code critique — analyseurs, cryptographie, validation d'entrées.

Orchestrer le tout dans le pipeline

La question n'est pas s'il faut intégrer ces tests, mais comment les orchestrer. 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, un scan trop léger laisse passer l'essentiel.

{Pré-commit : le premier rempart, le plus à gauche.}
repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.28.0
    hooks:
      - id: gitleaks
{Intégration continue : analyse statique et dépendances sur chaque demande de fusion.}
security-scan:
  runs-on: ubuntu-latest
  permissions:
    contents: read
  steps:
    - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
      with:
        persist-credentials: false

    - name: Analyse statique
      uses: semgrep/semgrep-action@713efdd345f3035192eaa63f56867b88e63e4e5d # v1
      with:
        config: p/security-audit

    - name: Analyse des dependances
      run: trivy fs --severity HIGH,CRITICAL --exit-code 1 .
{Recette et analyses nocturnes : ce qui est long ne bloque personne.}
dast-scan:
  needs: deploy-staging
  steps:
    - run: nuclei -u https://staging.example.com -t cves/ -severity critical,high

# Analyses profondes : la nuit, sans bloquer le développement
on:
  schedule:
    - cron: '0 2 * * *'

Mesurer l'efficacité

Mesurer évite de confondre l'activité — le nombre de scans lancés — et le résultat — les vulnérabilités réellement corrigées. Les rapports 2025-2026 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 ces chiffres qu'il s'agit de battre.

MétriqueDescriptionCible
Délai de détectionentre l'introduction et la détectionmoins de 24 h pour le critique
Délai de correctionentre la détection et la correctionmoins de 7 jours pour le critique
Taux de faux positifsalertes non pertinentesmoins de 10 %
Couverturepart du code analyséeplus de 90 %
Dette de vulnérabilitésfailles connues non corrigéestendance descendante

Cinq indicateurs qui mesurent des résultats, pas de l'activité.

À retenir de cette séance

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é à la recette et à la production. SCA : analyse les dépendances, critique pour la chaîne d'approvisionnement. Fuzzing : trouve les cas limites et les failles inconnues, adapté aux analyses nocturnes. Aucune approche ne suffit seule. L'OWASP Top 10:2025 a introduit deux catégories inédites — échecs de la chaîne d'approvisionnement et mauvaise gestion des conditions exceptionnelles : vos règles doivent suivre. Et même les scanners peuvent être compromis : épingler les versions vaut aussi pour vos propres outils.

VérificationQuestion 1 / 3

Réponse unique

Quel test analyse le code source sans l'exécuter, au prix de nombreux faux positifs ?

Indice · Statique veut dire sans exécution.

On this page