Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 916 minIntermédiaire

Contrôle d'accès : RBAC, ABAC et principe du moindre privilège

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • distinguer DAC, MAC, RBAC et ABAC ;
  • appliquer le moindre privilège, le besoin d'en connaître et la séparation des tâches ;
  • corriger un contrôle d'accès défaillant dans une API ;
  • calculer un droit effectif entre partage et NTFS.

5 exercices corrigés1 schéma

Le contrôle d'accès décide, à chaque demande, si un utilisateur authentifié peut effectuer une action sur une ressource. Le modèle le plus utilisé en entreprise est le RBAC (Role-Based Access Control), où les droits sont attribués à des rôles et les rôles aux personnes ; l'ABAC (Attribute-Based Access Control) affine la décision avec des attributs et le contexte. Quel que soit le modèle, le principe du moindre privilège s'applique : chaque compte ne reçoit que les droits strictement nécessaires à sa mission.

Les modèles de contrôle d'accès

ModèleQui décidePrincipeOù tu le croises
DAC (discrétionnaire)Le propriétaire de la ressourceLe créateur d'un fichier choisit qui peut le lire ou le modifierPermissions NTFS, droits Linux rwx, partage d'un document en ligne
MAC (obligatoire)Une politique centrale, que les utilisateurs ne peuvent pas modifierChaque ressource et chaque personne ont un niveau ; on ne lit pas au-dessus de son niveauSystèmes militaires, SELinux, AppArmor
RBAC (par rôles)L'organisation, à travers les rôlesLes droits vont aux rôles, les rôles aux personnesApplications métier, groupes Active Directory, rôles MySQL
ABAC (par attributs)Des règles qui combinent des attributsAttributs de la personne, de la ressource, de l'action et du contexte (heure, lieu, appareil)Accès conditionnel, applications qui filtrent par région ou par service

Le RBAC en détail

Dans le RBAC, on ne donne jamais un droit directement à une personne. On définit des rôles qui correspondent à des fonctions (comptable, technicien, responsable de service), on attribue des permissions aux rôles, puis on affecte les utilisateurs aux rôles.

UtilisateursRôlesPermissionsJulie LefèvrePaul MartinKarim MorelChloé Lambertcomptableresponsable comptabletechniciensaisir une facturevalider une factureconsulter les ticketsclôturer un ticket
Le RBAC : les permissions vont aux rôles, les rôles aux personnes

Les avantages sont immédiats : une arrivée ou un départ se traite en ajoutant ou en retirant un rôle ; un audit consiste à relire une dizaine de rôles plutôt que des centaines de droits individuels ; la matrice d'habilitations se traduit directement en rôles (chapitre 11).

Deux dérives à surveiller :

  • l'explosion des rôles : à force de créer un rôle pour chaque exception (« comptable mais qui voit aussi les notes de frais du commercial »), on finit avec plus de rôles que de salariés ;
  • le rôle fourre-tout : un rôle « utilisateur avancé » qui cumule des droits sans rapport, donné à tout le monde pour éviter les demandes.

L'ABAC : quand le rôle ne suffit pas

Certaines règles ne s'expriment pas avec des rôles :

  • un commercial ne voit que les clients de sa région ;
  • un responsable valide les notes de frais de son équipe, pas celles des autres ;
  • l'accès à la paie n'est possible que depuis un poste géré, en heures ouvrées.

L'ABAC évalue une règle sur des attributs : de la personne (service, région, niveau), de la ressource (propriétaire, classification), de l'action (lecture, suppression) et du contexte (heure, adresse IP, état du poste). Il est plus fin, mais plus difficile à auditer. En pratique, on combine les deux : le RBAC donne les droits de base, des règles ABAC les restreignent.

Les principes à citer dans une copie

PrincipeÉnoncéExemple
Moindre privilègeChaque compte reçoit les droits strictement nécessaires à sa mission, et pour la durée nécessaireL'application de tickets se connecte à MySQL avec un compte qui n'a ni DROP ni DELETE
Besoin d'en connaîtreOn n'accède à une information que si sa mission l'exige, même si son niveau le permettraitUne technicienne n'ouvre pas le dossier RH d'un salarié pour dépanner son poste
Séparation des tâchesUne même personne ne réalise pas seule une opération sensible de bout en boutCelui qui crée un fournisseur dans le logiciel n'est pas celui qui valide son paiement
Refus par défautTout ce qui n'est pas explicitement autorisé est interditUn nouveau compte n'a aucun droit tant qu'on ne lui en a pas donné
Défense en profondeurPlusieurs contrôles successifs, pour qu'une erreur ne suffise pasContrôle dans l'interface, dans l'API, et droits restreints du compte de base de données
Contrôle côté serveurLe serveur vérifie les droits à chaque requête, sans faire confiance au clientMasquer un bouton ne protège rien : la requête peut être envoyée directement

Côté SLAM : le contrôle d'accès défaillant

Le contrôle d'accès défaillant (Broken Access Control) est en tête du Top 10 de l'OWASP, édition 2025 comme édition 2021. Il prend trois formes :

  • l'élévation verticale : un utilisateur ordinaire accède à une fonction d'administration (/admin/utilisateurs répond sans vérifier le rôle) ;
  • l'élévation horizontale : un utilisateur accède aux données d'un autre utilisateur de même niveau ;
  • la référence directe non sécurisée (IDOR, Insecure Direct Object Reference) : l'application utilise un identifiant fourni par le client sans vérifier qu'il appartient bien à l'utilisateur. GET /api/notes-de-frais/1043 renvoie la note 1043, quel que soit son propriétaire ; il suffit de changer le nombre.

Le sujet SLAM de 2024 (U6) en donnait un exemple : dans l'API d'une application de formations, aucune route ne vérifiait l'utilisateur appelant, seul le code de l'application cliente le faisait avant d'appeler l'API. Conséquence : quiconque connaît l'adresse de l'API peut l'appeler directement, avec Postman ou curl, et lire ou modifier les données sans aucun contrôle.

La correction se fait côté serveur, en deux étages. D'abord le rôle, avec un middleware (ici en Express, après le middleware proteger du chapitre 5 qui a vérifié le jeton) :

js
// Fabrique de middleware : n'autorise que les rôles listés
export const autoriser = (...rolesAutorises) => (req, res, next) => {
  if (!req.utilisateur) {
    return res.status(401).json({ erreur: 'Non authentifié' });
  }
  if (!rolesAutorises.includes(req.utilisateur.role)) {
    return res.status(403).json({ erreur: 'Accès interdit' });
  }
  next();
};

// Seul un comptable valide une note de frais
app.post('/api/notes-de-frais/:id/validation', proteger, autoriser('comptable'), validerNote);

Ensuite la propriété de la donnée, que le rôle ne suffit pas à garantir : la requête SQL filtre sur l'utilisateur connecté, pris dans le jeton vérifié, jamais dans la requête du client.

js
// Un salarié ne lit que SES notes de frais : le filtre porte sur l'identifiant du jeton
app.get('/api/notes-de-frais/:id', proteger, async (req, res) => {
  const [lignes] = await db.execute(
    'SELECT * FROM note_frais WHERE id = ? AND id_salarie = ?',
    [req.params.id, req.utilisateur.id],
  );
  if (lignes.length === 0) {
    return res.status(404).json({ erreur: 'Note introuvable' });   // ne révèle pas qu'elle existe
  }
  res.json(lignes[0]);
});

Dans le sujet de 2025 (cas Casterman), les droits étaient stockés par fonction, table par table et opération par opération (sélection, ajout, modification, suppression), et il fallait écrire en Java la méthode possedeDroit(uneTable, uneOperation) de la classe Utilisateur. Une écriture possible, en supposant que la fonction de l'utilisateur expose sa liste de droits :

java
/** Vrai si la fonction de l'utilisateur autorise l'opération sur la table. */
public boolean possedeDroit(String uneTable, String uneOperation) {
    for (Droit d : saFonction.getLesDroits()) {
        if (d.getTable().equals(uneTable) && d.getOperation().equals(uneOperation)) {
            return true;
        }
    }
    return false;   // refus par défaut : aucun droit trouvé
}

Le return false final est le refus par défaut : une table ou une opération oubliée dans la configuration est interdite, pas autorisée. Les droits du compte de base de données utilisé par l'application complètent ce contrôle (GRANT et les rôles MySQL).

Côté SISR : les droits sur les fichiers et les serveurs

Sur un serveur de fichiers Windows, deux couches de droits s'appliquent à un dossier partagé :

  • les autorisations de partage, vérifiées quand on accède par le réseau (\\srv-fichiers\Compta) ;
  • les autorisations NTFS, vérifiées dans tous les cas, en local comme par le réseau.

Le droit effectif par le réseau est le plus restrictif des deux. Au sein de NTFS, les autorisations des différents groupes d'un utilisateur s'additionnent, mais un refus explicite l'emporte sur une autorisation. Une pratique courante : des autorisations de partage larges (Modification pour les utilisateurs authentifiés) et tous les réglages fins en NTFS, donnés à des groupes de domaine local selon AGDLP (chapitre 7). On évite les refus explicites, difficiles à suivre, et on désactive l'héritage seulement quand c'est nécessaire.

Autorisation NTFSPermet
LectureOuvrir les fichiers, lister le dossier
Lecture et exécutionLecture, plus lancer des programmes
ÉcritureCréer des fichiers et des dossiers
ModificationLecture, écriture et suppression
Contrôle totalTout, y compris modifier les autorisations et prendre possession

Sur un serveur Linux, les droits rwx du propriétaire, du groupe et des autres (chmod 750 /srv/compta : tout pour le propriétaire, lecture et accès pour le groupe, rien pour les autres), les ACL pour les cas plus fins (setfacl -m g:compta:rx /srv/archives), et sudo pour les privilèges : on autorise une commande précise à un groupe précis plutôt que de donner le mot de passe de root.

text
# /etc/sudoers.d/techniciens : les techniciens redémarrent le serveur web, rien d'autre
%techniciens ALL=(root) /usr/bin/systemctl restart apache2

Le cours Administration Linux détaille les droits et sudo.

Comment l'E7 l'interroge

  • SLAM : identifier un contrôle d'accès défaillant dans un extrait de code (IDOR, rôle lu dans la requête, route sans contrôle) ; écrire une méthode qui vérifie un droit (possedeDroit, sujet 2025) ; expliquer l'intérêt de rôles applicatifs différents au niveau de la connexion à la base (sujet 2023) ; écrire des tests unitaires qui vérifient qu'un rôle ne peut pas faire une action.
  • SISR : calculer un droit effectif (partage et NTFS) ; proposer une organisation des groupes ; restreindre les privilèges d'un compte de service ; configurer sudo pour une tâche précise.
  • Tronc commun : définir le moindre privilège, le besoin d'en connaître, la séparation des tâches, et les appliquer au contexte.

Pour aller plus loin. Le contrôle d'accès défaillant est la première catégorie de l'OWASP Top 10 : le chapitre Contrôle d'accès défaillant (A01) du cours Sécurité applicative détaille les IDOR et leurs corrections.

Exercices

Exercice 1 sur 5 Quel modèle ? Réussi À revoir

Associe chaque situation au modèle de contrôle d'accès qu'elle illustre (DAC, MAC, RBAC, ABAC).

  1. Julie partage un fichier de son espace en ligne avec Karim, en lecture seule.
  2. Dans le logiciel de paie, les droits viennent du profil « gestionnaire de paie ».
  3. Un responsable d'agence ne voit les contrats que de son agence, et seulement depuis un poste de l'entreprise.
  4. Un document classé « confidentiel défense » ne peut pas être ouvert par une personne habilitée au niveau inférieur, même si son propriétaire le voulait.
Voir la réponseMasquer la réponse de l'exercice 1
  1. DAC : la propriétaire décide elle-même.
  2. RBAC : les droits sont portés par un rôle.
  3. ABAC : la décision combine un attribut de la personne (son agence), de la ressource (l'agence du contrat) et du contexte (le poste).
  4. MAC : une politique centrale, avec des niveaux, que personne ne peut contourner.

Tu avais trouvé ?

Exercice 2 sur 5 Le droit effectif Réussi À revoir

Le dossier partagé Compta a ces autorisations. Partage : Utilisateurs authentifiés en Lecture. NTFS : DL_Compta_Modification en Modification. Paul Martin est membre (par AGDLP) de DL_Compta_Modification.

  1. Quel est le droit effectif de Paul quand il ouvre \\srv-fichiers\Compta depuis son poste ?
  2. Et s'il ouvre le dossier en session locale sur le serveur ?
  3. Que faut-il changer pour qu'il puisse travailler par le réseau ?
Voir la réponseMasquer la réponse de l'exercice 2
  1. Lecture : par le réseau, on retient le plus restrictif entre le partage (Lecture) et NTFS (Modification).
  2. Modification : en local, seules les autorisations NTFS s'appliquent.
  3. Passer l'autorisation de partage à Modification (ou plus) pour les utilisateurs authentifiés, et laisser NTFS faire le tri : seuls les membres de DL_Compta_Modification pourront écrire.

Tu avais trouvé ?

Exercice 3 sur 5 La note de frais 1043 Réussi À revoir

Une API répond à GET /api/notes-de-frais/:id par SELECT * FROM note_frais WHERE id = ?, après avoir vérifié que l'utilisateur est authentifié.

  1. Nomme la vulnérabilité et décris une exploitation.
  2. Corrige la requête.
  3. Que doit renvoyer l'API quand la note existe mais appartient à un autre salarié ?
Voir la réponseMasquer la réponse de l'exercice 3
  1. Une référence directe non sécurisée (IDOR), forme de contrôle d'accès défaillant (A01 de l'OWASP). Un salarié authentifié remplace son numéro de note par d'autres (1042, 1044…) et lit les notes de frais de ses collègues : montants, lieux, données personnelles.
  2. SELECT * FROM note_frais WHERE id = ? AND id_salarie = ?, avec l'identifiant du salarié pris dans la session ou le jeton vérifié. Un comptable, qui doit voir toutes les notes, passe par une autre route protégée par son rôle.
  3. 404 (introuvable) plutôt que 403 : l'API ne confirme pas l'existence d'une note que l'utilisateur n'a pas le droit de voir. Un 403 reste acceptable s'il est cohérent dans toute l'API ; l'essentiel est de ne renvoyer aucune donnée.

Tu avais trouvé ?

Exercice 4 sur 5 Séparation des tâches Réussi À revoir

Dans le logiciel comptable de Sorbier Logistique, Karim Morel, responsable comptable, peut créer un fournisseur, saisir ses factures et valider les paiements. Quel principe n'est pas respecté ? Quel risque cela crée-t-il, et comment le corriger avec des rôles ?

Voir la réponseMasquer la réponse de l'exercice 4

La séparation des tâches : une seule personne peut réaliser toute la chaîne d'un paiement. Elle pourrait créer un faux fournisseur avec son propre IBAN, saisir une fausse facture et la payer, sans qu'aucun contrôle ne l'arrête (fraude interne, ou compte piraté utilisé de la même façon). Correction : séparer les rôles, par exemple « gestion des fournisseurs » et « saisie des factures » pour les comptables, « validation des paiements » pour le responsable, avec la règle qu'un utilisateur ne peut pas valider un paiement vers un fournisseur qu'il a créé ou modifié récemment, et la journalisation de ces actions.

Tu avais trouvé ?

Exercice 5 sur 5 Le compte de l'application Réussi À revoir

L'application de tickets de Sorbier Logistique se connecte à MySQL avec le compte root. Explique le risque en une phrase, puis propose les droits du compte applicatif, sachant que l'application lit toute la base parc, crée et modifie des tickets, et ajoute des interventions.

Voir la réponseMasquer la réponse de l'exercice 5

Si l'application est compromise (injection SQL, mot de passe trouvé dans le code), l'attaquant obtient tous les droits sur tout le serveur : il peut lire, modifier ou supprimer toutes les bases, créer des comptes. Droits proposés, selon le moindre privilège :

sql
CREATE USER 'app_tickets'@'10.0.1.20' IDENTIFIED BY 'Phrase-de-passe-longue-et-unique-2026';
GRANT SELECT ON parc.* TO 'app_tickets'@'10.0.1.20';
GRANT INSERT, UPDATE ON parc.ticket TO 'app_tickets'@'10.0.1.20';
GRANT INSERT ON parc.intervention TO 'app_tickets'@'10.0.1.20';

Aucun DELETE, aucun droit de structure (CREATE, ALTER, DROP), connexion limitée à l'adresse du serveur applicatif.

Tu avais trouvé ?

Chapitre terminé !

Fais les 5 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Comptes à privilèges, PAM et bastion d'administrationRevoir le sommaire du cours