Aller au contenu principal
own2pwn
DAST (Dynamic Application Security Testing) : tester une appli en cours d'exécution

DAST (Dynamic Application Security Testing) : tester une appli en cours d'exécution

Le DAST (dynamic application security testing) attaque votre application pendant qu'elle tourne, en boîte noire, comme un vrai attaquant. Ce qu'il trouve, ses angles morts, et où le brancher.

own2pwn9 min de lectureMis à jour le

Là où le scanner s'arrête

Un pentest boîte noire enchaîne les failles qu'aucun DAST ne relie tout seul.

Passer au test réel

Le DAST teste une application pendant qu'elle tourne, de l'extérieur, sans jamais lire son code. Le nom complet le dit déjà : dynamic application security testing, un test de sécurité dynamique, mené en aveugle sur les sources. Concrètement, un scanner part d'une URL, découvre les pages et les paramètres que l'application expose, envoie des requêtes forgées (un guillemet glissé dans un champ de recherche, un <script> dans un formulaire, un chemin tordu vers /admin, un en-tête Host falsifié) et il note tout ce qui réagit de travers. Il ne raisonne que sur ce qui sort par le port 443.

Le terme est resté anglais, même en France, et c'est celui qu'on tape dans Google. Autant l'employer tel quel. Reste à voir, sans le vernis marketing, ce que cette approche attrape vraiment et ce qu'elle laisse filer.

Le DAST, ou l'art de tester sans le code source

La bascule mentale est simple. Une analyse statique lit vos fichiers à froid ; le dynamic application security testing ne lit rien du tout. Il part d'une URL, il crawle l'application pour découvrir ses pages, ses formulaires et ses paramètres, puis il envoie des requêtes malveillantes et observe les réponses. Un code d'erreur SQL qui remonte dans la page, un payload réfléchi tel quel dans le HTML, une redirection qui obéit à un paramètre contrôlé : chaque réaction anormale devient un indice de faille.

C'est une posture de boîte noire. Le scanner ne sait pas si votre back-end est en Go, en PHP ou en Node, il s'en moque : il ne raisonne que sur ce qui sort par le port 443. C'est précisément ce qui le rend crédible. Là où l'analyse statique dit "cette fonction pourrait être vulnérable", le DAST dit "j'ai envoyé cette requête et l'application a mal réagi". La différence entre une hypothèse et une observation.

boite-noire-dast
Scanner DAST
Crawl de la surface
Part d'une URL, suit les liens, recense pages, formulaires et paramètres.
Application
Appli déployée qui tourne
Reçoit les payloads, exécute sa logique réelle, renvoie une réponse HTTP.
Scanner DAST
Analyse du comportement
Erreur SQL, payload réfléchi, timing anormal : le scanner en déduit la faille.
Rapport
Finding avec preuve
La requête exacte + la réponse, rejouables. Pas de vue sur la ligne de code fautive.
Le scanner DAST ne voit jamais le code : il découvre la surface, injecte, et déduit la faille de la réponse.

Notez la dernière étape : un bon scanner ne se contente pas de repérer un motif suspect, il rejoue l'attaque pour confirmer. C'est ce rejeu qui distingue un outil sérieux d'un générateur d'alertes. Les classiques du marché, du OWASP ZAP open-source aux solutions DAST commerciales, reposent tous sur cette boucle : découvrir, injecter, observer, confirmer.

Ce que le DAST trouve vraiment bien

Le test dynamique brille sur tout ce qui ne se voit qu'en conditions réelles, quand l'application, son serveur web, sa configuration et son runtime sont assemblés et vivants. Ses terrains de chasse :

  • Les injections classiques. Injection SQL, injection de commande, traversée de répertoire : le scanner envoie une charge, l'application la traite, et la réponse trahit le problème (un message d'erreur du SGBD, une liste de fichiers système, un délai de réponse suspect sur une injection en aveugle).
  • Le Cross-Site Scripting réfléchi. Un payload envoyé dans un paramètre qui revient intact dans le HTML de la réponse : c'est typiquement le genre de XSS que le DAST détecte de façon fiable, parce qu'il voit son injection ressortir à l'écran.
  • Les erreurs de configuration. En-têtes de sécurité absents, cookies sans HttpOnly, méthodes HTTP dangereuses laissées ouvertes, messages d'erreur trop bavards, TLS mal réglé. Tout ça se lit sur le fil, sans jamais toucher au code.
  • Les expositions accidentelles. Un fichier .git accessible, une page d'admin non protégée, une sauvegarde oubliée, une API de debug restée active en préproduction. Le crawl les débusque parce qu'elles répondent, point.

Le point commun de tout ça ? Ce sont des failles qui n'existent pleinement qu'à l'exécution. Une revue de code peut deviner qu'un en-tête manque ; seul un test dynamique confirme que la vraie réponse du vrai serveur, derrière son vrai reverse-proxy, ne le pose pas. Beaucoup de ces catégories sont d'ailleurs au sommet de l'OWASP Top 10, et c'est là que le DAST rend le meilleur service : sur des classes de failles bien cadrées, observables de l'extérieur.

Un finding DAST est moins bruyant, par nature

Quand un scanner statique remonte une alerte, il dit "ce code ressemble à une faille". Quand le DAST en remonte une, il a déclenché le comportement. Le taux de faux positifs est mécaniquement plus bas : s'il prouve une injection, c'est qu'elle a marché. Ça ne veut pas dire zéro faux positif (un timing peut mentir, une page d'erreur peut tromper), mais le signal est bien plus dense que celui du statique.

Ses angles morts, qu'il faut connaître avant de s'y fier

Le DAST a une faiblesse structurelle : il ne voit que ce qu'il atteint. Et il n'atteint que ce qu'il découvre. Tout ce que son crawler ne trouve pas n'est tout simplement jamais testé. Voilà pourquoi la couverture réelle d'un scan dépend directement de la qualité de la découverte.

  • La couverture dépend du crawl. Une single-page application qui construit ses routes en JavaScript, un endpoint d'API non documenté, un workflow accessible seulement après trois formulaires enchaînés : si le crawler ne les voit pas, ils restent hors du champ de tir. La moitié du travail d'un bon scan, c'est de lui donner à manger la vraie surface (une spécification OpenAPI, un enregistrement de session authentifiée).
  • Aucune vue du code. Le DAST ignore pourquoi une faille existe. Il dit "ce paramètre est injectable", jamais "à cause de la ligne 214 qui concatène la requête". Pour le développeur qui doit corriger, c'est un point de départ, pas une localisation.
  • L'authentification et l'état le piègent. Un scanner mal configuré se fait déconnecter au bout de trois requêtes, ou pire, déclenche un mot de passe oublié en boucle. Tester des parcours qui exigent un état précis (panier, tunnel de paiement, back-office multi-rôles) demande une configuration soignée que trop d'équipes négligent.
  • Les failles logiques lui échappent. Un contrôle d'accès cassé où l'utilisateur A lit les données de l'utilisateur B, une remise qu'on peut appliquer deux fois, un workflow qu'on court-circuite : ces bugs métier ne ressemblent à aucun motif d'attaque générique. Le scanner passe à côté parce qu'il ne connaît pas les règles de votre métier.

Et oui, malgré son avantage sur le statique, le DAST produit aussi des faux positifs. Une page qui renvoie toujours 200 OK même sur une URL bidon peut lui faire croire à des vulnérabilités partout ; une injection en aveugle basée sur le temps se déclenche à tort si le réseau ralentit. Un rapport DAST se relit, il ne se signe pas les yeux fermés.

DAST, SAST et IAST : le même problème vu sous trois angles

Prenons le SAST et le DAST côte à côte. L'un lit le code à l'arrêt et voit tout, y compris les chemins jamais exécutés, au prix d'un déluge d'alertes. L'autre attaque l'appli en marche et ne voit que le réellement exposé, au prix des angles morts qu'on vient de lister. L'IAST, lui, joue les intermédiaires en instrumentant le runtime depuis l'intérieur. Aucun n'est meilleur dans l'absolu : ils ne regardent pas l'application au même moment ni depuis le même endroit.

qui voit quoi
CritèreSASTDASTIAST
Mode d'observationIl lit le code à l'arrêt, en boîte blanche.Il attaque l'application en marche, en boîte noire.Un agent vit dans l'application pendant les tests, en boîte grise.
Ce qu'il voitTout le code, y compris le code mort.Ce qui est réellement exposé.Le code atteint en conditions réelles.
Bruit produitUn bruit élevé et beaucoup de faux positifs.Moins de bruit, mais des faux négatifs sur le code non atteint.Les faux positifs les plus bas des trois.
Le statique voit tout le code (même mort), le DAST voit ce qui est vraiment exposé, l'IAST voit le code atteint en vrai.

On a détaillé ce comparatif, faux positifs compris, et ce que l'IA vient y changer, dans l'article pilier SAST, DAST, IAST : comparatif et ce que l'IA change. Si vous hésitez sur lequel déployer en premier, c'est la lecture à faire avant d'acheter quoi que ce soit.

Où le DAST s'insère dans la CI/CD

Contrairement au SAST, le DAST ne peut pas tourner sur chaque commit : il lui faut une application déployée et fonctionnelle pour l'attaquer. On ne le colle donc pas sur la pull request, on le déclenche après le déploiement en staging. La logique du shift-left a ses limites : on décale à gauche ce qui peut l'être (le statique, les secrets, l'analyse des dépendances), et on laisse le dynamique à droite, là où une vraie instance répond.

Concrètement, on cible l'environnement de recette et on ne bloque la promotion vers la production que sur les findings sérieux :

yaml
# Le DAST tourne après déploiement en staging, pas sur la PR
dast:
  stage: deploy
  script:
    - deploy-to-staging
    - run-dast --target https://staging.example.com --report dast.sarif
    - check-findings dast.sarif --fail-on high,critical
  rules:
    - if: '$CI_COMMIT_BRANCH == "staging"'   # jamais sur chaque commit

Un scan complet peut prendre de longues minutes, parfois des heures sur une grosse surface. L'approche qui tient dans la durée : un passage ciblé à chaque déploiement en staging, et un scan exhaustif planifié la nuit ou le week-end, quand personne n'attend le pipeline. Tout le câblage (placement, format SARIF, security gate qui bloque sans noyer les développeurs) est détaillé dans intégrer SAST et DAST dans sa CI/CD.

Ne scannez que ce que vous avez le droit de scanner

Un DAST envoie de vraies attaques. Le lancer sur un système dont vous n'êtes ni propriétaire ni mandaté pour le tester est illégal, et le pointer sur la production sans précaution peut créer des données parasites, saturer des files, déclencher des e-mails en masse. On scanne un environnement dédié, avec un périmètre écrit.

Le DAST face à un vrai pentest, et l'apport de l'IA

Un scanner reste un scanner. Il excelle sur les classes de failles connues et répétables, il tourne vite et souvent, il ne se fatigue jamais. Mais il ne raisonne pas. Il ne va pas enchaîner une fuite d'information anodine, un contrôle d'accès un peu lâche et un upload mal filtré pour construire une chaîne d'exploitation complète. Cette créativité, ce sens du "et si je combinais ça avec ça", reste le domaine du testeur humain. C'est aussi la différence de fond qu'on creuse dans le débat entre automatisation et test réel.

C'est là que l'IA rebat les cartes, non pas en remplaçant le pentester, mais en musclant le scanner. Un scanner dynamique dopé à l'IA cesse d'être un crawler bête : il auto-découvre mieux la surface (y compris les API et les workflows multi-étapes qui piégeaient les vieux moteurs), il adapte ses payloads à la techno détectée au lieu de les envoyer en rafale, et il valide par rejeu avant de crier à la faille. Il commence même à tenter des enchaînements simples que le pattern-matching ne voyait pas. On reste loin de l'intuition humaine, mais on grignote sérieusement le terrain qui séparait le scan du pentest.

Notre position, sans survendre

Chez own2pwn, il n'y a pas de DAST maison. Le test dynamique, on le mène en pentest boîte noire, à la main, là où un humain enchaîne des failles qu'aucun scanner ne relie seul. La plateforme AppSec augmentée par l'IA couvre l'autre versant, le statique et continu : SAST contextuel, analyse des dépendances (SCA), infrastructure-as-code et secrets, avec priorisation des findings par exploitabilité. Deux outils pour deux moments, pas un seul qui prétend tout faire.

À retenir

  • Le DAST (dynamic application security testing) teste une application en cours d'exécution, en boîte noire, sans accès au code : il envoie des requêtes et déduit les failles des réponses.
  • Il brille sur les failles d'exécution : injections, XSS réfléchi, erreurs de configuration, expositions accidentelles. Ses findings sont moins bruyants que ceux du statique, car il déclenche vraiment le comportement.
  • Ses limites : aucune vue du code, couverture dépendante du crawl, angles morts sur les workflows authentifiés et les failles logiques, et des faux positifs à relire malgré tout.
  • Il complète le SAST et l'IAST au lieu de les remplacer : chacun regarde l'appli à un moment et depuis un endroit différents.
  • Dans la CI/CD, il tourne après déploiement en staging, jamais sur chaque commit ; l'IA en améliore la découverte et la validation, mais ne remplace pas un pentest humain sur les chaînes d'exploitation.

Le test dynamique, own2pwn le pratique en pentest plutôt qu'avec un scanner maison : c'est là qu'un humain enchaîne les failles qu'aucun DAST ne relie tout seul. Pour le versant statique et continu (SAST, SCA, IaC, secrets), la plateforme AppSec augmentée par l'IA prend le relais. Si vous préférez d'abord parler de votre contexte à un humain, la page contact est là pour ça.

Questions fréquentes

Qu'est-ce que le DAST ?

DAST signifie dynamic application security testing. C'est un test de sécurité qui attaque une application pendant qu'elle tourne, en boîte noire, sans accès au code source. Un scanner découvre les pages et les paramètres exposés, envoie des requêtes forgées et déduit les failles des réponses de l'application.

Quelle différence entre DAST et SAST ?

Le SAST lit le code à l'arrêt et voit tous les chemins, même ceux jamais exécutés, au prix de nombreux faux positifs. Le DAST attaque l'application en marche et ne voit que ce qui est réellement exposé. L'un raisonne sur le code, l'autre sur le comportement observé. Ils se complètent plus qu'ils ne se remplacent.

Quelles vulnérabilités le DAST détecte-t-il ?

Il est efficace sur les failles d'exécution : injections SQL et de commande, cross-site scripting réfléchi, erreurs de configuration comme des en-têtes manquants ou un TLS mal réglé, et expositions accidentelles telles qu'un fichier .git ou une page d'admin ouverte. Il passe en revanche à côté des failles de logique métier.

Le DAST remplace-t-il un pentest ?

Non. Un scanner excelle sur les classes de failles connues et répétables, mais il ne raisonne pas et n'enchaîne pas plusieurs faiblesses pour construire une chaîne d'exploitation complète. Cette créativité reste le domaine du testeur humain. Le DAST accélère la couverture de base, le pentest prouve l'impact réel.

Où placer le DAST dans une CI/CD ?

Contrairement au SAST, le DAST a besoin d'une application déployée et fonctionnelle. On ne le lance donc pas sur chaque commit ni sur la pull request, mais après le déploiement en environnement de recette. Un passage ciblé à chaque déploiement et un scan exhaustif planifié la nuit tiennent dans la durée.

DAST ou IAST, lequel choisir ?

L'IAST instrumente l'application de l'intérieur pendant les tests et voit le code réellement atteint, avec très peu de faux positifs. Le DAST reste en boîte noire, sans agent à déployer, donc plus simple à brancher sur n'importe quelle cible. Beaucoup d'équipes commencent par le DAST et ajoutent l'IAST ensuite.

Veille sécurité

La suite, une fois par mois

Ce qui bouge vraiment sur la surface d'attaque externe, NIS2 et la sécurité applicative, écrit par le pentester qui signe ces articles. Un envoi par mois, désinscription en un clic.

Votre adresse ne sert qu'à cet envoi. Voir la politique de confidentialité.

Articles liés