سوء استفاده از جوامع Salesforce پیکربندی نشده برای Recon و سرقت داده ها

خلاصه اجرایی

پیکربندی نادرست انجمن Salesforce ممکن است منجر به این شود که داده های حساس Salesforce در اینترنت در معرض دید همگان قرار گیرد. کاربران ناشناس می توانند اشیاء حاوی اطلاعات حساس مانند لیست مشتریان ، موارد پشتیبانی و آدرس ایمیل کارکنان را مورد پرسش قرار دهند. اولین و نه آخرین باری که پیکربندی SaaS یک حادثه امنیتی بالقوه ایجاد می کند و نیاز به تیم های امنیتی را برای ارزیابی دائمی در معرض SaaS خود نشان می دهد.

این راهنما توضیح می دهد که چگونه مهاجم می تواند از پیکربندی اشتباه سوء استفاده کند و به مدیران Salesforce مراحل مفصل می دهد تا:

  1. اطمینان حاصل کنید که مجوزهای نمایه مهمان شما مواردی را که نمی خواهید در معرض دید قرار نگیرند (سوابق حساب ، تقویم کارکنان و غیره)
  2. دسترسی API را برای نمایه مهمان خود غیرفعال کنید [19659007] تعیین مالک پیش فرض برای سوابق ایجاد شده توسط کاربران مهمان
  3. فعال کردن دسترسی کاربر مهمان امن

ضربه

حداقل ، یک بازیگر مخرب می تواند سوء استفاده کند این پیکربندی نادرست برای انجام مجدد یک کمپین فیشینگ نیزه است. در بدترین حالت ، آنها می توانند اطلاعات حساس در مورد تجارت ، عملیات ، مشتریان و شرکای آن را بدزدند.

انجمن های 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

     اجازه دهید در Google این کار را انجام دهم شما

    با استفاده از عملگرهایی مانند " inurl: " به همراه نام هدف به عنوان مثال ، اغلب می توانید سایت انجمن مورد نظر را پیدا کنید:

     جستجوی Google با inurl parameter

    گام بعدی بازیابی اطلاعات مربوط به سایت است. مهاجم می تواند این کار را با فراخوانی روش زیر انجام دهد: ، حوزه های مجاز سیاست امنیت محتوا (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