Examiner les conditions de contrôle d’accès aux rôles explicites superflus [Nouveau dans Security Center 1.5]

  • Rversion finale: Washingtondc
  • Mis à jour 14 févr. 2024
  • 3 minutes de lecture
  • Le module d’extension Explicit Roles est recommandé pour exiger que tous les utilisateurs disposent du rôle snc_internal pour accéder aux ressources internes, ou du rôle snc_external pour accéder aux ressources externes.

    Après l’installation de ce module d’extension, tous les utilisateurs existants se voient affecter le rôle snc_internal et les listes de contrôle d’accès (ACL) existantes sont renseignées avec les conditions de rôle. En raison d’une logique d’automatisation ou d’une intervention d’un administrateur d’instance, les rôles snc_internal ou snc_external peuvent être ajoutés de manière incorrecte à une ACL qui contient déjà une exigence de rôle plus stricte. Étant donné que l’évaluation du rôle ACL s’appliquera à tout utilisateur disposant d’un rôle mappé à une ACL, l’ajout de snc_internal ou de snc_external peut être trop large pour l’objectif prévu d’une ACL. Cela peut entraîner une fuite de données si un utilisateur ayant peu de privilèges se voit accorder l’accès via l’ACL.

    Par exemple, il serait inutile que les rôles snc_internal et administrateur soient mappés sur la même liste de contrôle d’accès au sein d’une table. L’ACL est destinée à accorder l’accès aux administrateurs, auquel cas le rôle snc_internal est une erreur. Sinon, l’ACL est destinée à accorder l’accès à tous les utilisateurs snc_internal, ce qui rend le rôle administrateur inutile. Lorsque le module d’extension Explicit Roles est installé, examinez les ACL qui contiennent une condition de rôle pour snc_internal ou snc_external tout en contenant une condition pour un autre rôle. Si les rôles sont en mesure de fonctionner pour un cas d’utilisation spécifique, le résultat doit être revu périodiquement.

    Exécutez le script en arrière-plan suivant pour capturer une liste des ACL auxquelles ont snc_internal ou snc_external ajoutées à une ACL déjà mappée à un autre rôle. Validez si les ACL doivent accorder l’accès aux utilisateurs ayant les rôles snc_internal ou snc_external. Si les utilisateurs ayant des privilèges faibles ne doivent pas avoir accès via l’ACL, supprimez les rôles snc_internal ou snc_external. La suppression de ces rôles peut empêcher les utilisateurs d’accéder à la ressource protégée par l’ACL s’ils ne disposent pas d’un rôle restant.

    var ExplicitRolesEnabled = new GlidePluginManager().isActive('com.glide.explicit_roles');
    
    // Only check if Explicit Roles is enabled
    if (ExplicitRolesEnabled) {
    
        var counterBadInternalACLs = 0;
        var counterBadExternalACLs = 0;
        var sysIdSncInternal = '7fcaa702933002009c8579b4f47ffbde';
        var sysIdSncExternal = '940ba702933002009c8579b4f47ffbe2';
        var api = new SNC.RoleManagementAPI();
    
        var gr = new GlideRecord('sys_security_acl_role');
        gr.addQuery('sys_user_role', sysIdSncInternal);
        gr.query();
        while (gr.next()) {
            var aclSysId = gr.sys_security_acl;
            var gr2 = new GlideRecord('sys_security_acl_role');
            gr2.addQuery('sys_security_acl', aclSysId);
            gr2.addQuery('sys_user_role', '!=', sysIdSncInternal);
            gr2.addQuery('sys_user_role', '!=', sysIdSncExternal);
            gr2.query();
    
            while (gr2.next()) {
                // exclude the roles if that contain snc_external
                var role = gr2.sys_user_role;
                var containedRoles = api.findAllContainedRolesForRole(role);
                if (containedRoles.contains(sysIdSncExternal))
                    continue;
                gs.print('Found an ACL with snc_internal and yet another role=' + role + '; ACL sys_id=' + aclSysId);
                counterBadInternalACLs++;
                break;
            }
        }
    
        var gr = new GlideRecord('sys_security_acl_role');
        gr.addQuery('sys_user_role', sysIdSncExternal);
        gr.query();
        while (gr.next()) {
            var aclSysId = gr.sys_security_acl;
            var gr2 = new GlideRecord('sys_security_acl_role');
            gr2.addQuery('sys_security_acl', aclSysId);
            gr2.addQuery('sys_user_role', '!=', sysIdSncInternal);
            gr2.addQuery('sys_user_role', '!=', sysIdSncExternal);
            gr2.query();
    
            while (gr2.next()) {
                // exclude the roles if that contain snc_internal
                var role = gr2.sys_user_role;
                var containedRoles = api.findAllContainedRolesForRole(role);
                if (containedRoles.contains(sysIdSncInternal))
                    continue;
                gs.print('Found an ACL with snc_external and yet another role=' + role + '; ACL sys_id=' + aclSysId);
                counterBadExternalACLs++;
                break;
            }
        }
    
        gs.print('Total number of ACLs with snc_internal and other roles: ' + counterBadInternalACLs);
        gs.print('Total number of ACLs with snc_external and other roles: ' + counterBadExternalACLs);
    }

    En savoir plus

    Attribut Description
    Nom de la configuration com.glide.explicit_roles, sys_security_acl et sys_security_acl_role
    Type de configuration Propriétés système (/sys_properties_list.do)
    Type de données Aucun type de données
    Valeur recommandée Aucune valeur recommandée
    Valeur par défaut Aucune valeur par défaut
    Catégorie Contrôle d'accès
    Risque de sécurité
    • Score de gravité : 4,2
    • Score CVSS : moyen
    • Détails du risque de sécurité : en raison de l’automatisation ou de l’intervention d’un administrateur d’instance, les rôles src_internal ou src_external peuvent être ajoutés à une ACL qui contient déjà une exigence de rôle plus stricte. Étant donné que l’évaluation du rôle ACL s’appliquera à tout utilisateur disposant d’un rôle mappé à une ACL, l’ajout de l’un ou l’autre rôle sera trop large pour l’objectif d’une ACL et risque d’entraîner une fuite de données si un utilisateur ayant peu de privilèges se voit accorder l’accès via l’ACL.
    Références Explicit Roles