سوء استفاده از جوامع Salesforce پیکربندی نشده برای Recon و سرقت داده ها
خلاصه اجرایی
پیکربندی نادرست انجمن Salesforce ممکن است منجر به این شود که داده های حساس Salesforce در اینترنت در معرض دید همگان قرار گیرد. کاربران ناشناس می توانند اشیاء حاوی اطلاعات حساس مانند لیست مشتریان ، موارد پشتیبانی و آدرس ایمیل کارکنان را مورد پرسش قرار دهند. اولین و نه آخرین باری که پیکربندی SaaS یک حادثه امنیتی بالقوه ایجاد می کند و نیاز به تیم های امنیتی را برای ارزیابی دائمی در معرض SaaS خود نشان می دهد.
این راهنما توضیح می دهد که چگونه مهاجم می تواند از پیکربندی اشتباه سوء استفاده کند و به مدیران Salesforce مراحل مفصل می دهد تا:
- اطمینان حاصل کنید که مجوزهای نمایه مهمان شما مواردی را که نمی خواهید در معرض دید قرار نگیرند (سوابق حساب ، تقویم کارکنان و غیره)
- دسترسی API را برای نمایه مهمان خود غیرفعال کنید [19659007] تعیین مالک پیش فرض برای سوابق ایجاد شده توسط کاربران مهمان
- فعال کردن دسترسی کاربر مهمان امن
ضربه
حداقل ، یک بازیگر مخرب می تواند سوء استفاده کند این پیکربندی نادرست برای انجام مجدد یک کمپین فیشینگ نیزه است. در بدترین حالت ، آنها می توانند اطلاعات حساس در مورد تجارت ، عملیات ، مشتریان و شرکای آن را بدزدند.
انجمن های Salesforce چیست؟
یک سایت Salesforce Community به مشتریان و شرکای شما امکان می دهد از خارج از سازمان شما با نمونه Salesforce شما ارتباط برقرار کنند – آنها می توانند بلیط های پشتیبانی را باز کنند ، س questionsالات خود را مطرح کنند ، اشتراک های خود را مدیریت کنند و بسیار بیشتر.
انجمن ها در معرض دید عموم قرار دارند و به طور پیش فرض توسط Google فهرست بندی می شوند. در حالی که این مورد برای مشتریان و شرکا مفید است ، مهاجمان را که آسیب پذیری یا پیکربندی نادرستی را کشف کرده اند ، اسکن و سوء استفاده از جوامع را در مقیاس وسیع آسان می کند.
همانطور که مشاهده خواهید کرد ، Salesforce بسیار قابل تنظیم است و مدیریت آن دشوار است. هیچ دو مورد Salesforce یکسان نیست ، با صدها برنامه شخص ثالث ، اشیاء سفارشی و تنظیمات.
سابقه فنی
انجمن های Salesforce بر اساس چارچوب Salesforce Lightning اجرا می شوند. Lightning یک چارچوب توسعه سریع برای سایت های تلفن همراه و دسکتاپ است.
Salesforce Lightning یک چارچوب کامپوننت محور است. آن اجزا ، که به نام اجزای هاله نامیده می شوند ، اشیاء مستقل هستند که توسعه دهنده می تواند آنها را برای ایجاد صفحات وب سفارشی مونتاژ کند. به اجزا دارای کنترل کننده هایی هستند که روش های متفاوتی را برای انجام وظایف خاص صادر می کنند.
مرور یک سایت اجتماعی با یک سرویس پروکسی ، مانند مجموعه Burp ، Lightning را در عمل به ما نشان می دهد. رابط کاربری وب جلویی یک انجمن از نقطه پایانی HTTP /s/sfsites/aura استفاده می کند.
مرورگر از نقطه پایانی هاله برای بازیابی اطلاعات مربوط به سایت و انجام اقدامات سمت سرور به عنوان کاربر استفاده می کند. با سایت انجمن ارتباط برقرار می کند. به طور طبیعی ، مجوزهای کاربر در مورد این اقدامات صدق می کند. 19659025] pageURI – مسیر ورود به سایت ، بدون میزبان. به عنوان مثال: “/s/11./10/19.9659007 ]/1019996] گفتار – رمز کاربر فعلی. مقدار "تعریف نشده" نشان دهنده یک کاربر مهمان است.
ساختار پیام یک JSON رمزگذاری شده با URL است. در اینجا یک مثال وجود دارد:
{
"اقدامات": [
{
"id": "222;a",
"descriptor": "serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData ",
"callingDescriptor": "UNKNOWN",
"params": {}
}
]
}
- id – یک رشته تصادفی است که می تواند هنگام ارسال بیش از یک اقدام در یک درخواست واحد استفاده شود. به این ترتیب مرورگر می تواند اقدامات و پاسخ ها را مطابقت دهد. 19659007] params – برای ارائه پارامترهای روش
روشهای مختلفی وجود دارد که کاربر احراز هویت نشده می تواند برای انجام اقدامات انجام دهد ، مانند:
- اطلاعات در مورد سایت
- اطلاعات مربوط به اشتراک Salesforce
- مشاهده اشیاء پیش فرض و سفارشی و فیلدهای آنها
- بازیابی داده ها و سوابق
برخی از اشیاء که می توانید پرس و جو کنید عبارتند از حساب ، کاربر ، مورد ، کارمند ، پیوست ، تماس ، و Lead.
چگونه مهاجمان می توانند از اجتماعات با پیکربندی نادرست سوء استفاده کنند؟
در سایتهای با پیکربندی نادرست ، مهاجم می تواند با جستجوی اطلاعات در مورد سازمان ، مانند کاربران ، اشیاء و زمینه هایی که نام و آدرس ایمیل را افشا می کند ، مجدداً عمل کند. موارد زیادی ، آنها می توانند به سیستم نفوذ کرده یا اطلاعات را سرقت کنند.
ابتدا ، مهاجم باید یک سایت اجتماعی برای سوء استفاده پیدا کند. برخی از جادوهای گوگل این کار را انجام می دهند. URL های متداول "اثر انگشت" وجود دارد که نشان می دهد یک وب سایت توسط انجمن های Salesforce طراحی شده است:
- /s/topic
- /s/article
- /s/contactupport
با استفاده از عملگرهایی مانند " inurl: " به همراه نام هدف به عنوان مثال ، اغلب می توانید سایت انجمن مورد نظر را پیدا کنید:
گام بعدی بازیابی اطلاعات مربوط به سایت است. مهاجم می تواند این کار را با فراخوانی روش زیر انجام دهد: ، حوزه های مجاز سیاست امنیت محتوا (CSP) ، و اشیاء موجود.
مهاجم می تواند روش های مختلفی را برای انجام اقدامات مختلف فراخوانی کند ، مانند:
- Listing objects Salesforce
- Listing records
- Search for records [19659007] بازیابی یک شی
- واکشی اطلاعات مربوط به نمونه salesforce
واکشی داده های حساس
مهاجمان می توانند مستقیماً به داده های حساس دسترسی داشته باشند. تیم امنیتی ما مجموعه ای از پرونده های حساس در معرض تحقیقات ما را پیدا کرده است.
مهاجم می تواند اشیاء خاصی را هدف قرار داده و آنها را با فراخوانی روش: یک شیء این روش از انواع اشیاء از جمله موارد سفارشی پشتیبانی می کند.
اطلاعات شامل زمینه های مختلف ، نحوه پیکربندی آنها و روابط فرزند شیء است.
گام بعدی فهرست کردن سوابق با استفاده از روش زیر است: [19659051] serviceComponent: //ui.force.components.controllers.lists.selectableListDataProvider.SelectableListDataProviderController/ACTION$getItems.
در اینجا نمونه ای از فهرست سوابق حساب با استفاده از این روش آمده است:
19659003] 19659003] 19659003] سپس اطلاعات بیشتری را با استفاده از روشهای زیر دریافت کنید: ] برای به دست آوردن سوابق جالب با زمینه های بیشتر و اشیاء مرتبط.
شکار اجزای آسیب پذیر شخص ثالث
یک دشمن پیشرفته ممکن است سعی کند به سفارشی آسیب پذیر و اجزای شخص ثالث حمله کند. ts.
در برخی موارد ، می توان کل نمونه Salesforce را فقط با سوء استفاده از کلاس سفارشی آسیب پذیر Apex که در معرض دید کاربران مهمان قرار دارد ، تحت کنترل خود درآورد.
هنگام مرور سایت ، می بینیم که مرورگر چندین بار را بارگیری می کند فایل های جاوا اسکریپت مختلف با URL های عجیب و غریب ، که با /l/ و سپس یک شی JSON رمزگذاری شده شروع می شود.
در این فایل های جاوا اسکریپت ، می توانیم تعاریف مربوط به در دسترس ترین نقاط پایانی را بیابیم. ، از جمله برنامه های سفارشی و/یا برنامه های شخص ثالث. تعاریف در JSON کدگذاری شده است:
{
"descriptor": "مرکب: //my_app.Component" ،
"ac": [
{
"n": "doAction",
"descriptor": "apex://my_app.ComponentController/ACTION$doAction",
"at": "SERVER",
"rt": "apex://String",
"pa": [] ،
"st": درست است
}
] ،
"pa": [
{
"name": "paramName",
"type": "apex://String"
}
]
}
با اسکن پاسخ برای رشته های مشابه JSON ، می توانید با روش های سفارشی و نحوه فراخوانی آنها آشنا شوید.
در این مورد چه کاری می توانید انجام دهید؟
مدیریت یک سایت اجتماعی کار سختی است. مهم است که اطمینان حاصل شود که کاربران مهمان ناشناس و کاربران جامعه فقط می توانند به سوابق مورد نظر و مورد نیاز دسترسی داشته باشند. اطلاعاتی وجود دارد که ممکن است بخواهید با جهان و دیگران به اشتراک بگذارید که نمی خواهید.
برای ایمن سازی محیط Salesforce خود ، بسیار مهم است که به اصل حداقل امتیاز پایبند باشید و اطمینان حاصل کنید که پروفایل مهمان تنها حداقل را مجاز می داند. مجوزهای مورد نیاز.
مرحله 1 – مجوزهای نمایه مهمان خود را بررسی کنید
به Site Builder خود بروید (در تنظیمات "همه سایتها" را جستجو کنید) و روی Settings یا کلیک کنید. نماد چرخ دنده در سمت چپ.
مشخصات کاربر مهمان خود را در بخش عمومی پیدا خواهید کرد. روی آن کلیک کنید تا مجوزهای کاربر مهمان را تغییر دهید. در اینجاست که باید در مورد دسترسی که مخصوص نیازهای کسب و کار شماست تصمیم گیری کنید.
مرحله 2 – غیرفعال کردن دسترسی به API
مهم این است که اطمینان حاصل کنید که API فعال شده چک نشده است . توصیه می شود فعالیتهای دسترسی را نیز غیرفعال کنید.
نظارت مداوم بر مجوزهای کاربران مهمان و کاربران و اشتراک گذاری نقشها و مراقبت از سوابق آنها (و برای اطمینان از اینکه اطلاعات حساس در دسترس عموم قرار نمی گیرد.
مرحله 3 – تعیین مالک پیش فرض برای سوابق ایجاد شده توسط کاربران مهمان
یا مستقیماً به فضاهای کاری سایت خود بروید ، یا از سازنده سایت برای پیمایش به فضای کاری مدیریت:
در اولویت ها ، مطمئن شوید که یک مالک پیش فرض برای سوابق ایجاد شده توسط کاربران مهمان تنظیم کرده اید و در بیشتر موارد ، می خواهید را خاموش کنید تا کاربران مهمان ببینند اعضای این سایت .
مرحله 4 – فعال کردن دسترسی ایمن به ضبط کاربر مهمان
بررسی کنید که تنظیمات دسترسی پیش فرض برای کاربران مهمان ایمن است: به تنظیمات بروید و عبارت را جستجو کنید ] تنظیمات اشتراک گذاری . در آنجا به دنبال گزینه ایمن سازی دسترسی کاربر به ضبط مهمان باشید و بررسی کنید که بررسی شده است.
Salesforce در تلاش است تا به شما در تصمیم گیری هوشمندانه در مورد دسترسی مهمان کمک کند. از زمان انتشار تابستان 20 ، Salesforce غیرفعال کردن این تنظیم را غیرممکن کرده است. آنها همچنین شما را از اعطای مجوزهای View All Users به کاربران مهمان منع کرده اند و شما نمی توانید به آنها دسترسی به مشاهده تمام داده ها را بدهید.
هنوز هم از اهمیت بالایی برخوردار است ، با این حال ، برای بررسی تنظیمات پیکربندی. Salesforce نمی تواند همه آنها را برای شما غیرفعال کند ، زیرا کاربران مختلف نیازهای متفاوتی دارند. اکثر سازمان ها ده ها برنامه SaaS تحریم شده را مستقر می کنند که هریک دارای اشیاء خاص خود ، مدلهای مجوز ، API ها و ویژگی های اشتراک گذاری است.
به همین دلیل است که ما DatAdvantage Cloud را ایجاد کردیم تا راهی واحد برای یافتن نوردهی ، امتیازات مناسب اندازه و در مورد همه برنامه های مجاز SaaS خود تحقیق کنید.
ضمیمه: توصیف کننده های هاله و نحوه استفاده از آنها
سرویس ، شامل لیستی از اشیا که اغلب شامل اشیاء سفارشی و دامنه ورود Salesforce است.serviceComponent: //ui.global.components.one.one.controller.OneController/AC TION $ getCurrentAppاطلاعات بیشتری در مورد برنامه از جمله فهرست گسترده اشیاء
هاله: // RecordUiController/ACTION $ getObjectInfo
- ObjectApiName (رشته) - نام شی
تابع تعریف شیء: زمینه های آن ، روابط و پیکربندی را برمی گرداند.
serviceComponent: //ui.force.components.controllers.lists.selectableListDataProvider.SelectableListDataProviderController/ACTION$getItems
- ] - نام شیئی که باید لیست شود. به عنوان مثال: "حساب" یا "کاربر"
- صفحه اندازه (Int) - تعداد سوابق برای بازیابی. تا 1000
- currentPage (int) - اگر تعداد پرونده های اندازه صفحه بیشتر است ، از این صفحه برای دریافت صفحات بعدی استفاده کنید.
- getCount (بولی) - چه در کل تعداد پرونده ها باید بازیابی شوند.
- layoutType (String) - طرح. "FULL" را برای دریافت اطلاعات بیشتر ارائه دهید
- enableRowActions (بولی) - درست
- useTimeout (بولی) - غلط
فهرست سوابق اشیاء مشخص شده. [19659051] serviceComponent: //ui.force.components.controllers.recordGlobalValueProvider.RecordGvpController/ACTION$getRecord
- recordDescriptor (string) – رکورد "توصیف کننده" – از قالب زیر استفاده کنید:
.null.null.null.Id.VIEW.false.null. {field} .null
- Id -شناسه رکورد برای بازیابی ، فیلدها-فیلدهای جدا شده با کاما برای بازگشت. همه نقاط "" را جایگزین کنید. با "؛ 2" به عنوان مثال:
00500000000XxXXWXX.undefined.null.null.null.Id.VIEW.false.null.Name، CreateBy؛ 2Name.null
سایر نقاط پایانی بدون سند
-
هاله: // ActionsController/ACTION aura: // ActionsController/ACTION $ getGlobalActions هاله: // ActionsController/ACTION $ getListViewActions aura: // ActionsController/ACTION $ getLookupActions aura: // ActionsController/ACTION $ getMRUListActions aura: // ActionsController/ACTION $ getObjectCreateActions aura: // ActionsController/ACTION $ getQuickActionDefault aura: // ActionsController/ACTION $ getRecordActions aura: // ActionsController/ACTION $ getRecordEditActions aura: // ActionsController/ACTION $ getRelatedListActions هاله: // ActionsController/ACTION $ getRelatedListRecordActions aura: // ActionsController/ACTION $ getRelatedListsActions aura: // ApexActionController/ACTION $ اجرا شود هاله: // AppsController/ACTION $ getNavItems هاله: // CanvasController/ACTION $ getCanvasData aura: // CommerceCatalogController/ACTION $ getProduct aura: // CommerceCatalogController/ACTION $ getProductCategoryPath هاله: // CommerceImporterController/ACTION $ importProducts هاله: // CommerceSearchController/ACTION $ searchProducts هاله: // CommerceStorePricingController/ACTION $ getProductPrice aura: // ComponentController/ACTION $ getApplication هاله: // ComponentController/ACTION $ getApplicationDef aura: // ComponentController/ACTION $ getComponent هاله: // ComponentController/ACTION $ getComponentDef aura: // ComponentController/ACTION $ getComponents aura: // ComponentController/ACTION $ getDefinitions هاله: // ComponentController/ACTION $ getEventDef هاله: // ComponentController/ACTION $ loadLabels aura: // ComponentController/ACTION $ reportDeprecationUsages هاله: // ComponentController/ACTION $ reportFailedAction aura: // ComponentController/ACTION $ reportUsages هاله: // ConversationController/ACTION $ getConversationCallStructureAndInsights هاله: // DynamicComponentController/ACTION $ getTemplateDescriptorWithExpansionBundle هاله: // HostConfigController/ACTION $ getConfigData هاله: // LabelController/ACTION $ getLabel هاله: // LightningExperienceAssistantPlatformController/ACTION $ getActiveQuestionnaires هاله: // LightningExperienceAssistantPlatformController/ACTION $ getActiveScenarios هاله: // LightningExperienceAssistantPlatformController/ACTION $ getAssistant هاله: // LightningExperienceAssistantPlatformController/ACTION $ getQuestionnaire هاله: // LightningExperienceAssistantPlatformController/ACTION $ saveAssistant هاله: // LightningExperienceAssistantPlatformController/ACTION $ saveQuestionnaire هاله: // LinkedInSalesNavigatorController/ACTION $ getSalesAccessToken هاله: // LinkedInSalesNavigatorController/ACTION $ getSignupUrl هاله: // ListUiController/ACTION $ getListInfoById هاله: // ListUiController/ACTION $ getListInfoByName هاله: // ListUiController/ACTION $ getListRecordsById هاله: // ListUiController/ACTION $ getListRecordsByName هاله: // ListUiController/ACTION $ getListUiById هاله: // ListUiController/ACTION $ getListUiByName هاله: // ListUiController/ACTION $ getListsByObjectName aura: // LookupController/ACTION $ getLookupRecords هاله: // ManagedContentController/ACTION $ getManagedContentByTopicsAndContentKeys هاله: // ManagedContentController/ACTION $ getPublishedManagedContentListByContentKey هاله: // MruListUiController/ACTION $ getMruListInfo هاله: // MruListUiController/ACTION $ getMruListRecords هاله: // MruListUiController/ACTION $ getMruListUi هاله: // NavEventManagerController/ACTION $ getClassicNonSetupPageReferenceMappings هاله: // NavEventManagerController/ACTION $ getClassicSetupPageReferenceMappings هاله: // NavEventManagerController/ACTION $ getResolvedIntegrationUrl هاله: // NavigationMenuController/ACTION $ getCommunityNavigationMenu هاله: // OrchestrationController/ACTION $ getOrchestrationInstance هاله: // OrchestrationController/ACTION $ getOrchestrationInstanceCollection هاله: // OrchestrationController/ACTION $ publishedOrchestrationEvent هاله: // RecordMruController/ACTION $ updateMru aura: // RecordUiController/ACTION $ createRecord هاله: // RecordUiController/ACTION $ deleteRecord هاله: // RecordUiController/ACTION $ executeAggregateUi هاله: // RecordUiController/ACTION $ executeGraphQL aura: // RecordUiController/ACTION $ findDuplicates هاله: // RecordUiController/ACTION $ getAggregateUi هاله: // RecordUiController/ACTION $ getDedupeConfig هاله: // RecordUiController/ACTION $ getDuplicateConfig هاله: // RecordUiController/ACTION $ getFormByName هاله: // RecordUiController/ACTION $ getLayout هاله: // RecordUiController/ACTION $ getLayoutUserState هاله: // RecordUiController/ACTION $ getObjectInfo هاله: // RecordUiController/ACTION $ getObjectInfos هاله: // RecordUiController/ACTION $ getPicklistValues هاله: // RecordUiController/ACTION $ getPicklistValuesByRecordType هاله: // RecordUiController/ACTION $ getRecordAvatars هاله: // RecordUiController/ACTION $ getRecordCloneDefault هاله: // RecordUiController/ACTION $ getRecordCreateDefault هاله: // RecordUiController/ACTION $ getRecordDefaultsTemplateClone هاله: // RecordUiController/ACTION $ getRecordDefaultsTemplateForCreate هاله: // RecordUiController/ACTION $ getRecordUis هاله: // RecordUiController/ACTION $ getRecordWithFields هاله: // RecordUiController/ACTION $ getRecordWithLayouts هاله: // RecordUiController/ACTION $ getRecordsWithFields هاله: // RecordUiController/ACTION $ getRecordsWithLayouts هاله: // RecordUiController/ACTION $ getValidationRulesInfo هاله: // RecordUiController/ACTION $ postRecordAvatarAssociation هاله: // RecordUiController/ACTION $ updateLayoutUserState هاله: // RecordUiController/ACTION $ updateRecord هاله: // RelatedListUiController/ACTION $ getRelatedListInfo هاله: // RelatedListUiController/ACTION $ getRelatedListInfoBatch هاله: // RelatedListUiController/ACTION $ getRelatedListInfoByApiName هاله: // RelatedListUiController/ACTION $ getRelatedListInfoCollection هاله: // RelatedListUiController/ACTION $ getRelatedListRecordCount هاله: // RelatedListUiController/ACTION $ getRelatedListRecords هاله: // RelatedListUiController/ACTION $ getRelatedListRecordsBatch هاله: // RelatedListUiController/ACTION $ getRelatedListsRecordCount هاله: // RelatedListUiController/ACTION $ updateRelatedListInfoByApiName هاله: // SearchGridLWCC کنترلر/ACTION $ updateUserColumnWidthPref هاله: // SeoPropertiesController/ACTION $ getRecordSeoProperties aura: // SitesController/ACTION $ searchSite aura: // StyleController/ACTION $ applyTokens aura: // WaveController/ACTION $ deleteDataset aura: // WaveController/ACTION $ deleteRecipe هاله: // WaveController/ACTION $ executeQueryByInputRep aura: // WaveController/ACTION $ getAnalyticsLimits هاله: // WaveController/ACTION $ getDataflowJob هاله: // WaveController/ACTION $ getDataflowJobNode هاله: // WaveController/ACTION $ getDataflowJobNodes هاله: // WaveController/ACTION $ getDataflowJobs هاله: // WaveController/ACTION $ getDataflowJobsByDataflowId هاله: // WaveController/ACTION $ getDataset aura: // WaveController/ACTION $ getDatasets aura: // WaveController/ACTION $ getRecipe هاله: // WaveController/ACTION $ getRecipes aura: // WaveController/ACTION $ getReplicatedDatasets aura: // WaveController/ACTION $ getSchedule aura: // WaveController/ACTION $ getWaveFolders هاله: // 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$add شرکت کنندگان 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 سرویس کامپوننت: //ui.chatter.components.messages.MessagesController/ACTION$removePartients 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
