Falsch konfigurierte Salesforce-Communitys können dazu führen, dass sensible Salesforce-Daten für jedermann im Internet zugänglich sind. Anonyme Benutzer können Objekte abfragen, die sensible Informationen wie Kundenlisten, Supportfälle und E-Mail-Adressen von Mitarbeitern enthalten.
Unser Forschungsteam hat zahlreiche öffentlich zugängliche Salesforce-Communitys entdeckt, die falsch konfiguriert sind und sensible Informationen preisgeben.
Dies ist nicht das erste- und wird auch nicht das letzte Mal sein, dass eine SaaS-Konfiguration zu einem potenziellen Sicherheitsproblem führt. Dies unterstreicht die Notwendigkeit für Sicherheitsteams, kontinuierlich ihre SaaS-Exposition zu bewerten.
Dieser Leitfaden erklärt, wie ein Angreifer diese Fehlkonfiguration ausnutzen kann, und gibt Salesforce-Administratoren detaillierte Schritte an die Hand:
Mindestens ein bösartiger Akteur könnte diese Fehlkonfiguration nutzen, um für eine Spear-Phishing-Kampagne Erkundungen durchzuführen. Schlimmstenfalls könnten sensible Informationen über das Unternehmen, seine Abläufe, Kunden und Partner gestohlen werden.
In einigen Fällen kann ein raffinierter Angreifer lateral vorgehen und Informationen von anderen Diensten abrufen, die in dem Salesforce-Konto integriert sind.
Mit einer Salesforce-Community-Seite können Ihre Kunden und Partner von außerhalb Ihres Unternehmens auf Ihre Salesforce-Instanz zugreifen. Sie können Support-Tickets öffnen, Fragen stellen, ihre Abonnements verwalten und vieles mehr.
Communitys sind öffentlich zugänglich und werden standardmäßig von Google indiziert. Dies ist zwar für Kunden und Partner nützlich, macht es aber Angreifern, die eine Schwachstelle oder Fehlkonfiguration entdecken, leicht, nach Communitys zu suchen und diese in großem Umfang zu missbrauchen.
Wie Sie sehen werden, ist Salesforce in hohem Maße individuell anpassbar und kann schwierig zu verwalten sein. Keine Salesforce-Instanz gleicht der anderen, denn es gibt Hunderte von Drittanbieteranwendungen, benutzerdefinierten Objekten und Konfigurationen.
Salesforce-Communitys laufen auf dem Lightning-Framework von Salesforce. Lightning ist ein schnelles Entwicklungsframework für mobile und Desktop-Websites.
Salesforce Lightning ist ein auf Komponenten ausgerichtetes Framework. Diese Komponenten, auch Aura-Komponenten genannt, sind eigenständige Objekte, die ein Entwickler zusammenstellen kann, um benutzerdefinierte Webseiten zu erstellen.
Aura-Komponenten können verwendet werden, um Aktionen mit Salesforce-Objekten durchzuführen, z. B. das Anzeigen oder Aktualisieren von Datensätzen. Die Komponenten verfügen über Controller, die verschiedene Methoden zum Ausführen bestimmter Aufgaben exportieren.
Das Durchsuchen einer Community-Website mit einem Proxy-Service wie Burp Suite zeigt uns Lightning in Aktion. Die Front-End-Web-Benutzeroberfläche einer Community verwendet den HTTP-Endpoint /s/sfsites/aura.
Der Browser verwendet den Endpoint Aura, um Informationen über die Website abzurufen und serverseitige Aktionen durchzuführen, wenn der Benutzer mit der Community-Website interagiert. Natürlich gelten die User-Berechtigungen für diese Aktionen.
Das Aufrufen des Aura-Endpoint ist einfach eine HTTP-Anfrage, entweder GET oder POST, die aus folgenden Parametern besteht:
Die Nachrichtenstruktur ist ein URL-kodiertes JSON. Hier ein Beispiel:
{ "actions": [ { "id": "222;a", "descriptor": "serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData ", "callingDescriptor": "UNKNOWN", "params": {} } ] }
{ "actions": [ { "id": "222;a", "descriptor": "serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData ", "callingDescriptor": "UNKNOWN", "params": {} } ] }
Es gibt viele verschiedene Methoden, mit denen ein unauthentifizierter Benutzer Aktionen durchführen kann, wie z. B.:
Einige der Objekte, die Sie abfragen können, sind Konto, Benutzer, Fall, Mitarbeiter, Anhang, Kontakt und Lead.
Auf falsch konfigurierten Websites kann der Angreifer Informationen über das Unternehmen suchen, z. B. Benutzer, Objekte und Felder, die Namen und E-Mail-Adressen preisgeben, und in vielen Fällen das System infiltrieren oder Informationen stehlen.
Zunächst muss der Angreifer eine Community-Website finden, die sich für seine Zwecke eignet. Mit ein wenig Google-Magie ist das kein Problem. Es gibt allgemeine URL-„Fingerabdrücke“, die anzeigen, dass eine Website von Salesforce-Communitys betrieben wird:
Mit Operatoren wie „inurl:“ zusammen mit dem Namen des Ziels kann man oft die gewünschte Community-Site finden:
Der nächste Schritt ist das Abrufen von Informationen über die Site. Der Angreifer kann dies folgenderweise tun:
serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData
serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData
Diese Methode gibt die Domain des Unternehmens, einige Sicherheitseinstellungen (z. B. CSP-Domains (Zulässige Content-Sicherheitsrichtlinie)) und verfügbare Objekte zurück.
Der Angreifer kann verschiedene Methoden aufrufen, um verschiedene Aktionen durchzuführen, wie z. B.:
Angreifer können versuchen, direkt auf sensible Daten zuzugreifen. Unser Sicherheitsteam hat in unserer Forschung Unmengen offenliegender vertraulicher Datensätze gefunden.
Der Angreifer kann bestimmte Objekte anvisieren und sie durch den Aufruf folgender Methode untersuchen:
aura://RecordUiController/ACTION$getObjectInfo
aura://RecordUiController/ACTION$getObjectInfo
die Informationen über ein Objekt ausgibt. Diese Methode unterstützt alle Arten von Objekten, einschließlich benutzerdefinierter Objekte.
Die Informationen umfassen die verschiedenen Felder, wie sie konfiguriert sind und die untergeordneten Beziehungen des Objekts.
Der nächste Schritt wäre die Auflistung der Datensätze mittels folgender Methode:
serviceComponent://ui.force.components.controllers.lists.selectableListDataProvider.SelectableListDataProviderController/ACTION$getItems.
serviceComponent://ui.force.components.controllers.lists.selectableListDataProvider.SelectableListDataProviderController/ACTION$getItems.
Hier ist ein Beispiel für die Auflistung von Kontodatensätzen mit dieser Methode:
Der Angreifer kann dann mit folgenden Methoden noch mehr Informationen abrufen:
serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$getRecord
serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$getRecord
Oder
aura://RecordUiController/ACTION$getRecordWithFields
aura://RecordUiController/ACTION$getRecordWithFields
Interessante Datensätze mit mehr Feldern und verwandten Objekten abrufen.
Ein fortgeschrittener Angreifer könnte versuchen, anfällige benutzerdefinierte und Drittanbieter-Komponenten anzugreifen.
In einigen Fällen kann die gesamte Salesforce-Instanz übernommen werden, indem einfach eine anfällige benutzerdefinierte Apex-Klasse genutzt wird, die Gastbenutzern zur Verfügung steht.
Beim Durchsuchen der Website können wir sehen, dass der Browser mehrere verschiedene JavaScript-Dateien mit seltsamen URLs lädt, die mit /l/ und dann einem kodierten JSON-Objekt beginnen.
In diesen JavaScript-Dateien finden sich die Definitionen für die meisten zugänglichen Endpoints, einschließlich benutzerdefinierter und/oder Drittanbieter-Anwendungen. Die Definitionen sind in JSON kodiert:
{ "descriptor": "compound://my_app.Component", "ac": [ { "n": "doAction", "descriptor": "apex://my_app.ComponentController/ACTION$doAction", "at": "SERVER", "rt": "apex://String", "pa": [], "st": true } ], "pa": [ { "name": "paramName", "type": "apex://String" } ] }
{ "descriptor": "compound://my_app.Component", "ac": [ { "n": "doAction", "descriptor": "apex://my_app.ComponentController/ACTION$doAction", "at": "SERVER", "rt": "apex://String", "pa": [], "st": true } ], "pa": [ { "name": "paramName", "type": "apex://String" } ] }
Durch Scannen der Antwort auf ähnlich geformte JSON-Strings kann man etwas über die benutzerdefinierten Methoden erfahren, und wie man sie aufruft.
Die Verwaltung einer Community-Website ist eine schwierige Aufgabe. Es muss sichergestellt werden, dass anonyme Gastnutzer und Gemeinschaftsnutzer nur auf die vorgesehenen und erforderlichen Datensätze zugreifen können. Es gibt Informationen, die Sie mit der Welt teilen wollen, und andere, die Sie nicht teilen wollen.
Um Ihre Salesforce-Umgebung abzusichern, ist es sehr wichtig, das Prinzip der notwendigsten Berechtigung zu befolgen und sicherzustellen, dass Gastprofile nur die minimal erforderlichen Berechtigungen zulassen.
Navigieren Sie zu Ihrem Site Builder (suchen Sie im Setup nach „Alle Sites“) und klicken Sie auf Einstellungen oder das Zahnradsymbol auf der linken Seite.
Ihr Gastbenutzerprofil finden Sie unter Allgemein. Klicken Sie darauf, um die Berechtigungen des Gastbenutzers zu ändern.
Hier können Sie die Sicherheit auf Feldebene steuern, um den Zugriff auf einer sehr präzisen Ebene zu kontrollieren. Hier müssen Sie Entscheidungen über den Zugriff treffen, die speziell auf die Bedürfnisse Ihres Unternehmens zugeschnitten sind.
Es ist wichtig, sicherzustellen, dass API aktiviert nicht markiert ist. Es wird empfohlen, auch Auf Aktivitäten zugreifen zu deaktivieren.
Es ist wichtig, die Berechtigungen und Rollen von Gast- und Community-Nutzern ständig zu überwachen und die ihnen gehörenden Datensätze (und die damit verbundenen Objekte) im Auge zu behalten, um sicherzustellen, dass sensible Informationen nicht öffentlich zugänglich werden.
Gehen Sie entweder direkt zu den Workspaces Ihrer Website oder verwenden Sie den Website-Builder, um zum Administrator-Workspace zu navigieren:
Stellen Sie in den Einstellungen sicher, dass Sie einen Standardeigentümer für Datensätze einrichten, die von Gastbenutzern erstellt wurden. In den meisten Fällen sollten Sie die Option Gastbenutzer Mitglieder dieser Website sehen lassen deaktivieren.
Überprüfen Sie, ob die Standardzugriffseinstellung für Gastbenutzer sicher ist: Gehen Sie zur Einrichtung und suchen Sie nach Freigabeeinstellungen. Suchen Sie dort die Option Sicherer Zugriff für Gastbenutzer und überprüfen Sie, ob sie aktiviert ist.
Salesforce versucht, Ihnen zu helfen, intelligente Entscheidungen über den Gastzugang zu treffen. Seit der Version vom Sommer ’20 hat Salesforce es unmöglich gemacht, diese Einstellung zu deaktivieren. Außerdem können Sie Gastbenutzern jetzt nicht mehr die Berechtigung Alle Benutzer sehen erteilen, und Sie können ihnen keinen Zugriff auf alle Daten gewähren.
Es ist jedoch nach wie vor von größter Bedeutung, die Konfigurationseinstellungen zu überprüfen. Salesforce kann sie nicht für Sie deaktivieren, da verschiedene Benutzer unterschiedliche Anforderungen haben.
Wie Sie sehen, gibt es bei so komplexen und anpassbaren SaaS-Anwendungen wie Salesforce unzählige Konfigurationseinstellungen und Berechtigungen, um die man sich kümmern muss.
Die meisten Unternehmen stellen Dutzende sanktionierter SaaS-Anwendungen mit jeweils eigenen Objekten, Berechtigungsmodellen, APIs und Freigabefunktionen bereit.
Aus diesem Grund haben wir DatAdvantage Cloud entwickelt – um eine einheitliche Methode zum Auffinden von Schwachstellen, zum Anpassen von Berechtigungen und zum Durchführen von Untersuchungen für alle Ihre genehmigten SaaS-Anwendungen zu bieten.
serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData
serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData
Ruft die App-Daten einschließlich einer Liste von Objekten ab, die häufig benutzerdefinierte Objekte und die Salesforce-Login-Domain enthalten.
serviceComponent://ui.global.components.one.one.controller.OneController/ACTION$getCurrentApp
serviceComponent://ui.global.components.one.one.controller.OneController/ACTION$getCurrentApp
Ruft weitere Informationen zur App ab, einschließlich einer erweiterten Liste von Objekten
aura://RecordUiController/ACTION$getObjectInfo
aura://RecordUiController/ACTION$getObjectInfo
Diese Funktion gibt die Definition des Objekts zurück: seine Felder, seine Beziehungen und seine Konfiguration.
serviceComponent://ui.force.components.controllers.lists.selectableListDataProvider.SelectableListDataProviderController/ACTION$getItems
serviceComponent://ui.force.components.controllers.lists.selectableListDataProvider.SelectableListDataProviderController/ACTION$getItems
Listet Datensätze der angegebenen Objekte auf.
serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$getRecord
serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$getRecord
{id}.undefined.null.null.null.Id.VIEW.false.null.{fields}.null
{id}.undefined.null.null.null.Id.VIEW.false.null.{fields}.null
00500000000XxXXWXX.undefined.null.null.null.Id.VIEW.false.null.Name,CreateBy;2Name.null
00500000000XxXXWXX.undefined.null.null.null.Id.VIEW.false.null.Name,CreateBy;2Name.null
Andere nicht dokumentierte Endpoints
aura://ActionsController/ACTION$getActionLayout aura://ActionsController/ACTION$getGlobalActions aura://ActionsController/ACTION$getListViewActions aura://ActionsController/ACTION$getLookupActions aura://ActionsController/ACTION$getMRUListActions aura://ActionsController/ACTION$getObjectCreateActions aura://ActionsController/ACTION$getQuickActionDefaults aura://ActionsController/ACTION$getRecordActions aura://ActionsController/ACTION$getRecordEditActions aura://ActionsController/ACTION$getRelatedListActions aura://ActionsController/ACTION$getRelatedListRecordActions aura://ActionsController/ACTION$getRelatedListsActions aura://ApexActionController/ACTION$execute aura://AppsController/ACTION$getNavItems aura://CanvasController/ACTION$getCanvasData aura://CommerceCatalogController/ACTION$getProduct aura://CommerceCatalogController/ACTION$getProductCategoryPath aura://CommerceImporterController/ACTION$importProducts aura://CommerceSearchController/ACTION$searchProducts aura://CommerceStorePricingController/ACTION$getProductPrice aura://ComponentController/ACTION$getApplication aura://ComponentController/ACTION$getApplicationDef aura://ComponentController/ACTION$getComponent aura://ComponentController/ACTION$getComponentDef aura://ComponentController/ACTION$getComponents aura://ComponentController/ACTION$getDefinitions aura://ComponentController/ACTION$getEventDef aura://ComponentController/ACTION$loadLabels aura://ComponentController/ACTION$reportDeprecationUsages aura://ComponentController/ACTION$reportFailedAction aura://ComponentController/ACTION$reportUsages aura://ConversationController/ACTION$getConversationCallStructureAndInsights aura://DynamicComponentController/ACTION$getTemplateDescriptorWithExpansionBundle aura://HostConfigController/ACTION$getConfigData aura://LabelController/ACTION$getLabel aura://LightningExperienceAssistantPlatformController/ACTION$getActiveQuestionnaires aura://LightningExperienceAssistantPlatformController/ACTION$getActiveScenarios aura://LightningExperienceAssistantPlatformController/ACTION$getAssistant aura://LightningExperienceAssistantPlatformController/ACTION$getQuestionnaire aura://LightningExperienceAssistantPlatformController/ACTION$saveAssistant aura://LightningExperienceAssistantPlatformController/ACTION$saveQuestionnaire aura://LinkedInSalesNavigatorController/ACTION$getSalesAccessToken aura://LinkedInSalesNavigatorController/ACTION$getSignupUrl aura://ListUiController/ACTION$getListInfoById aura://ListUiController/ACTION$getListInfoByName aura://ListUiController/ACTION$getListRecordsById aura://ListUiController/ACTION$getListRecordsByName aura://ListUiController/ACTION$getListUiById aura://ListUiController/ACTION$getListUiByName aura://ListUiController/ACTION$getListsByObjectName aura://LookupController/ACTION$getLookupRecords aura://ManagedContentController/ACTION$getManagedContentByTopicsAndContentKeys aura://ManagedContentController/ACTION$getPublishedManagedContentListByContentKey aura://MruListUiController/ACTION$getMruListInfo aura://MruListUiController/ACTION$getMruListRecords aura://MruListUiController/ACTION$getMruListUi aura://NavEventManagerController/ACTION$getClassicNonSetupPageReferenceMappings aura://NavEventManagerController/ACTION$getClassicSetupPageReferenceMappings aura://NavEventManagerController/ACTION$getResolvedIntegrationUrl aura://NavigationMenuController/ACTION$getCommunityNavigationMenu aura://OrchestrationController/ACTION$getOrchestrationInstance aura://OrchestrationController/ACTION$getOrchestrationInstanceCollection aura://OrchestrationController/ACTION$publishOrchestrationEvent aura://RecordMruController/ACTION$updateMru aura://RecordUiController/ACTION$createRecord aura://RecordUiController/ACTION$deleteRecord aura://RecordUiController/ACTION$executeAggregateUi aura://RecordUiController/ACTION$executeGraphQL aura://RecordUiController/ACTION$findDuplicates aura://RecordUiController/ACTION$getAggregateUi aura://RecordUiController/ACTION$getDedupeConfig aura://RecordUiController/ACTION$getDuplicateConfig aura://RecordUiController/ACTION$getFormByName aura://RecordUiController/ACTION$getLayout aura://RecordUiController/ACTION$getLayoutUserState aura://RecordUiController/ACTION$getObjectInfo aura://RecordUiController/ACTION$getObjectInfos aura://RecordUiController/ACTION$getPicklistValues aura://RecordUiController/ACTION$getPicklistValuesByRecordType aura://RecordUiController/ACTION$getRecordAvatars aura://RecordUiController/ACTION$getRecordCloneDefaults aura://RecordUiController/ACTION$getRecordCreateDefaults aura://RecordUiController/ACTION$getRecordDefaultsTemplateClone aura://RecordUiController/ACTION$getRecordDefaultsTemplateForCreate aura://RecordUiController/ACTION$getRecordUis aura://RecordUiController/ACTION$getRecordWithFields aura://RecordUiController/ACTION$getRecordWithLayouts aura://RecordUiController/ACTION$getRecordsWithFields aura://RecordUiController/ACTION$getRecordsWithLayouts aura://RecordUiController/ACTION$getValidationRulesInfo aura://RecordUiController/ACTION$postRecordAvatarAssociation aura://RecordUiController/ACTION$updateLayoutUserState aura://RecordUiController/ACTION$updateRecord aura://RelatedListUiController/ACTION$getRelatedListInfo aura://RelatedListUiController/ACTION$getRelatedListInfoBatch aura://RelatedListUiController/ACTION$getRelatedListInfoByApiName aura://RelatedListUiController/ACTION$getRelatedListInfoCollection aura://RelatedListUiController/ACTION$getRelatedListRecordCount aura://RelatedListUiController/ACTION$getRelatedListRecords aura://RelatedListUiController/ACTION$getRelatedListRecordsBatch aura://RelatedListUiController/ACTION$getRelatedListsRecordCount aura://RelatedListUiController/ACTION$updateRelatedListInfoByApiName aura://SearchGridLWCController/ACTION$updateUserColumnWidthPref aura://SeoPropertiesController/ACTION$getRecordSeoProperties aura://SitesController/ACTION$searchSite aura://StyleController/ACTION$applyTokens aura://WaveController/ACTION$deleteDataset aura://WaveController/ACTION$deleteRecipe aura://WaveController/ACTION$executeQueryByInputRep aura://WaveController/ACTION$getAnalyticsLimits aura://WaveController/ACTION$getDataflowJob aura://WaveController/ACTION$getDataflowJobNode aura://WaveController/ACTION$getDataflowJobNodes aura://WaveController/ACTION$getDataflowJobs aura://WaveController/ACTION$getDataflowJobsByDataflowId aura://WaveController/ACTION$getDataset aura://WaveController/ACTION$getDatasets aura://WaveController/ACTION$getRecipe aura://WaveController/ACTION$getRecipes aura://WaveController/ACTION$getReplicatedDatasets aura://WaveController/ACTION$getSchedule aura://WaveController/ACTION$getWaveFolders aura://WaveController/ACTION$getXmd aura://WaveController/ACTION$startDataflow aura://WaveController/ACTION$updateDataflowJob aura://WaveController/ACTION$updateSchedule serviceComponent://ui.chatter.components.aura.components.forceChatter.groups.actions.EditGroupNotificationSettingsController/ACTION$getNotificationSettings serviceComponent://ui.chatter.components.aura.components.forceChatter.groups.actions.EditGroupNotificationSettingsController/ACTION$setNotificationSettings serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$addParticipants serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$createMessage serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getMessagesDetail serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getMessagesListData serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getMessagingPermAndPref serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getMoreReplies serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getRichTextConfig serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getUserDetails serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$removeParticipants serviceComponent://ui.comm.runtime.components.aura.components.siteforce.controller.PubliclyCacheableAttributeLoaderController/ACTION$getComponentAttributes serviceComponent://ui.comm.runtime.components.aura.components.siteforce.controller.PubliclyCacheableComponentLoaderController/ACTION$getAudienceTargetedPageComponent serviceComponent://ui.comm.runtime.components.aura.components.siteforce.controller.PubliclyCacheableComponentLoaderController/ACTION$getPageComponent serviceComponent://ui.comm.runtime.components.aura.components.siteforce.network.tracking.NetworkTrackingController/ACTION$createLogRecord serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$getBootstrapCacheExpiration serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$getTopicDescription serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$isValidSObjectId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$setCurrentApp serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$validateRoute serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getActionOverrides serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getArticleUrlNameAndVersionId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getArticleVersionId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getCMSContentTypeAndURLName serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getCMSContentTypeUrlnameAndId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getCategoryPath serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getNameFieldValue serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getPersonAccountIdFromContactId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$isAllowViewEditConvertedLeadsOn serviceComponent://ui.comm.runtime.components.aura.components.siteforce.service.ServiceBodyController/ACTION$getTopicImageUrlFromContextId serviceComponent://ui.communities.components.aura.components.forceCommunity.baseSearch.BaseSearchController/ACTION$getCrossObjectDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.DeflectionDataProviderController/ACTION$getArticleDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.DeflectionDataProviderController/ACTION$getCombinedDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.DeflectionDataProviderController/ACTION$getCrossObjectDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.DeflectionDataProviderController/ACTION$getQuestionDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.LWCRecordDetailController/ACTION$getInitData serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.OmniBoxController/ACTION$getTopic serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.OmniBoxController/ACTION$getTopicFromEntityId serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.OmniBoxController/ACTION$getTopicFromUrl serviceComponent://ui.communities.components.aura.components.forceCommunity.navigationMenu.NavigationMenuDataProviderController/ACTION$getNavigationMenu serviceComponent://ui.communities.components.aura.components.forceCommunity.signalCollector.SignalCollectorController/ACTION$sendSignals serviceComponent://ui.force.components.controllers.action.ActionController/ACTION$getServerSideComponent serviceComponent://ui.force.components.controllers.dedupe.DedupeManagerController/ACTION$findMatches serviceComponent://ui.force.components.controllers.dedupe.DedupeManagerController/ACTION$getConfig serviceComponent://ui.force.components.controllers.dedupe.DedupeManagerController/ACTION$loadObjectApiInfo serviceComponent://ui.force.components.controllers.dedupe.DedupeManagerController/ACTION$loadRecords serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$cloneRecordWithRelatedEntities serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getDetailComponent serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getEntityConfig serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getNextRecordLayout serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getPostSaveNavigationEvent serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getRecord serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$saveSectionState serviceComponent://ui.force.components.controllers.dynamicLabel.UiDynamicLabelProviderController/ACTION$getLabel serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData serviceComponent://ui.force.components.controllers.inlineEdit.InlineEditController/ACTION$getNameField serviceComponent://ui.force.components.controllers.inlineEdit.InlineEditController/ACTION$getPostSaveNavigationEvent serviceComponent://ui.force.components.controllers.logoutHandler.LogoutHandlerController/ACTION$getLogoutURL serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$createQuickActionRecords serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$createRecord serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$deleteRecord serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$getRecord serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$saveQuickActionRecords serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$saveRecord serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$saveRecords serviceComponent://ui.force.components.controllers.recordLayoutBroker.RecordLayoutBrokerController/ACTION$getLayout serviceComponent://ui.force.components.controllers.recordLayoutBroker.RecordLayoutBrokerController/ACTION$getRecordAndLayout serviceComponent://ui.force.impl.aura.components.force.recordEditActions.RecordEditActionsController/ACTION$getEditActions serviceComponent://ui.global.components.one.actionsManager.ActionsManagerController/ACTION$handleAction serviceComponent://ui.identity.components.sessiontimeoutwarn.SessionTimeoutWarnController/ACTION$getSessionRefreshAction serviceComponent://ui.identity.components.sessiontimeoutwarn.SessionTimeoutWarnController/ACTION$getSessionTimeoutConfig serviceComponent://ui.instrumentation.components.beacon.InstrumentationBeaconController/ACTION$getLocators serviceComponent://ui.instrumentation.components.beacon.InstrumentationBeaconController/ACTION$sendData serviceComponent://ui.search.components.forcesearch.sgdp.MRUCacheController/ACTION$getGlobalMrus serviceComponent://ui.search.components.forcesearch.sgdp.PermsAndPrefsCacheController/ACTION$getPermsAndPrefs serviceComponent://ui.search.components.forcesearch.sgdp.ResultsFiltersCacheController/ACTION$getResultsFilterMetadata serviceComponent://ui.search.components.forcesearch.sgdp.ScopesCacheController/ACTION$getEntityLabels serviceComponent://ui.search.components.forcesearch.sgdp.ScopesCacheController/ACTION$getEntityNames serviceComponent://ui.search.components.forcesearch.sgdp.ScopesCacheController/ACTION$getScopeMaps serviceComponent://ui.self.service.components.profileMenu.ProfileMenuController/ACTION$getContextUserPhotoUrlAndUpdatedName serviceComponent://ui.self.service.components.profileMenu.ProfileMenuController/ACTION$getProfileMenuResponse serviceComponent://ui.sfa.components.nativeimport.ImportButtonController/ACTION$getConfig
aura://ActionsController/ACTION$getActionLayout aura://ActionsController/ACTION$getGlobalActions aura://ActionsController/ACTION$getListViewActions aura://ActionsController/ACTION$getLookupActions aura://ActionsController/ACTION$getMRUListActions aura://ActionsController/ACTION$getObjectCreateActions aura://ActionsController/ACTION$getQuickActionDefaults aura://ActionsController/ACTION$getRecordActions aura://ActionsController/ACTION$getRecordEditActions aura://ActionsController/ACTION$getRelatedListActions aura://ActionsController/ACTION$getRelatedListRecordActions aura://ActionsController/ACTION$getRelatedListsActions aura://ApexActionController/ACTION$execute aura://AppsController/ACTION$getNavItems aura://CanvasController/ACTION$getCanvasData aura://CommerceCatalogController/ACTION$getProduct aura://CommerceCatalogController/ACTION$getProductCategoryPath aura://CommerceImporterController/ACTION$importProducts aura://CommerceSearchController/ACTION$searchProducts aura://CommerceStorePricingController/ACTION$getProductPrice aura://ComponentController/ACTION$getApplication aura://ComponentController/ACTION$getApplicationDef aura://ComponentController/ACTION$getComponent aura://ComponentController/ACTION$getComponentDef aura://ComponentController/ACTION$getComponents aura://ComponentController/ACTION$getDefinitions aura://ComponentController/ACTION$getEventDef aura://ComponentController/ACTION$loadLabels aura://ComponentController/ACTION$reportDeprecationUsages aura://ComponentController/ACTION$reportFailedAction aura://ComponentController/ACTION$reportUsages aura://ConversationController/ACTION$getConversationCallStructureAndInsights aura://DynamicComponentController/ACTION$getTemplateDescriptorWithExpansionBundle aura://HostConfigController/ACTION$getConfigData aura://LabelController/ACTION$getLabel aura://LightningExperienceAssistantPlatformController/ACTION$getActiveQuestionnaires aura://LightningExperienceAssistantPlatformController/ACTION$getActiveScenarios aura://LightningExperienceAssistantPlatformController/ACTION$getAssistant aura://LightningExperienceAssistantPlatformController/ACTION$getQuestionnaire aura://LightningExperienceAssistantPlatformController/ACTION$saveAssistant aura://LightningExperienceAssistantPlatformController/ACTION$saveQuestionnaire aura://LinkedInSalesNavigatorController/ACTION$getSalesAccessToken aura://LinkedInSalesNavigatorController/ACTION$getSignupUrl aura://ListUiController/ACTION$getListInfoById aura://ListUiController/ACTION$getListInfoByName aura://ListUiController/ACTION$getListRecordsById aura://ListUiController/ACTION$getListRecordsByName aura://ListUiController/ACTION$getListUiById aura://ListUiController/ACTION$getListUiByName aura://ListUiController/ACTION$getListsByObjectName aura://LookupController/ACTION$getLookupRecords aura://ManagedContentController/ACTION$getManagedContentByTopicsAndContentKeys aura://ManagedContentController/ACTION$getPublishedManagedContentListByContentKey aura://MruListUiController/ACTION$getMruListInfo aura://MruListUiController/ACTION$getMruListRecords aura://MruListUiController/ACTION$getMruListUi aura://NavEventManagerController/ACTION$getClassicNonSetupPageReferenceMappings aura://NavEventManagerController/ACTION$getClassicSetupPageReferenceMappings aura://NavEventManagerController/ACTION$getResolvedIntegrationUrl aura://NavigationMenuController/ACTION$getCommunityNavigationMenu aura://OrchestrationController/ACTION$getOrchestrationInstance aura://OrchestrationController/ACTION$getOrchestrationInstanceCollection aura://OrchestrationController/ACTION$publishOrchestrationEvent aura://RecordMruController/ACTION$updateMru aura://RecordUiController/ACTION$createRecord aura://RecordUiController/ACTION$deleteRecord aura://RecordUiController/ACTION$executeAggregateUi aura://RecordUiController/ACTION$executeGraphQL aura://RecordUiController/ACTION$findDuplicates aura://RecordUiController/ACTION$getAggregateUi aura://RecordUiController/ACTION$getDedupeConfig aura://RecordUiController/ACTION$getDuplicateConfig aura://RecordUiController/ACTION$getFormByName aura://RecordUiController/ACTION$getLayout aura://RecordUiController/ACTION$getLayoutUserState aura://RecordUiController/ACTION$getObjectInfo aura://RecordUiController/ACTION$getObjectInfos aura://RecordUiController/ACTION$getPicklistValues aura://RecordUiController/ACTION$getPicklistValuesByRecordType aura://RecordUiController/ACTION$getRecordAvatars aura://RecordUiController/ACTION$getRecordCloneDefaults aura://RecordUiController/ACTION$getRecordCreateDefaults aura://RecordUiController/ACTION$getRecordDefaultsTemplateClone aura://RecordUiController/ACTION$getRecordDefaultsTemplateForCreate aura://RecordUiController/ACTION$getRecordUis aura://RecordUiController/ACTION$getRecordWithFields aura://RecordUiController/ACTION$getRecordWithLayouts aura://RecordUiController/ACTION$getRecordsWithFields aura://RecordUiController/ACTION$getRecordsWithLayouts aura://RecordUiController/ACTION$getValidationRulesInfo aura://RecordUiController/ACTION$postRecordAvatarAssociation aura://RecordUiController/ACTION$updateLayoutUserState aura://RecordUiController/ACTION$updateRecord aura://RelatedListUiController/ACTION$getRelatedListInfo aura://RelatedListUiController/ACTION$getRelatedListInfoBatch aura://RelatedListUiController/ACTION$getRelatedListInfoByApiName aura://RelatedListUiController/ACTION$getRelatedListInfoCollection aura://RelatedListUiController/ACTION$getRelatedListRecordCount aura://RelatedListUiController/ACTION$getRelatedListRecords aura://RelatedListUiController/ACTION$getRelatedListRecordsBatch aura://RelatedListUiController/ACTION$getRelatedListsRecordCount aura://RelatedListUiController/ACTION$updateRelatedListInfoByApiName aura://SearchGridLWCController/ACTION$updateUserColumnWidthPref aura://SeoPropertiesController/ACTION$getRecordSeoProperties aura://SitesController/ACTION$searchSite aura://StyleController/ACTION$applyTokens aura://WaveController/ACTION$deleteDataset aura://WaveController/ACTION$deleteRecipe aura://WaveController/ACTION$executeQueryByInputRep aura://WaveController/ACTION$getAnalyticsLimits aura://WaveController/ACTION$getDataflowJob aura://WaveController/ACTION$getDataflowJobNode aura://WaveController/ACTION$getDataflowJobNodes aura://WaveController/ACTION$getDataflowJobs aura://WaveController/ACTION$getDataflowJobsByDataflowId aura://WaveController/ACTION$getDataset aura://WaveController/ACTION$getDatasets aura://WaveController/ACTION$getRecipe aura://WaveController/ACTION$getRecipes aura://WaveController/ACTION$getReplicatedDatasets aura://WaveController/ACTION$getSchedule aura://WaveController/ACTION$getWaveFolders aura://WaveController/ACTION$getXmd aura://WaveController/ACTION$startDataflow aura://WaveController/ACTION$updateDataflowJob aura://WaveController/ACTION$updateSchedule serviceComponent://ui.chatter.components.aura.components.forceChatter.groups.actions.EditGroupNotificationSettingsController/ACTION$getNotificationSettings serviceComponent://ui.chatter.components.aura.components.forceChatter.groups.actions.EditGroupNotificationSettingsController/ACTION$setNotificationSettings serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$addParticipants serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$createMessage serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getMessagesDetail serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getMessagesListData serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getMessagingPermAndPref serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getMoreReplies serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getRichTextConfig serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$getUserDetails serviceComponent://ui.chatter.components.messages.MessagesController/ACTION$removeParticipants serviceComponent://ui.comm.runtime.components.aura.components.siteforce.controller.PubliclyCacheableAttributeLoaderController/ACTION$getComponentAttributes serviceComponent://ui.comm.runtime.components.aura.components.siteforce.controller.PubliclyCacheableComponentLoaderController/ACTION$getAudienceTargetedPageComponent serviceComponent://ui.comm.runtime.components.aura.components.siteforce.controller.PubliclyCacheableComponentLoaderController/ACTION$getPageComponent serviceComponent://ui.comm.runtime.components.aura.components.siteforce.network.tracking.NetworkTrackingController/ACTION$createLogRecord serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$getBootstrapCacheExpiration serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$getTopicDescription serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$isValidSObjectId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$setCurrentApp serviceComponent://ui.comm.runtime.components.aura.components.siteforce.qb.QuarterbackController/ACTION$validateRoute serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getActionOverrides serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getArticleUrlNameAndVersionId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getArticleVersionId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getCMSContentTypeAndURLName serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getCMSContentTypeUrlnameAndId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getCategoryPath serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getNameFieldValue serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$getPersonAccountIdFromContactId serviceComponent://ui.comm.runtime.components.aura.components.siteforce.recordservicecomponent.RecordServiceComponentController/ACTION$isAllowViewEditConvertedLeadsOn serviceComponent://ui.comm.runtime.components.aura.components.siteforce.service.ServiceBodyController/ACTION$getTopicImageUrlFromContextId serviceComponent://ui.communities.components.aura.components.forceCommunity.baseSearch.BaseSearchController/ACTION$getCrossObjectDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.DeflectionDataProviderController/ACTION$getArticleDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.DeflectionDataProviderController/ACTION$getCombinedDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.DeflectionDataProviderController/ACTION$getCrossObjectDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.DeflectionDataProviderController/ACTION$getQuestionDeflection serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.LWCRecordDetailController/ACTION$getInitData serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.OmniBoxController/ACTION$getTopic serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.OmniBoxController/ACTION$getTopicFromEntityId serviceComponent://ui.communities.components.aura.components.forceCommunity.controller.OmniBoxController/ACTION$getTopicFromUrl serviceComponent://ui.communities.components.aura.components.forceCommunity.navigationMenu.NavigationMenuDataProviderController/ACTION$getNavigationMenu serviceComponent://ui.communities.components.aura.components.forceCommunity.signalCollector.SignalCollectorController/ACTION$sendSignals serviceComponent://ui.force.components.controllers.action.ActionController/ACTION$getServerSideComponent serviceComponent://ui.force.components.controllers.dedupe.DedupeManagerController/ACTION$findMatches serviceComponent://ui.force.components.controllers.dedupe.DedupeManagerController/ACTION$getConfig serviceComponent://ui.force.components.controllers.dedupe.DedupeManagerController/ACTION$loadObjectApiInfo serviceComponent://ui.force.components.controllers.dedupe.DedupeManagerController/ACTION$loadRecords serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$cloneRecordWithRelatedEntities serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getDetailComponent serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getEntityConfig serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getNextRecordLayout serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getPostSaveNavigationEvent serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getRecord serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$saveSectionState serviceComponent://ui.force.components.controllers.dynamicLabel.UiDynamicLabelProviderController/ACTION$getLabel serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData serviceComponent://ui.force.components.controllers.inlineEdit.InlineEditController/ACTION$getNameField serviceComponent://ui.force.components.controllers.inlineEdit.InlineEditController/ACTION$getPostSaveNavigationEvent serviceComponent://ui.force.components.controllers.logoutHandler.LogoutHandlerController/ACTION$getLogoutURL serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$createQuickActionRecords serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$createRecord serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$deleteRecord serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$getRecord serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$saveQuickActionRecords serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$saveRecord serviceComponent://ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$saveRecords serviceComponent://ui.force.components.controllers.recordLayoutBroker.RecordLayoutBrokerController/ACTION$getLayout serviceComponent://ui.force.components.controllers.recordLayoutBroker.RecordLayoutBrokerController/ACTION$getRecordAndLayout serviceComponent://ui.force.impl.aura.components.force.recordEditActions.RecordEditActionsController/ACTION$getEditActions serviceComponent://ui.global.components.one.actionsManager.ActionsManagerController/ACTION$handleAction serviceComponent://ui.identity.components.sessiontimeoutwarn.SessionTimeoutWarnController/ACTION$getSessionRefreshAction serviceComponent://ui.identity.components.sessiontimeoutwarn.SessionTimeoutWarnController/ACTION$getSessionTimeoutConfig serviceComponent://ui.instrumentation.components.beacon.InstrumentationBeaconController/ACTION$getLocators serviceComponent://ui.instrumentation.components.beacon.InstrumentationBeaconController/ACTION$sendData serviceComponent://ui.search.components.forcesearch.sgdp.MRUCacheController/ACTION$getGlobalMrus serviceComponent://ui.search.components.forcesearch.sgdp.PermsAndPrefsCacheController/ACTION$getPermsAndPrefs serviceComponent://ui.search.components.forcesearch.sgdp.ResultsFiltersCacheController/ACTION$getResultsFilterMetadata serviceComponent://ui.search.components.forcesearch.sgdp.ScopesCacheController/ACTION$getEntityLabels serviceComponent://ui.search.components.forcesearch.sgdp.ScopesCacheController/ACTION$getEntityNames serviceComponent://ui.search.components.forcesearch.sgdp.ScopesCacheController/ACTION$getScopeMaps serviceComponent://ui.self.service.components.profileMenu.ProfileMenuController/ACTION$getContextUserPhotoUrlAndUpdatedName serviceComponent://ui.self.service.components.profileMenu.ProfileMenuController/ACTION$getProfileMenuResponse serviceComponent://ui.sfa.components.nativeimport.ImportButtonController/ACTION$getConfig