Permissions toxiques sur Salesforce : les combinaisons qui créent le risque

Une permission toxique n'est presque jamais un droit dangereux pris isolément. C'est une combinaison de droits qui, séparément, ont tous une bonne raison d'exister. C'est pour ça qu'elle survit aux revues d'habilitation.

Mis à jour le

100 %
dans votre org
0
donnée sortante par défaut
71/255
contrôles auto-évalués
10 min
d'installation

Qu'est-ce qu'une permission toxique ?

Une permission toxique est un ensemble de droits dont la réunion sur un même compte permet une action qu'aucun de ces droits ne permettait seul. Sur Salesforce, la forme la plus courante associe un droit de lecture étendue, un droit d'écriture ou d'export, et l'absence d'un contrôle qui aurait dû encadrer les deux.

La difficulté n'est pas de reconnaître un droit sensible — tout administrateur sait ce que fait Modifier toutes les données. Elle est de voir qu'il coexiste, sur le même profil, avec une API activée et sans authentification multifacteur. Chaque élément a été accordé à un moment différent, par une personne différente, pour une raison légitime.

Quelles combinaisons reviennent le plus ? Détecteur par détecteur

Chaque combinaison porte ci-dessous le détecteur qui la mesure, sa clé de constat et son seuil : le même niveau de preuve que la liste complémentaire plus bas, pour qu'aucune des cinq ne soit affirmée sans être vérifiable.

Lecture totale + export en masse

Afficher toutes les données associé à un droit d'export — API de masse, export hebdomadaire, ou rapport exportable — donne à un compte la capacité d'extraire l'intégralité du référentiel client en une opération. Aucun des deux droits n'est anormal : le premier sert au support, le second au pilotage.

Détecteur DataExportRiskCollector · constat Security:DataExport:BulkExport · seuil : ViewAllData croisé avec DataExport, ExportReport ou ApiEnabled sur un même compte actif — constat Élevé dès que plus de 3 comptes actifs portent la combinaison

Modification totale + API + MFA absente

C'est la combinaison la plus citée dans les incidents Salesforce. Modifier toutes les données et l'accès API sur un compte qui n'exige pas de second facteur transforme un identifiant compromis en accès complet, sans interaction humaine et sans trace d'interface. Les comptes d'intégration y sont particulièrement exposés : on leur accorde des droits larges parce qu'ils automatisent, et on leur épargne le MFA pour la même raison.

Détecteur BlastRadiusCollector · constat Security:ToxicCombo · seuil : (ModifyAllData ou ViewAllData) + ApiEnabled sur un compte actif sans signal MFA — l'absence de signal compte contre le compte, jamais pour lui — palier TPE

Gestion des utilisateurs + attribution d'ensembles d'autorisations

Un compte qui peut créer des utilisateurs et leur attribuer des ensembles d'autorisations peut s'octroyer indirectement n'importe quel droit. C'est une escalade de privilège au sens strict, et elle ne déclenche aucune alerte native.

Détecteur SecurityPostureCollector · constat Security:OverPrivilege:ManageUsers · seuil : nombre de détenteurs de « Gérer les utilisateurs » au-delà du plafond réglé dans l'administration (5 par défaut). Le croisement avec l'attribution d'ensembles n'est pas mesuré aujourd'hui : cette combinaison figure ici parce qu'elle se vérifie à la main, pas parce qu'un détecteur la produit.

Accès invité et communautés

Les profils invités des sites Experience Cloud héritent parfois de droits objet qu'on ne leur destinait pas. Un droit de lecture accordé à un profil invité expose la donnée à un visiteur non authentifié — c'est du contrôle d'accès, pas de la configuration de site.

Détecteur GuestExposureCollector · constat Security:GuestExposure · seuil : tout objet en lecture ou écriture pour un profil invité de site Experience Cloud

Applications connectées et jetons OAuth dormants

Une application connectée autorisée il y a deux ans conserve son jeton tant que personne ne le révoque. La question à poser n'est pas « qui a accès ? » mais « quelles portées OAuth ont été accordées, à quoi, et qui s'en sert encore ? ».

Détecteur ConnectedAppRiskCollector · constat Security:OAuthApp · seuil : dormance à 90 jours, score de risque à partir de 40 — une portée full ou refresh_token vaut 30 points à elle seule

Quelles autres combinaisons surveiller ?

Le point aveugle

Ces combinaisons ne déclenchent aucune alerte native. Salesforce les autorise toutes : ce sont des configurations valides. Vous les découvrez à l'audit, ou à l'incident.

Écran Constats d'OrgGuardian montrant des combinaisons toxiques détectées, avec leur cible et leur exposition chiffrée
Une combinaison toxique, telle qu'elle remonte. Le profil nommé, les droits cumulés, et le montant qui s'ensuit.

Pourquoi une revue manuelle les rate-t-elle ?

Une revue d'habilitation regarde les droits profil par profil. Or un utilisateur cumule un profil et un nombre quelconque d'ensembles d'autorisations, chacun apportant sa part. Le droit effectif d'un compte est la somme de ces couches, et cette somme n'est affichée nulle part sous une forme exploitable.

Une org de taille moyenne compte des dizaines de profils, des centaines d'ensembles d'autorisations et des milliers d'utilisateurs. Le produit cartésien à examiner dépasse ce qu'une revue trimestrielle peut couvrir — et il change entre deux revues.

Comment les repérer à l'échelle ?

Ce qui se lit, et où. Le droit effectif d'un compte est la réunion de son profil et de ses ensembles d'autorisations : il se reconstruit depuis trois objets — PermissionSet (qui porte aussi les profils, IsOwnedByProfile = true), PermissionSetAssignment (qui relie chaque ensemble à chaque utilisateur) et User (pour l'état actif, la licence et la dernière connexion). Les champs PermissionsModifyAllData, PermissionsViewAllData, PermissionsApiEnabled, PermissionsManageUsers se lisent directement sur PermissionSet. L'état MFA vient de l'ensemble d'autorisations qui porte « Authentification multifacteur pour les connexions à l'interface utilisateur » et des paramètres de session du profil.

Ce que l'interface native sait faire : lister les ensembles d'autorisations qui portent un droit donné (Configuration › Ensembles d'autorisations, filtre sur une permission), et lister les utilisateurs d'un ensemble. Où elle décroche : aucun écran n'affiche l'union profil + ensembles d'un utilisateur, aucun ne croise deux droits, aucun ne croise un droit avec l'état MFA. Un rapport standard sur PermissionSetAssignment rend la liste brute — plusieurs milliers de lignes sur une org de 500 utilisateurs — sans l'agréger.

La procédure, donc : (1) extraire PermissionSetAssignment joint à PermissionSet pour les seuls ensembles qui portent au moins un droit large ; (2) agréger par utilisateur pour obtenir le droit effectif ; (3) ne retenir que les combinaisons — un droit isolé n'est pas un constat ; (4) joindre l'état MFA et la licence, pour séparer le compte humain du compte d'intégration ; (5) rejouer à chaque changement d'affectation, pas à chaque audit. C'est exactement ce que fait BlastRadiusCollector, avec un plafond de 5 000 affectations par passe au-delà duquel le constat dit qu'il a tronqué plutôt que de se taire — et une ligne manquante peut faire rater une combinaison, jamais en fabriquer une.

Combien de temps faut-il pour auditer une org ?

À la main, sur une org de quelques centaines d'utilisateurs, une revue sérieuse des droits effectifs se compte en jours — et elle est périmée le lendemain. Instrumentée, la même mesure se rejoue à chaque scan, ce qui déplace l'effort de la collecte vers la décision.

Que faire d'une permission toxique une fois trouvée ?

Rarement la supprimer d'emblée : elle sert à quelque chose. L'ordre utile est de déterminer qui l'utilise réellement, de couvrir le risque par un contrôle compensatoire — MFA obligatoire, restriction d'adresse IP, réduction de portée OAuth — puis de retirer ce qui n'est plus employé. C'est pour ça qu'un outil de détection doit rester en lecture seule : la décision de retirer un droit en production appartient à l'humain qui en connaît l'usage.

Auteur

Stéphane Berthoz

Écrit et maintient le code d'OrgGuardian, le package managé Salesforce édité par DOPAMINE SAS. Ce qui est décrit ici vient de la construction de l'outil, pas d'une lecture de seconde main.

Faire mesurer votre org Voir ce que ça donne

Réponse sous 24 h ouvrées

Vos combinaisons toxiques, nommées une par une.

Les combinaisons décrites ici, OrgGuardian les cherche dans votre org et les nomme. Le premier scan tourne en lecture seule : il détecte et il conseille, il ne remédie jamais à votre place.

Ou par e-mail : contact@orgguardian.com