Applications, sites et API

Particuliers et entreprises

Exploitation d’un défaut de contrôle d’accès

Broken access control / IDOR / BOLA

Un service laisse consulter ou modifier une ressource sans vérifier les droits.

Révision éditoriale : Comprendre : 2 min · Cas technique et détails : 5 min
Je pense être concerné : que faire ?
Illustration pédagogique : exploitation d’un défaut de contrôle d’accès.

Comprendre et agir

À la fin de cette lecture, vous pourrez expliquer le piège et choisir une première réaction adaptée à votre rôle. Aucun prérequis informatique n’est nécessaire.

Une situation concrète

En consultant une facture, un client obtient celle d’une autre personne après un changement de référence. Il est bien connecté, mais le service a oublié de vérifier à qui appartient le document demandé.

Comment cela fonctionne

Un défaut de contrôle d’accès permet de consulter une ressource ou d’effectuer une action sans disposer de l’autorisation correspondante. Savoir qui est connecté ne suffit pas : le site doit aussi vérifier ce que cette personne a le droit de faire sur chaque objet. Le défaut peut concerner des documents, des fonctions d’administration ou certains champs sensibles d’un formulaire.

Comment le piège fonctionne
  1. La personne est connectée

    Son identité est connue.

  2. Une ressource est demandée

    Document, fonction ou champ.

  3. Le serveur oublie de vérifier les droits

    Il livre le document d’un autre utilisateur.

Ce que vous pouvez faire

Vos premiers réflexes

Si vous voyez le dossier d’un autre client, ne poursuivez pas l’exploration. Signalez au service la référence de votre demande sans diffuser le document reçu.

Si vous êtes responsable du service ou de l’organisation

Développeurs : contrôlez le droit sur chaque objet et chaque action côté serveur. Testez avec plusieurs comptes de même rôle et d’organisations différentes, caches compris.

Le détail qui change toutUne idée reçue à corriger

Masquer un bouton dans l’interface ne protège pas l’action qu’il déclenche.

À vous de décider

Le bouton d’administration est masqué. L’action correspondante est-elle protégée ?

Choisissez votre réponse et expliquez pourquoi avant de lire la correction.

Voir la réponse expliquée

Seulement si le serveur refuse aussi l’action aux comptes non autorisés. L’interface ne décide pas des droits : une requête peut lui être envoyée autrement.

Analyser un cas technique

Pour les personnes qui développent, administrent ou analysent les systèmes concernés. Commencez par « Comprendre et agir » si ces notions sont nouvelles pour vous.

Étude de cas fictive

Un compte valide accède à l’objet d’un autre utilisateur

Un défaut d’autorisation peut être exploité avec une session parfaitement valide. L’application reconnaît l’utilisateur, mais ne vérifie pas son droit sur l’objet demandé ou sur l’action choisie. Changer une référence dans une URL, un formulaire ou un appel d’API peut alors donner accès au dossier d’un autre client.

Le contrôle doit combiner le compte connecté, l’organisation à laquelle il appartient, l’objet visé et l’opération. Un droit de lecture n’autorise pas une modification, et un rôle d’administration dans une organisation ne vaut pas pour toutes les autres. Les propriétés modifiables doivent aussi être limitées : accepter tout un objet envoyé par le navigateur peut permettre de changer un propriétaire ou un rôle.

Les écrans ne constituent pas une barrière. Masquer un bouton ne protège pas la route qui réalise l’action. Le serveur doit prendre la décision au moment de l’accès, y compris pour les exports et tâches en arrière-plan.

Les caches méritent la même attention. Une réponse correctement autorisée lors de sa création peut être livrée au mauvais utilisateur si la clé du cache oublie l’identité ou l’organisation. Tester avec plusieurs comptes et organisations permet de vérifier cette séparation dans les deux sens.

Le déroulement en schéma

Qui échange avec quiLisez les échanges de haut en bas. Le point marque le départ et la flèche l’arrivée. Les vérifications après correction ne sont pas la suite de l’attaque.

Faites défiler le diagramme pour suivre les échanges ; les noms des acteurs restent en haut. Sur petit écran, faites aussi défiler de gauche à droite.

Étape
Client authentifiéIdentité établie
API objetsPolitique métier
Cache / workerChemins alternatifs
StockageTenant et propriétaire
  1. Action

    Demande objet + action

    Client authentifié vers API objets

    Trace r20

  2. Action

    Lire les attributs d’autorisation

    API objets vers Stockage

  3. Réponse

    Tenant, propriétaire, état

    Stockage vers API objets

  4. Refus / blocage

    Refus si la politique échoue

    API objets vers Client authentifié

    Trace decision=deny

  5. Action

    Export ou accès mis en cache

    Client authentifié vers Cache / worker

    Trace r22

  6. Action

    Même vérification obligatoire

    Cache / worker vers API objets

    Trace Version de politique

  7. Action

    Écriture limitée aux propriétés autorisées

    API objets vers Stockage

    Trace r21

Comment repérer cette attaque

Indices à rechercher

  • Un compte ordinaire accède à une fonction réservée.
  • Des documents d’un autre utilisateur deviennent visibles.
  • Une API accepte une modification que l’interface ne propose pas.

Rechercher les accès à des objets ou les modifications de propriétés hors du périmètre autorisé pour l’acteur. Distinguer les dérogations administratives explicitement accordées.

Éléments à croiser

Pour chaque réponse, confronter l’identité autorisée à l’objet réellement servi. Examiner séparément le chemin sans cache et le chemin avec cache : une clé incomplète peut mélanger deux clients.

Limites de l’interprétation

Une suite de HTTP 403 montre des refus. Elle ne dit rien sur les réponses 200 voisines ni sur une propriété sensible acceptée dans une requête par ailleurs autorisée.

Comment réagir

Corriger le contrôle d’autorisation partagé par les routes concernées et les caches. Retrouver les lectures et modifications avec les identifiants des objets. Réparer les données modifiées avec les responsables métier ; le renouvellement des sessions ne restaure pas leur état antérieur.

Vérifier la correction

Ces contrôles s’adressent à l’équipe responsable du système. Les simulations se préparent dans un environnement de test autorisé ; la lecture du cas ne nécessite aucune manipulation.

  1. Deux comptes de même rôle doivent rester séparés lorsqu’ils appartiennent à des organisations différentes.
  2. Les permissions de lecture, modification et administration doivent être vérifiées indépendamment.
  3. Caches, exports et tâches différées doivent conserver le contexte d’autorisation.

À vous de raisonner

L’API vérifie les droits lors de la première requête, mais le cache ne distingue pas les organisations. Quel test révèle le risque restant ?

Formulez votre décision et l’élément qui la justifie avant d’ouvrir la correction.

Comparer avec le raisonnement expliqué

Demandez le même objet avec deux comptes de même rôle appartenant à des organisations différentes, dans les deux ordres. Une réponse autorisée pour le premier ne doit pas être réutilisée pour le second. Le contrôle doit rester effectif sur le chemin complet, pas seulement lors du calcul initial.

Consulter les détails techniques

Pour aller plus loin après l’étude du cas : les extraits servent à s’exercer à la lecture des traces ; le guide de collecte aide les personnes qui disposent des outils et des accès nécessaires.

Lire les extraits commentés — reconstitution fictive

Ces extraits utilisent des valeurs fictives. Certains reprennent des champs documentés ; d’autres regroupent plusieurs sources dans un format pédagogique. Ce ne sont pas des exports bruts à retrouver tels quels dans vos outils. Commencez par les champs expliqués, puis retrouvez-les dans les extraits.

authorization_checked=false
Décision absente sur le chemin avec cache dans le cas fictif ; ce n’est pas un champ standard nginx.
property_allowed
Contrôle au niveau du champ modifié, distinct du droit d’accéder à l’objet entier.

Cas d’accès objet et de mass assignment

Journal

Journal synthétique de décisions métier ; la valeur de paid doit être décidée par le processus de paiement.

req=r20 actor=u2 tenant=A object=inv7 owner=u1 action=read decision=deny
req=r21 actor=u2 tenant=A object=inv7 action=update fields=label,paid
req=r21 object_allowed=true property_allowed=false decision=deny
req=r22 actor=u8 tenant=B object=inv7 action=export cache_key=invoice:inv7
req=r22 cache_hit=true authorization_checked=false response=200
Préparer une collecte dans votre environnement

Choisissez les sources qui correspondent à vos outils et à votre périmètre d’intervention. Cette liste n’est pas un équipement requis pour comprendre la fiche. Vérifiez que les journaux nécessaires étaient activés pendant la période étudiée. Conservez l’export original, son fuseau horaire et sa provenance dans un espace à accès restreint ; travaillez sur une copie expurgée des secrets.

  1. Service concerné — audit et historique à vérifier

    Où les trouver
    Dans l’outil d’administration ou les journaux du service concerné. Demander à son mainteneur où sont enregistrées les décisions d’autorisation et les opérations métier.
    Quoi relever
    Chercher acteur authentifié, client/organisation, objet, action demandée, propriétaire attendu et décision d’autorisation. Pour un champ modifiable, conserver aussi la décision portant sur cette propriété.
    Accès et prérequis
    Il n’existe ni fichier ni vocabulaire universels. Les champs proposés ici doivent être instrumentés s’ils manquent ; ne pas enregistrer mots de passe, jetons ou contenu privé intégral.
    Documentation : Service concerné — audit et historique à vérifier
  2. nginx — journal d’accès HTTP

    Où les trouver
    Sur le frontal, dans le fichier désigné par access_log ; son contenu dépend de log_format. L’hébergeur peut devoir fournir cet export.
    Quoi relever
    Comparer route, méthode, statut et horaire des accès au même objet. Vérifier les traces du cache si le frontal en utilise un : elles ne remplacent pas le contrôle d’autorisation du service.
    Accès et prérequis
    Lecture des journaux serveur. Vérifier que la route est journalisée : les temps de réponse et identifiants de requête ne figurent pas forcément dans le format configuré.
    Documentation : nginx — journal d’accès HTTP

Dans l’histoire des cyberattaques

Groupes et campagnes documentés

1 repère

Des faits réels pour situer ce mécanisme. Les années sont celles des faits ; chaque notice précise qui établit le lien avec le groupe ou la campagne.

  1. GroupeStorm-0558

    Repères de nommage : Antique Typhoon depuis 2024 chez Microsoft

    Des jetons falsifiés donnent accès à des messageries

    À partir de mai 2023, des jetons d’authentification falsifiés permettent de consulter les courriels de plusieurs organisations. La confiance dans une signature et sa validation devient ici le point critique du contrôle d’accès.

    Ce qu’établit la source. Microsoft attribue l’opération à Storm-0558. Il s’agit de jetons de services cloud, pas de tickets Kerberos : les deux mécanismes ne doivent pas être confondus.

    Consulter le rapport Analysis of Storm-0558 techniques for unauthorized email access

    Microsoft · Publié le

Sélection de cas documentés, non exhaustive. Une technique peut être utilisée par de nombreux acteurs. Les cas fictifs de la fiche ne sont attribués à aucun de ces groupes.

Si vous pensez être concerné

Si vous utilisez le service

Si vous voyez le dossier d’un autre client, ne poursuivez pas l’exploration. Signalez au service la référence de votre demande sans diffuser le document reçu.

Pour l’équipe qui exploite le service

  1. Signalez le défaut sans parcourir les ressources d’autres personnes.
  2. Faites corriger la règle d’autorisation et ses chemins alternatifs.
  3. Déterminez les ressources accessibles et les opérations effectivement observées.

Pour qualifier votre situation et être orienté : obtenir une assistance sur 17Cyber. Dans une organisation, prévenez aussi le responsable ou prestataire chargé de la sécurité.

Sources et repères pour approfondir