И Salesforce, и ServiceNow поставляются с постоянными гостевыми учетными записями для неаутентифицированных посетителей. Эти гостевые учетки нельзя удалить. Их разрешения — какие записи и объекты они могут читать — настраиваются каждой организацией. Если гостевой профиль имеет доступ на чтение к какой-либо записи, любой человек в интернете может получить ее через абсолютно легитимные API-эндпоинты.
В Salesforce (фреймворк Aura):
/aura или /s/sfsites/aura.HostConfigController.getConfigData, чтобы определить, какие объекты (Account, Contact, Case, Lead, User, ContentDocument и т.д.) доступны гостю. SelectableListDataProviderController.getItems для постраничного перебора всех записей каждого доступного объекта. В Salesforce (фреймворк LWR — Lightning Web Runtime):
POST /webruntime/api/services/data/{version}/graphql?asGuest=trueEntityDefinition, затем считывая записи с курсорной пагинацией. В ServiceNow:
/api/now/sp/search — родной поисковый API Service Portal, который практически не документирован и почти не упоминается в открытых источниках или инструментах. Проверка самостоятельной регистрации (Salesforce):
158.220.87.79, размещен на VPS от Contabo (немецкий хостинг-провайдер), резолвится в домен city-forum.com (домен зарегистрирован в 2002 году, затем заброшен и переиспользован). Go-http-client от Go, что позволяет легко идентифицировать его в логах. Для ServiceNow: Журналы транзакций платформы (syslog_transaction) не записывают тело POST-запроса к /api/now/sp/search. Специалисты по безопасности могут видеть, что выполнялись автоматизированные поиски и какой объем данных был возвращен (по столбцу длины вывода), но не могут определить точные поисковые запросы или какие конкретно записи были извлечены.
Для Salesforce: Трафик перебора гостевых данных состоит из легитимных, соответствующих протоколу API-вызовов, которые выглядят как обычный трафик сайта. Хотя Event Monitoring может показать объем событий AuraRequest и Sites от гостевых пользователей, логи свидетельствуют о том, что данные запрашивались, но не конкретное содержимое того, что было возвращено в ответах GraphQL или Aura.
Иными словами, вы можете видеть, что атакующий был там и какой объем данных он выкачал, но не сможете восстановить, какие именно записи или поля были извлечены.
sp_portal, m2m_sp_portal_search_source и sp_search_source. Отсоедините все источники поиска, не нужные публичному порталу.is_scripted_source, data_fetch_script и то, используется ли GlideRecordSecure (с контролем ACL) или обычный GlideRecord (без контроля).kb_uc_can_read_mtom вместо слепого редактирования правил общего доступа.getItems и getConfigData от USER_TYPE = 'Guest'/webruntime/.../vNN.0/graphql, а также обращения к /SiteRegister и /CommunitiesSelfReg.syslog_transaction: Ищите запросы к /api/now/sp/search, выполненные от имени гостя. Сортируйте по длине вывода — строки, возвращающие значительно больше, чем небольшой базовый уровень пустого результата, указывают на поиски, которые вернули содержимое.