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.
| Approche | Cible | Moment | Ce qu'elle détecte | Limites |
|---|---|---|---|---|
| SAST | le code source | développement | injections, secrets, motifs dangereux | faux positifs, contexte d'exécution ignoré |
| DAST | l'application déployée | recette, production | failles exploitables, mauvaises configurations | couverture limitée, lent |
| SCA | les dépendances | construction | vulnérabilités connues des bibliothèques | ne voit que le connu |
| Fuzzing | les entrées et interfaces | tests | comportements inattendus, plantages, cas limites | gourmand 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égorie | Exemples | Pourquoi le SAST est efficace |
|---|---|---|
| Injections | SQL, XSS, injection de commandes | motif reconnaissable : concaténation de chaînes avec une entrée utilisateur |
| Secrets en dur | clés d'API, jetons, mots de passe | formats connus et expressions régulières |
| Cryptographie faible | MD5, SHA-1, DES | appels à des fonctions connues comme obsolètes |
| Mauvaises pratiques | eval(), désérialisation non sécurisée | fonctions 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égration | Avantage | Inconvénient |
|---|---|---|
| Éditeur, en temps réel | retour immédiat, contexte frais | peut ralentir l'éditeur |
| Pré-commit | bloque avant l'envoi | frustrant si trop strict |
| Intégration continue | revue systématique | retour plus tardif |
| Analyse nocturne | analyse approfondie | dé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égorie | Exemples | Pourquoi le DAST est nécessaire |
|---|---|---|
| Injections exploitables | SQL, XSS qui passent vraiment | il valide que la faille est réellement exploitable |
| Mauvaises configurations | en-têtes manquants, CORS permissif | c'est de la configuration d'exécution, absente du code |
| Authentification faible | fixation de session, jetons prévisibles | comportement observable seulement à l'exécution |
| Fuites d'information | traces d'exception, versions exposées | ré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.
| Environnement | Usage | Fréquence |
|---|---|---|
| Poste de développement | tests ciblés sur les nouveautés | à la demande |
| Recette, pré-production | scan complet avant livraison | à chaque version candidate |
| Production | supervision continue, test d'intrusion | hebdomadaire 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.
| Incident | Ce 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.
| Information | Description | Utilité |
|---|---|---|
| CVE | vulnérabilité publiée avec un identifiant unique | identifier les failles connues |
| CVSS | score de sévérité de 0 à 10 | prioriser par criticité |
| EPSS | probabilité d'exploitation sous 30 jours | prioriser par risque réel |
| Licence | type de licence du composant | conformité juridique |
| Dépendances transitives | les dépendances de vos dépendances | visibilité 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ères | Action |
|---|---|---|
| P0, critique | CVSS ≥ 9,0 et (EPSS > 10 % ou présence au catalogue KEV) | correctif immédiat, déploiement bloqué |
| P1, haute | CVSS ≥ 7,0 et dépendance directe | correctif sous 7 jours |
| P2, moyenne | CVSS ≥ 4,0 ou dépendance transitive critique | correctif sous 30 jours |
| P3, basse | CVSS < 4,0, aucun exploit connu | maintenance 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.
| Type | Description | Exemple |
|---|---|---|
| Aveugle | données totalement aléatoires | octets aléatoires envoyés à un analyseur |
| Guidé par format | données aléatoires respectant une structure | JSON valide, valeurs aléatoires |
| Guidé par couverture | adapte les entrées pour explorer plus de code | AFL, libFuzzer |
| Sur interface | teste les points d'entrée REST ou GraphQL depuis leur spécification | RESTler |
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étrique | Description | Cible |
|---|---|---|
| Délai de détection | entre l'introduction et la détection | moins de 24 h pour le critique |
| Délai de correction | entre la détection et la correction | moins de 7 jours pour le critique |
| Taux de faux positifs | alertes non pertinentes | moins de 10 % |
| Couverture | part du code analysée | plus de 90 % |
| Dette de vulnérabilités | failles connues non corrigées | tendance 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.
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.
[ METTRE EN PRATIQUE ]
Placer quatre familles de tests
3 étapes · 30 min · 120 XP
[ CETTE LEÇON DANS LES PARCOURS ]