Aller au contenu principal
own2pwn

OWASP ASVS et WSTG : la méthode réelle d'un pentest web

L'OWASP ne se résume pas au Top 10. L'ASVS 5.0 dit ce qu'une appli doit prouver, le WSTG comment le tester. Mapping d'une méthodo de pentest et dix contrôles ASVS niveau 2 vérifiés en mission.

own2pwn9 min de lecture

OWASP ASVS et WSTG : la méthode réelle d'un pentest web

Un pentest aligné sur l'ASVS

En whitebox, on déroule les chapitres ASVS niveau par niveau et on cite l'exigence exacte sur chaque écart. Rapport actionnable, retest inclus.

Demander un pentest whitebox

Quand on parle OWASP, tout le monde pense au Top 10. C'est le document le plus cité et le moins utile en mission : une liste de risques répandus, pratique pour sensibiliser un comité de direction, inexploitable comme procédure de test. Les deux publications de la fondation qu'un pentester ouvre vraiment tous les jours portent des acronymes moins connus : l'ASVS et le WSTG.

L'Application Security Verification Standard (ASVS) dit ce qu'une application doit faire pour être tenue pour sûre. Le Web Security Testing Guide (WSTG) dit comment le vérifier sur une appli qui tourne. Un référentiel d'exigences d'un côté, un catalogue de tests de l'autre. On va voir comment on plaque concrètement une méthodologie de pentest sur les chapitres du WSTG, comment on vérifie dix contrôles ASVS de niveau 2 pendant une mission, et à quoi ressemble un extrait de rapport où une exigence ASVS est citée nommément. Cet article s'inscrit dans le test d'intrusion en entreprise et suppose que vous savez déjà ce qu'est une faille web.

ASVS 5.0 a tout renuméroté

La version 5.0.0, publiée le 30 mai 2025, réorganise le standard de fond en comble. Les identifiants de la 4.0.3 ne se traduisent pas dans la 5.0 : un contrôle 8.2.2 n'a pas le même sens dans les deux versions. Toujours écrire la version à côté de l'identifiant. L'OWASP fournit d'ailleurs un guide de transition dédié aux équipes qui viennent de la 4.0.

ASVS et WSTG : deux documents, deux usages

L'ASVS 5.0 s'organise en dix-sept chapitres, numérotés de V1 (Encoding and Sanitization) à V17 (WebRTC), en passant par l'authentification (V6), la gestion de session (V7) et l'autorisation (V8). Chaque exigence porte un identifiant chapitre.section.exigence et un niveau. Le standard définit trois niveaux de vérification : le niveau 1 rassemble environ 20 % des exigences, le socle minimal ; le niveau 2, que la plupart des applications devraient viser, porte l'ensemble à près de 70 % ; le niveau 3 ajoute les 30 % restants pour les applications qui exigent la plus forte assurance.

Le WSTG n'a pas la même vocation. Sa version stable, la 4.2, date du 3 décembre 2020 (la 5.0 est en chantier), et elle découpe le test d'une application web en douze catégories, chacune identifiée par un code : WSTG-INFO pour la collecte d'informations, WSTG-ATHN pour l'authentification, WSTG-BUSL pour la logique métier, et ainsi de suite jusqu'à WSTG-APIT pour les API. Là où l'ASVS énonce une propriété à démontrer, le WSTG détaille la manœuvre : quel paramètre trafiquer, quelle réponse observer, quel outil dégainer.

Ni l'un ni l'autre n'est le Top 10 de l'OWASP, qui reste une grille de sensibilisation. Le Top 10 vous dit que le contrôle d'accès cassé est le risque numéro un. Il ne vous dit ni comment le tester (ça, c'est WSTG-ATHZ), ni ce que l'application aurait dû implémenter pour l'éviter (ça, c'est ASVS V8). Confondre les trois, c'est rendre un rapport de pentest qui liste des CWE sans dire comment les vérifier ni comment les corriger.

Cartographier une méthodo de pentest sur les chapitres WSTG

Une mission web ne se déroule pas dans l'ordre du sommaire du WSTG. On la structure en phases, et chaque phase pioche dans une ou plusieurs catégories. Le tableau ci-dessous montre le mapping qu'on applique sur une mission classique, de la reconnaissance à la logique métier.

wstg-map
Les douze catégories du WSTG rangées dans l'ordre où on les attaque en mission, pas dans l'ordre du sommaire.

Trois catégories concentrent l'essentiel des findings graves. Le contrôle d'accès (WSTG-ATHZ) parce que l'IDOR et le BOLA sont partout et ne demandent aucune technicité d'exploitation. La validation d'entrée (WSTG-INPV) parce qu'elle abrite les injections, dont les variantes aveugles qui ne renvoient rien dans la réponse et qu'on ne prouve qu'avec un serveur out-of-band. Et la logique métier (WSTG-BUSL), la seule catégorie qu'aucun scanner ne couvre, parce qu'elle exige de comprendre ce que l'application est censée faire.

Le mapping change avec le mode d'engagement. En blackbox, whitebox ou greybox, on n'attaque pas les mêmes chapitres avec la même profondeur : sans code, la reconnaissance et la configuration pèsent plus lourd ; avec le code, on va directement lire les contrôles d'autorisation. Pour une cible qui expose surtout des endpoints REST ou GraphQL, on bascule le centre de gravité vers WSTG-APIT et la sécurité des API.

Dix contrôles ASVS niveau 2 et comment les vérifier en mission

Le WSTG dit où chercher, l'ASVS dit ce qu'on doit pouvoir cocher. Voici dix exigences de niveau 2, celui que vise la majorité des applications, avec la manœuvre concrète qui permet de conclure conforme ou pas. Les identifiants et les libellés sont ceux de l'ASVS 5.0.0, vérifiés dans le dépôt officiel. Les classiques du contrôle d'accès (l'IDOR/BOLA en 8.2.2, l'application des règles au niveau d'un service de confiance en 8.3.1) sont eux au niveau 1 : on les teste d'office, ils sont le socle.

ASVS 5.0Exigence (résumé)Comment on la vérifie
6.2.12Mots de passe recoupés avec une base de mots de passe compromisOn tente d'inscrire un compte avec un mot de passe présent dans les fuites connues ; s'il est accepté, l'écart est là.
6.8.2Signature des assertions d'authentification (JWT, SAML) toujours validéeOn rejoue un JWT en alg:none ou avec une signature bidon ; s'il passe, la validation manque.
7.4.3Option de fermer les autres sessions après changement d'un facteur d'authOn ouvre deux sessions, on change le mot de passe dans l'une, on vérifie si l'autre reste active.
7.5.1Ré-authentification avant de modifier un attribut sensible (email, téléphone, MFA)On tente de changer l'email de compte sans redonner le mot de passe ; si ça marche, c'est un vecteur de prise de contrôle.
8.2.3Accès au niveau des champs restreint aux permissions (BOPLA)On ajoute un champ privilégié (role, isAdmin) dans un PATCH de profil et on regarde s'il est pris.
8.4.1Contrôles inter-tenants dans une application multi-locatairesAvec deux comptes de tenants distincts, on substitue l'identifiant de ressource de l'un dans les requêtes de l'autre.
4.1.3En-têtes posés par un intermédiaire non surchargeable par le clientOn envoie soi-même X-Forwarded-For ou X-Real-IP ; si l'appli les fait confiance, le rate limiting et le log d'IP deviennent contournables.
4.2.1Bornes des messages HTTP cohérentes (anti request smuggling)On envoie une requête avec Transfer-Encoding et Content-Length en conflit et on observe le désaccord front/back.
2.4.1Anti-automation contre les appels excessifs (exfil, quota, déni de service)On boucle sur un endpoint coûteux ou énumérable et on regarde si un blocage se déclenche.
16.3.1Journalisation de toutes les opérations d'authentification (succès et échecs)Vérification documentaire ou greybox : on demande les logs après une salve d'échecs de connexion et on vérifie qu'ils apparaissent.

Deux remarques de terrain. La dernière ligne, 16.3.1, illustre une limite du blackbox : sans accès aux journaux, on ne peut pas prouver qu'une opération est loguée, seulement constater qu'on n'est pas bloqué. Beaucoup d'exigences ASVS de documentation et de journalisation sont dans ce cas, ce qui explique pourquoi le standard note que le niveau 1 lui-même n'est pas entièrement testable par un auditeur externe sans documentation ni code. Et l'exigence 4.1.3 n'est pas un détail académique : un X-Forwarded-For que le client contrôle rend inefficace tout compteur de tentatives, sujet qu'on traite plus largement dans la gestion des vulnérabilités.

Blackbox suit le WSTG, whitebox suit l'ASVS

Le choix du référentiel structurant dépend de ce qu'on a sous la main. En pentest web blackbox, on n'a que l'application qui tourne : le WSTG est la colonne vertébrale naturelle, puisqu'il décrit des tests observables de l'extérieur. On progresse catégorie par catégorie, on note ce qui casse, et on rattache après coup chaque finding à l'exigence ASVS qu'il viole.

En pentest web whitebox, avec le code et la documentation, on inverse la logique : l'ASVS devient la checklist maîtresse. On déroule les chapitres V1 à V17 au niveau visé, on lit les contrôles d'autorisation directement dans le code plutôt que de les deviner à l'aveugle, et on couvre les exigences qu'un blackbox ne peut pas atteindre (journalisation, gestion des secrets, architecture). C'est aussi là que les outils de SAST, DAST et IAST prennent le relais sur les vérifications mécaniques, pour laisser l'humain sur la logique métier et les chaînes d'exploitation.

cycle-finding
WSTG
On teste
Un test WSTG-ATHZ révèle un accès non restreint à un objet d'un autre compte.
ASVS
On rattache l'exigence
Non-conformité ASVS 5.0 8.2.2 (autorisation au niveau des objets, niveau 1).
Livrable
On rend opposable
L'identifiant devient un critère de recette, pas une opinion.
Retest
On revérifie
Le retest se limite à rejouer ce contrôle précis.
Le trajet d'un finding : on le trouve avec le WSTG, on le qualifie avec l'ASVS, on le rend opposable dans le rapport, on le revérifie au retest.

Citer une exigence ASVS dans un rapport

Un finding rédigé en texte libre se discute : le développeur estime que ce n'est pas grave, le pentester insiste, et le débat s'enlise. Rattaché à un identifiant ASVS, il devient un critère de recette opposable. Voici à quoi ressemble l'en-tête d'un finding tel qu'on l'écrit, avec l'exigence citée explicitement :

text
[HAUTE] Accès non autorisé aux commandes d'autres clients (BOLA)

Reference    : WSTG-ATHZ-04 (Testing for IDOR)
Non-conformite : ASVS 5.0  8.2.2  (niveau 1)
  "Verify that the application ensures that data-specific access is
   restricted to consumers with explicit permissions to specific data
   items to mitigate insecure direct object reference (IDOR) and broken
   object level authorization (BOLA)."

Constat      : GET /api/v2/orders/{id} renvoie la commande demandee
               quel que soit le compte authentifie. En incrementant {id}
               depuis le compte A, on lit les commandes du compte B
               (nom, adresse, montant).
Impact       : divulgation de donnees personnelles de tous les clients.
Correctif    : filtrer chaque acces objet sur owner_id cote service,
               pas seulement sur la presence d'une session valide.
Retest       : rejouer l'enumeration depuis un compte tiers -> 403 attendu.

Le gain est double. Pour l'équipe de dev, la ligne Correctif et l'identifiant du contrôle donnent une cible nette, pas une consigne vague. Pour la prochaine mission, le Retest se réduit à revérifier ce contrôle : on sait exactement quoi rejouer et quel résultat attendre. C'est ce qui fait qu'un rapport aligné sur l'ASVS survit à la mission, là où un rapport en prose finit au fond d'un tiroir. Le déroulement d'un pentest détaille la place de cette phase de restitution.

ASVS comme clause de contrat

L'OWASP encourage explicitement à utiliser l'ASVS dans les achats de logiciel : l'acheteur exige un niveau, le fournisseur prouve qu'il l'atteint. Écrire "l'application doit satisfaire l'ASVS 5.0 niveau 2" dans un cahier des charges est plus actionnable qu'une liste de vœux, parce que chaque exigence est traçable et testable.

À retenir

  • ASVS = quoi exiger, WSTG = comment tester. L'ASVS 5.0 liste dix-sept chapitres d'exigences vérifiables sur trois niveaux ; le WSTG 4.2 décrit douze catégories de tests concrets.
  • Le Top 10 sensibilise, il ne teste rien et ne spécifie rien. Un pentest sérieux s'appuie sur les deux autres.
  • En mission, on structure les phases sur les catégories WSTG ; WSTG-ATHZ, WSTG-INPV et WSTG-BUSL concentrent les findings graves.
  • Le niveau 2 est la cible de la plupart des applis ; beaucoup de ses exigences (journalisation, en-têtes de confiance) sont plus faciles à prouver en whitebox qu'en blackbox.
  • Blackbox suit le WSTG, whitebox suit l'ASVS. Dans les deux cas, on rattache chaque finding à l'identifiant du contrôle violé, avec sa version.
  • Un finding qui cite ASVS 5.0 8.2.2 devient un critère de recette : corrigeable, retestable, opposable.

Vous voulez un pentest dont le rapport se lit comme une matrice de conformité ASVS plutôt que comme un roman ? En whitebox, on déroule les chapitres au niveau que vous fixez et on cite l'exigence exacte sur chaque écart : voyez le pentest web whitebox, comparez avec le prix d'un test d'intrusion, ou parlez de votre périmètre via la page contact.

Questions fréquentes sur l'ASVS et le WSTG

Quelle est la différence entre l'OWASP ASVS et le WSTG ?

L'ASVS (Application Security Verification Standard) est un référentiel d'exigences : il liste ce qu'une application doit prouver pour être considérée comme sûre, classées en trois niveaux. Le WSTG (Web Security Testing Guide) est un catalogue de tests : il décrit comment vérifier ces propriétés sur une appli qui tourne. L'un dit quoi exiger, l'autre dit comment le tester. En pratique, un pentester whitebox s'appuie sur l'ASVS et un pentester blackbox suit le WSTG.

Qu'est-ce que l'ASVS 5.0 ?

L'ASVS 5.0.0 est la version publiée le 30 mai 2025 par l'OWASP. Elle réorganise le standard en dix-sept chapitres numérotés de V1 (Encoding and Sanitization) à V17 (WebRTC) et conserve trois niveaux de vérification. La numérotation des exigences a complètement changé par rapport à la 4.0.3 : un identifiant comme 8.2.2 de la 5.0 ne correspond pas au même contrôle qu'en 4.0.

Combien de niveaux compte l'ASVS et lequel viser ?

Trois. Le niveau 1 regroupe environ 20 pour cent des exigences, le socle minimal. Le niveau 2, cible de la plupart des applications, ajoute une couche qui porte l'ensemble à environ 70 pour cent des exigences. Le niveau 3, environ 30 pour cent restants, vise le plus haut degré d'assurance. Le choix du niveau dépend de la sensibilité des données traitées, pas d'une règle universelle.

Le WSTG couvre-t-il les API ?

Oui. Le WSTG comporte une catégorie dédiée, WSTG-APIT (API Testing), en plus des onze autres qui vont de la collecte d'informations (WSTG-INFO) à la logique métier (WSTG-BUSL) et aux tests côté client (WSTG-CLNT). Pour un audit d'API, on combine cette catégorie avec les chapitres authentification, autorisation et validation d'entrée, car les failles d'API sont surtout des failles d'autorisation objet.

Le Top 10 de l'OWASP suffit-il pour un pentest ?

Non. Le Top 10 est une liste de sensibilisation aux risques les plus répandus, pas une méthodologie de test ni une checklist de conformité. Il ne dit ni comment tester une catégorie, ni ce qu'une application doit implémenter. Un pentest sérieux s'appuie sur le WSTG pour la procédure de test et sur l'ASVS pour les exigences vérifiables, le Top 10 servant tout au plus de grille de priorisation grand public.

Comment citer une exigence ASVS dans un rapport de pentest ?

En rattachant chaque écart à l'identifiant exact du contrôle non respecté, sa version et son niveau, par exemple non-conformité ASVS 5.0 8.2.2 (niveau 1, autorisation au niveau des objets). Cela transforme une observation en critère de recette opposable : l'équipe de dev sait précisément quoi corriger, et le retest se réduit à revérifier ce contrôle. Un rapport qui référence l'ASVS est mesurable, là où un texte libre reste discutable.

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