WEB-01 / Autorisation par ressourcePriorité élevée
Un salarié accède aux salaires de ses collègues.
Dans le portail d’une même entreprise, un salarié du service commercial peut ouvrir le fichier de paie réservé aux RH en changeant le numéro du document dans la requête. Être connecté ne lui donne pas ce droit.
Technique illustréeIDOR · Accès direct à un document non autorisé
Modifier l’identifiant du document dans une requête authentifiée, puis vérifier les droits sur la ressource retournée.
01 / Confidentialité des documentsDémo fictive
Service commercialCompte connecté
GET /documents/204Lecture autorisée à tort Accès RH requis
RESSOURCES HUMAINES
Paie · Octobre
SalariéSalaire
Collaborateur 012 800 €Collaborateur 023 200 €
Contenu protégé
200 OK · fichier de paie divulgué
Le fichier RH est lisible avec un simple compte commercial.
Impact illustréConfidentialité : les noms et salaires des collègues deviennent accessibles à une personne qui n’est pas habilitée à les consulter.
WEB-01 / Preuve reproductibleAvant correction
La requête révèle le défaut.
GET /api/documents/204200 OK · fichier de paie divulgué
01Se connecter avec le compte de démonstration d’un salarié du service commercial.
02Remplacer le numéro d’un document commercial autorisé par celui du fichier de paie réservé aux RH.
03Constater que le serveur retourne les salaires alors que ce compte n’a aucun droit RH.
WEB-01 / RemédiationCôté serveur
Vérifier le droit sur ce document.
Vérifier côté serveur que le compte dispose du droit de lecture sur ce document précis. L’accès au portail et l’appartenance à la même entreprise ne suffisent pas.
Contrôle des droits sur chaque document demandé, et pas seulement de la connexion.
Refus sans contenu ni métadonnée RH pour les comptes non habilités.
Tests de régression avec un compte RH, un commercial et un compte sans session.
WEB-01 / VérificationAprès correction
Protéger les RH. Garder leur accès.
GET /api/documents/204403 Forbidden · document RH protégé
Compte RH habilité200 · autorisé
Salarié commercial403 · refusé
Compte sans session401 · refusé
Ces résultats illustrent le re-test attendu. Ils ne correspondent pas à des tests réalisés chez un client.
WEB-02 / Autorisation par fonctionPriorité élevée
Un bouton caché ne protège pas un export.
Le bouton d’export des comptes est masqué pour les utilisateurs standards. Pourtant, l’API exécute leur demande d’export, car elle ne vérifie pas le rôle du compte.
Technique illustréeBFLA · Fonction accessible au mauvais rôle
Appeler directement une fonction d’administration avec un compte standard, même lorsque son bouton est masqué.
02 / Privilèges du compteDémo fictive
Console des comptes
Rôle standard
Exporter les comptesBouton masqué dans l’interface
GET /admin/users/export
API serveur
Export livréExport refusé
200 OK · export accessible
L’interface masque l’action, mais le serveur livre quand même l’export.
Impact illustréConfidentialité : export de données de comptes depuis une fonction d’administration.
WEB-02 / Preuve reproductibleAvant correction
La requête révèle le défaut.
GET /api/admin/users/export200 OK · export accessible
01Se connecter avec un compte disposant uniquement du rôle standard.
02Appeler directement l’endpoint d’export de la console d’administration.
03Constater que masquer le bouton n’empêche pas l’API de retourner les données.
WEB-02 / RemédiationCôté serveur
Contrôler la fonction côté serveur.
Centraliser les autorisations côté serveur et exiger le droit d’export sur l’endpoint d’administration.
Refus par défaut pour les fonctions privilégiées.
Contrôle du rôle et du droit spécifique avant d’exécuter l’export.
Tests des endpoints d’administration pour chaque niveau de privilège.
WEB-02 / VérificationAprès correction
Réserver l’export au bon rôle.
GET /api/admin/users/export403 Forbidden · rôle insuffisant
Administrateur autorisé200 · autorisé
Utilisateur standard403 · refusé
Session absente ou expirée401 · refusé
Le périmètre du re-test réel dépend des accès fournis et des corrections disponibles. Les limites sont consignées dans le rapport.
WEB-03 / Logique métierPriorité élevée
Le prix du panier ne se décide pas dans le navigateur.
Un article coûte 120 € au catalogue. Le navigateur envoie le montant de la commande et le serveur lui fait confiance : un acheteur peut le remplacer par 1 € et créer une commande à ce prix.
Technique illustréeParameter tampering · Manipulation du prix
Modifier le montant envoyé par le navigateur pour vérifier si le serveur le reprend ou le recalcule depuis son catalogue.
Le montant modifié dans le navigateur devient le prix de la commande.
Impact illustréIntégrité commerciale : une commande est enregistrée avec un montant non autorisé. Cet exemple s’arrête avant tout paiement réel.
WEB-03 / Preuve reproductibleAvant correction
La requête révèle le défaut.
POST /api/orders
{ "productId": "AT-120", "quantity": 1, "unitPrice": 1 }201 Created · commande à 1 €
01Ajouter au panier l’article fictif affiché à 120 €.
02Modifier le prix transmis par le navigateur à 1 €, sans changer le produit ni la quantité.
03Observer la commande créée à 1 € : le serveur a utilisé une valeur fournie par le client.
WEB-03 / RemédiationCôté serveur
Recalculer depuis le catalogue.
Calculer le total côté serveur depuis le catalogue et les remises autorisées. Les montants transmis par le navigateur ne constituent jamais la référence du prix.
Catalogue et règles de remise comme source des prix côté serveur.
Validation des quantités et des remises applicables au compte.
Montant cohérent entre commande et demande de paiement.
WEB-03 / VérificationAprès correction
Facturer le montant autorisé.
POST /api/orders
{ "productId": "AT-120", "quantity": 1, "unitPrice": 1 }201 Created · prix recalculé à 120 €
Prix navigateur modifié à 1 €120 € · recalculé
Quantité négative422 · refusée
Remise autorisée de 10 %108 € · calculé
Montants et article fictifs. Les règles de TVA, de remise et de paiement d’une application réelle demandent des cas de test adaptés.
Laboratoire fictif. Aucun constat ni résultat client présenté.
Un cadre partagé
S’intégrer à votre façon de travailler.
01
Périmètre
Applications, accès et profondeur des tests définis avec votre équipe.
02
Confidentialité
Règles de partage des informations et autorisations établies avant la mission.
03
Livrables
Format du rapport, preuves et conventions de restitution convenus ensemble.
04
Coordination
Points de suivi et responsabilités pour les corrections et le re-test.
Un examen pratique consacré à l’exploitation d’applications web, de services et d’API.
Failles web et enchaînement de vulnérabilités
Preuves reproductibles et rapport exploitable
Ce que cela apporte à votre mission
Relier un défaut technique à son impact applicatif et aux corrections attendues.
Ces certifications attestent de compétences évaluées en examen pratique. Le périmètre de votre mission reste défini selon votre besoin.
Avant de travailler ensemble.
Questions / Réponses
03 points à éclaircir
Question 01 / sur 03
01Réponse / 03
Quels types de missions pouvons-nous cadrer ?
Des audits et pentests web sur un périmètre applicatif défini. Nous vérifions ensemble la profondeur attendue, les accès fournis, les contraintes de calendrier et le format du livrable.
02Réponse / 03
Comment se déroule la collaboration ?
La proposition précise le périmètre, les responsabilités, les conditions de confidentialité et la restitution. Le fonctionnement avec votre équipe ou votre client est défini avant les tests.
03Réponse / 03
Pouvez-vous utiliser notre format de rapport ?
Le format et les conventions du livrable se discutent au cadrage. L’objectif est un résultat exploitable par votre équipe, avec des constats reproductibles et des recommandations précises.
La prochaine étape
Une mission à cadrer ensemble ?
Décrivez le périmètre, les dates envisagées et le format de collaboration souhaité.
Autoriser PostHog à mesurer les pages et actions pour améliorer le site ? Des identifiants de navigateur et de session sont utilisés. Les champs du formulaire et les enregistrements de session sont exclus.
En savoir plus. Vous pouvez changer ce choix en bas de chaque page.
Votre navigateur demande de ne pas être suivi. PostHog reste désactivé.