Both Salesforce and ServiceNow ship with permanent guest user accounts for unauthenticated visitors. These guest users cannot be deleted. Their permissions — what records and objects they can read — are configured by each organization. If the guest profile has read access to a record, anyone on the internet can retrieve it through entirely legitimate API endpoints.
On Salesforce (Aura framework):
/aura or /s/sfsites/aura endpoint.HostConfigController.getConfigData to enumerate which objects (Account, Contact, Case, Lead, User, ContentDocument, etc.) are accessible to the guest. SelectableListDataProviderController.getItems to page through all records on each accessible object. On Salesforce (LWR framework — Lightning Web Runtime):
POST /webruntime/api/services/data/{version}/graphql?asGuest=trueEntityDefinition, then reading records with cursor-based pagination. On ServiceNow:
/api/now/sp/search endpoint — a native Service Portal search API that is largely undocumented and has almost no online documentation or open-source tools referencing it. Self-registration probing (Salesforce):
158.220.87.79, hosted on a Contabo VPS (German hosting provider), resolving to the domain city-forum.com (a domain registered in 2002, abandoned, then re-purposed). Go-http-client User-Agent string, making it easy to identify in logs. For ServiceNow: The platform's transaction logs (syslog_transaction) do not record the POST body of /api/now/sp/search requests. Defenders can see that automated searches occurred and how much data was returned (via the output length column), but cannot determine the exact search terms or which specific records were retrieved.
For Salesforce: The guest enumeration traffic consists of legitimate, protocol-compliant API calls that look like normal site traffic. While Event Monitoring can show the volume of AuraRequest and Sites events from guest users, the logs show that data was requested but not the specific content of what was returned in the GraphQL or Aura responses.
In other words, you can see the attacker was there and how much they pulled, but you cannot reconstruct exactly which records or fields they extracted.
sp_portal, m2m_sp_portal_search_source, and sp_search_source tables. Detach any search source a public portal doesn't need.is_scripted_source, data_fetch_script, and whether it uses GlideRecordSecure (ACL-enforcing) vs. plain GlideRecord (which is not).kb_uc_can_read_mtom links rather than editing sharing rules blindly.getItems and getConfigData from USER_TYPE = 'Guest'/webruntime/.../vNN.0/graphql version sweeps, and hits on /SiteRegister and /CommunitiesSelfReg.syslog_transaction: Look for /api/now/sp/search requests made as guest. Sort by output length — rows returning significantly more than the small empty-result baseline indicate searches that returned content.