Zugriffskontrollbedingungen für externe explizite Rollen überprüfen [Neu in Security Center 1.5]

  • Freigeben Version: Washingtondc
  • Aktualisiert 14. Februar 2024
  • 3 Minuten Lesedauer
  • Es wird empfohlen, das Plugin „Explicit Roles“ zu verwenden, um vorzuschreiben, dass alle Benutzer entweder über die Rolle „snc_internal“ für den Zugriff auf interne Ressourcen oder die Rolle „snc_external“ für den Zugriff auf externe Ressourcen verfügen.

    Nach der Installation dieses Plugins wird allen vorhandenen Benutzern die Rolle „snc_internal“ zugewiesen, und vorhandene Zugriffssteuerungslisten (ACLs) werden mit den Rollenbedingungen ausgefüllt. Aufgrund der Automatisierungslogik oder des Eingreifens eines Instanzadministrators können die Rollen snc_internal oder snc_external fälschlicherweise einer ACL hinzugefügt werden, die bereits eine strengere Rollenanforderung enthält. Da die ACL-Rollenbewertung für jeden Benutzer übergeben wird, der eine einer ACL zugeordnete Rolle enthält, ist das Hinzufügen von snc_internal oder snc_external möglicherweise zu weit für den beabsichtigten Zweck einer ACL. Dies kann zu Datenverlust führen, wenn einem Benutzer mit geringen Berechtigungen Zugriff über die ACL gewährt wird.

    Beispielsweise wäre es nicht erforderlich, dass die Rollen „snc_internal“ und „admin“ derselben ACL innerhalb einer Tabelle zugeordnet werden. Die ACL soll Administratoren Zugriff gewähren. In diesem Fall ist die Rolle snc_internal ein Fehler. Oder die ACL soll allen snc_internal-Benutzern Zugriff gewähren, wodurch die Administratorrolle unnötig wird. Wenn das Plugin „Explicit Roles“ installiert ist, überprüfen Sie die ACLs, die eine Rollenbedingung für snc_internal oder snc_external sowie eine Bedingung für eine andere Rolle enthalten. Wenn die Rollen für einen bestimmten Anwendungsfall funktionieren, sollte das Ergebnis regelmäßig überprüft werden.

    Führen Sie das folgende Hintergrundskript aus, um eine Liste von ACLs zu erfassen, bei denen snc_internal oder snc_external einer ACL hinzugefügt wurde, die bereits einer anderen Rolle zugeordnet ist. Überprüfen Sie, ob ACLs Benutzern mit den Rollen snc_internal oder snc_external Zugriff gewähren sollen. Wenn Benutzer mit geringen Berechtigungen keinen Zugriff über die ACL haben sollen, entfernen Sie die Rollen snc_internal oder snc_external. Das Entfernen dieser Rollen kann dazu führen, dass Benutzer nicht über eine verbleibende Rolle verfügen und nicht auf die durch die ACL geschützte Ressource zugreifen können.

    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);
    }

    Weitere Informationen

    Attribut Beschreibung
    Konfigurationsname com.glide.explicit_roles, sys_security_acl und sys_security_acl_role
    Konfigurationstyp Systemeigenschaften (/sys_properties_list.do)
    Datentyp Kein Datentyp
    Empfohlener Wert Kein empfohlener Wert
    Standardwert Kein Standardwert
    Kategorie Zugriffssteuerung
    Sicherheitsrisiko
    • Schweregradpunktzahl: 4.2
    • CVSS-Punktzahl: Mittel
    • Details zum Sicherheitsrisiko: Aufgrund der Automatisierung oder des Eingreifens eines Instanzadministrators können die Rollen src_internal oder src_external einer ACL hinzugefügt werden, die bereits eine strengere Rollenanforderung enthält. Da die ACL-Rollenbewertung für jeden Benutzer übergeben wird, der eine Rolle enthält, die einer ACL zugeordnet ist, ist das Hinzufügen einer der beiden Rollen für den Zweck einer ACL zu weit gefasst und kann zu Datenverlust führen, wenn einem Benutzer mit geringen Berechtigungen Zugriff über die ACL gewährt wird.
    Referenzen Explizite Rollen