CloudCounsel Limited

Salesforce Security Audit

Acme Corp (sample) · Enterprise Edition · 00Dxx0000000001AAA · 2026-10-21
F
Security grade · health score
77/100
4 CRITICAL19 HIGH15 MEDIUM3 LOW
Prepared by CloudCounsel Limited for Acme Corp (sample)
01 /

Executive Summary

This audit assessed the org’s security configuration and scored it 77/100 (Grade F), a grade set by 7 CRITICAL (4 findings, 3 attack chains) (D allows none), across 53 active findings, with 3 inconclusive (no evidence gathered). The priorities below are the highest-impact items to address first; the remediation roadmap groups every fix by effort. See Scope & Liability for the basis and limits of this assessment.

Evidence coverage 98% (99 of 101 checks). The checks that gathered no evidence are listed as inconclusive in the findings appendix; their areas are unassessed, not clean. Each unassessed check has an inconclusive finding quoting what the org returned. Where the cause is access, `sf audit preflight` lists the permissions the audit user is missing, and PERMISSIONS.md (https://github.com/cclabsnz/sf-audit-plugin/blob/main/PERMISSIONS.md) has the read-only permission set to assign.

02 /

Executive Priorities

Focus areas, highest impact first.

011 guest-executable Apex class(es) run without sharing, directly or through a helper

CRITICAL

Impact: Unauthenticated web users can execute Apex that bypasses sharing: bulk record exfiltration without login.

Part of an attack chain. See Attack Scenarios.

Fix: Add "with sharing" to every guest-reachable Apex class and to every helper it calls, enforce CRUD/FLS, and remove guest execution access from any class that does not strictly need it.

021 user(s) hold admin-equivalent access without the System Administrator profile

CRITICAL

Impact: Shadow admins hold full org control outside the admin profile, so a single takeover bypasses admin-focused monitoring and owns everything.

Part of an attack chain. See Attack Scenarios.

Fix: Review each user's permission sets and profile. Remove "Modify All Data" / the Manage Users + Assign Permission Sets pairing unless the role genuinely requires org administration, and consolidate true admins onto a controlled admin profile.

032 externally exposed Apex class(es) (@AuraEnabled/@RemoteAction/@RestResource) lack "with sharing": IDOR risk

CRITICAL

Impact: without-sharing Apex bypasses record access, letting low-privilege or guest users reach data they can’t otherwise see.

Part of an attack chain. See Attack Scenarios.

Fix: Add "with sharing" to all @AuraEnabled, @RemoteAction and @RestResource classes. Validate user ownership or sharing on every record accessed inside these methods.

042 object(s) fully readable by unauthenticated guests (public external OWD)

CRITICAL

Impact: Grades guest-readable objects by ACTUAL UI-API reachability: objects the UI API models are bulk-readable unauthenticated via GraphQL (CRITICAL, incl. guest-owned records under a Private OWD, enabling mass PII exfiltration without login); objects readable only in the sharing model but not UI-API-modelled (Calendar, AuthSession, etc.) are separated as MEDIUM defense-in-depth, with UserRecordAccess as ground-truth read confirmation.

Part of an attack chain. See Attack Scenarios.

Fix: Set external OWD to Private for these objects, and remove Read from the guest profile/permission sets unless a specific public dataset is intended. Then verify no guest-accessible Apex returns the data.

051 Apex class(es) contain potential hardcoded credentials

HIGH

Impact: Secrets embedded in Apex can be read by anyone with code access and reused to reach connected systems.

Part of an attack chain. See Attack Scenarios.

Fix: Replace hardcoded credentials with Named Credentials. Rotate any exposed credentials immediately.

03 /

Attack Scenarios

How findings combine into real attack paths.

Unauthenticated bulk exfiltration

CRITICAL

An unauthenticated guest foothold combines with guest-reachable code execution or public external sharing to read business data in bulk without any login. In practice this is reached over the site's Aura endpoint (/s/sfsites/aura) with aura.token=null: RecordUiController/ACTION$executeGraphQL returns record data the guest user can see, and aura.ApexAction.execute invokes @AuraEnabled Apex — which, in a class that runs without sharing, skips record-level access control entirely and will accept arbitrary record ids. No credentials are involved at any point, so login-based controls (MFA, IP ranges, SSO) never engage.

STEP 1 · HIGH 1 object(s) have Public R… grants: low-trust-authenticated STEP 2 · MEDIUM 1 active guest user(s) ha… grants: unauth-foothold ✂ CUT-POINT STEP 3 · CRITICAL 2 externally exposed Apex… grants: code-exec ★ Remediating breaks chain STEP 4 · CRITICAL 2 object(s) fully readabl… grants: unauth-foothold STEP 5 · HIGH 2 guest permission grant(… grants: unauth-foothold STEP 6 · CRITICAL 1 guest-executable Apex c… grants: code-exec

Breaks the chain: Remove guest object/sharing access, ensure no guest-invokable Apex runs without sharing, and set external OWD to Private. Grant portal access only via sharing sets. Because the requests never reach a login page, tightening authentication does not mitigate this — the object permissions, sharing model and Apex sharing declarations are the controls that apply.

Standard user to org takeover

CRITICAL

A low-trust authenticated user combines with a privilege-escalation permission (assign permission sets, manage users, author apex, modify metadata) to reach full org control.

STEP 1 · HIGH 1 object(s) have Public R… grants: low-trust-authenticated STEP 2 · HIGH 1 live Experience Cloud s… grants: low-trust-authenticated ✂ CUT-POINT STEP 3 · CRITICAL 2 object(s) fully readabl… grants: unauth-foothold ★ Remediating breaks chain STEP 4 · HIGH 2 guest permission grant(… grants: unauth-foothold STEP 5 · CRITICAL 1 guest-executable Apex c… grants: code-exec STEP 6 · HIGH 1 escalation-permission g… grants: priv-esc STEP 7 · CRITICAL 1 user(s) hold admin-equi… grants: org-takeover STEP 8 · HIGH 4 user(s) hold the super-… grants: org-takeover STEP 9 · MEDIUM 4 user(s) have Author Ape… grants: code-exec STEP 10 · MEDIUM 1 active guest user(s) ha… grants: unauth-foothold

Breaks the chain: Remove escalation permissions from non-admin profiles/permission sets and review who holds them.

Credential theft to external pivot

CRITICAL

Exposed secrets (hardcoded credentials, credentials in custom labels, debug logs, or broad CORS) combine with an external egress path (named credential or remote site) to exfiltrate data to attacker infrastructure.

STEP 1 · INFO 1 active remote site sett… grants: external-egress ✂ CUT-POINT STEP 2 · HIGH 1 Apex class(es) contain … grants: credential-theft ★ Remediating breaks chain

Breaks the chain: Rotate and remove exposed secrets, tighten CORS origins, and review external callout endpoints.

Self-service registration into an over-shared portal

HIGH

A live Experience Cloud site accepts self-registration, and the external sharing model or portal-reachable code gives whoever holds an account more than their own records. Every other chain that starts from "an authenticated external user" assumes the attacker already has an account; this is the one that says anyone may have one, for the cost of an email address. The account is legitimate, so it arrives through the front door with a real session: MFA, login IP ranges and SSO all behave exactly as configured and none of them object, because nothing here is a bypass. What the attacker gets is decided entirely by the external OWD, the portal profile and whether the Apex or Flow reachable from the site enforces sharing. Self-registration alone is a supported feature and not a finding; the sharing model alone assumes an account the attacker may never obtain. The pair is the path.

STEP 1 · HIGH 1 live Experience Cloud s… grants: low-trust-authenticated STEP 2 · HIGH 1 object(s) have Public R… grants: low-trust-authenticated ✂ CUT-POINT STEP 3 · CRITICAL 2 externally exposed Apex… grants: code-exec ★ Remediating breaks chain

Breaks the chain: Decide which half to close, because either breaks the chain. Turning self-registration off, or putting an approval step in front of it, restores the assumption every other control depends on. Leaving it on means treating the self-registration profile as hostile input: set external OWD to Private and grant through sharing sets rather than org-wide defaults, and make sure Apex and Flows reachable from the site run with sharing. Check what the self-registration handler assigns as the default profile and licence — the exposure is whatever that profile can reach, and it is rarely reviewed after the site goes live.

Org files served to anonymous callers, with no record of what left

HIGH

Files hosted by the org are fetchable without authentication — public Documents or static resources, content distribution links that never expire or ask for a password, or a site that grants guests file access — and nothing in the org would establish what those files contained or who collected them. Files are the blind spot in a sharing model. Org-wide defaults, sharing rules and field-level security all govern records, and none of them apply to a static resource served from a URL. Static resources in particular tend to accumulate the things front-end code needs and nobody re-reads: configuration, endpoint lists, and occasionally an API key that was only ever meant to reach the browser. This chain deliberately claims less than the guest chains do. It does not assert a pivot into org data, because there is none — anonymous file access returns the file and stops. What it asserts is that content left the org outside every record control, and that the absence of classification or monitoring means the question "what was in it" has no answer available after the fact.

✂ CUT-POINT STEP 1 · HIGH 1 site(s) allow guest use… grants: data-read ★ Remediating breaks chain STEP 2 · HIGH 7 of 7 key object(s) have… grants: data-read STEP 3 · MEDIUM Shield Platform Encryptio… grants: data-read STEP 4 · MEDIUM Threat Detection stores a… grants: data-read STEP 5 · HIGH No Event Monitoring log f… grants: data-read STEP 6 · HIGH No SIEM or external monit… grants: data-read

Breaks the chain: Retrieve and read the exposed files before deciding how urgent this is: the exposure is whatever they actually contain, and that is knowable now in a way it will not be later. Then remove external availability from Documents and static resources that do not need it, set expiry and passwords on content distribution links, and turn off guest file access on sites that do not depend on it. Treat any credential found in a static resource as disclosed and rotate it rather than removing the file, since the file has already been served and may be cached anywhere.

Exploitable access with no detection coverage

MEDIUM

The org already presents a real attacker capability — an unauthenticated foothold, a privilege-escalation path, or org takeover — and simultaneously lacks the controls that would notice it being used. Two or more of threat detection, Event Monitoring, a Transaction Security policy and SIEM forwarding are absent. This chain does not add exposure; it means the exposure already present would go unobserved, and an incident could not be reconstructed.

✂ CUT-POINT STEP 1 · HIGH 4 user(s) hold the super-… grants: org-takeover ★ Remediating breaks chain STEP 2 · MEDIUM 4 user(s) have Author Ape… grants: code-exec STEP 3 · MEDIUM 1 active guest user(s) ha… grants: unauth-foothold STEP 4 · HIGH No Transaction Security P… grants: data-read STEP 5 · MEDIUM Threat Detection stores a… grants: data-read STEP 6 · HIGH No Event Monitoring log f… grants: data-read STEP 7 · HIGH No SIEM or external monit… grants: data-read

Breaks the chain: Close the detection gap first: enable Event Monitoring with adequate retention, turn on threat detection event storage, add a Transaction Security policy, and forward events to a SIEM. Then remediate the underlying access findings.

Potential attack path: unauth foothold → credential theft

MEDIUM

The org presents a unauth foothold entry point and findings that grant credential theft. Review whether these can be combined into an exploit path.

STEP 1 · MEDIUM 4 user(s) have Author Ape… grants: code-exec STEP 2 · MEDIUM 1 active guest user(s) ha… grants: unauth-foothold STEP 3 · HIGH 1 Apex class(es) contain … grants: credential-theft ✂ CUT-POINT STEP 4 · CRITICAL 2 externally exposed Apex… grants: code-exec ★ Remediating breaks chain

Breaks the chain: Treat the contributing findings as a single risk: remediating any one of them breaks the path.

Potential attack path: low trust authenticated → credential theft

MEDIUM

The org presents a low trust authenticated entry point and findings that grant credential theft. Review whether these can be combined into an exploit path.

STEP 1 · MEDIUM 4 user(s) have Author Ape… grants: code-exec STEP 2 · HIGH 1 object(s) have Public R… grants: low-trust-authenticated STEP 3 · HIGH 1 Apex class(es) contain … grants: credential-theft ✂ CUT-POINT STEP 4 · CRITICAL 2 externally exposed Apex… grants: code-exec ★ Remediating breaks chain

Breaks the chain: Treat the contributing findings as a single risk: remediating any one of them breaks the path.

04 /

Remediation Roadmap

Quick wins

11 · ≤1 day

Moderate

21 · days

Projects

9 · weeks
05 /

Compliance Coverage

Findings mapped to framework controls. “No findings detected” is not an attestation of compliance. See Scope & Liability.

OWASP Top 10 · OWASP Top 10:2021

ControlRequirement areaStatus
OWASP-A01Broken Access Control25 findings
OWASP-A02Cryptographic Failures3 findings
OWASP-A03Injection1 finding
OWASP-A05Security Misconfiguration12 findings
OWASP-A06Vulnerable and Outdated Components2 findings
OWASP-A07Identification and Authentication Failures5 findings
OWASP-A08Software and Data Integrity Failures3 findings
OWASP-A09Security Logging and Monitoring Failures6 findings
OWASP-A10Server-Side Request Forgery (SSRF)3 findings

OWASP LLM Top 10 · OWASP Top 10 for LLM Applications 2025

ControlRequirement areaStatus
LLM01Prompt InjectionNo findings detected
LLM02Sensitive Information DisclosureNo findings detected
LLM05Improper Output HandlingNo findings detected
LLM06Excessive AgencyNo findings detected

SOC 2 · AICPA TSC 2017 (Common Criteria)

ControlRequirement areaStatus
SOC2-CC6.1Logical access controls27 findings
SOC2-CC6.2Registration and de-provisioning of usersNo findings detected
SOC2-CC6.3Role-based access and least privilege4 findings
SOC2-CC6.6Boundary protection against external threats5 findings
SOC2-CC6.7Restriction of information transmission and movement3 findings
SOC2-CC7.1Detection of configuration changes and vulnerabilities3 findings
SOC2-CC7.2Monitoring for anomalies and security events8 findings
SOC2-CC8.1Change management2 findings
SOC2-CC9.1Risk mitigation for business disruptionsNo findings detected
SOC2-CC9.2Vendor and third-party risk management1 finding

ISO/IEC 27001 · ISO/IEC 27001:2022

ControlRequirement areaStatus
ISO-A.5.12Classification of information2 findings
ISO-A.5.14Information transfer3 findings
ISO-A.5.18Access rights11 findings
ISO-A.8.3Information access restriction17 findings
ISO-A.8.8Management of technical vulnerabilities4 findings
ISO-A.8.15Logging6 findings
ISO-A.8.24Use of cryptography1 finding
ISO-A.8.25Secure development life cycle2 findings
ISO-A.8.26Application security requirements4 findings
ISO-A.8.32Change management3 findings
06 /

All Findings

Salesforce Security Health Check Score: 71/100

MEDIUM

The Salesforce Security Health Check scored 71/100. Scores below 85 indicate security configuration gaps that should be addressed.

Remediation: Review the Security Health Check in Setup → Security Center → Health Check.

Security Health Check: 1 High-Risk Setting(s) Require Attention

HIGH

One or more settings deviate from Salesforce security recommendations at the high-risk level.

Remediation: Address each highlighted setting in Setup → Security Center → Health Check.

Security Health Check: 2 Medium-Risk Setting(s) Need Review

MEDIUM

One or more settings deviate from Salesforce security recommendations at the medium-risk level.

Remediation: Review and address medium-risk settings in Setup → Security Center → Health Check.

4 user(s) hold the super-admin permission combination (ViewAllData + ModifyAllData + ManageUsers)

HIGH

SBS-ACS-004 requires documented justification for any user holding all three of ViewAllData, ModifyAllData, and ManageUsers simultaneously. This combination is equivalent to unrestricted org control.

Remediation: Reduce to the minimum necessary permissions. Document justification for each user in the system of record. Consider breaking this into role-specific permission sets.

5 user(s) have Modify All Data permission

passed

Modify All Data grants unrestricted write access across all objects. This is one of the most powerful permissions in Salesforce. 4 of them also hold the super-admin combination and are rated in that finding; this severity reflects the other 1.

Remediation: Limit Modify All Data to essential system administrators only. Review each user and remove the permission from any non-essential accounts.

5 user(s) have View All Data permission

passed

View All Data grants unrestricted read access across all objects, bypassing sharing rules and record-level security.

Remediation: Limit View All Data to essential users. Consider using permission sets scoped to specific objects instead.

4 user(s) have Author Apex permission

MEDIUM

Author Apex allows users to write and deploy Apex code, which can execute server-side logic with elevated privileges.

Remediation: Author Apex allows code deployment. Limit to developers with a genuine need.

14 custom permission sets in use

LOW

A large number of permission sets increases administrative complexity and makes it harder to audit access effectively.

Remediation: Review and consolidate permission sets. Excessive numbers increase administrative complexity and expand the attack surface.

No custom profiles or permission sets broadly grant API Enabled

passed

API Enabled is not granted by any custom profile or permission set. Standard profiles may still grant it.

Remediation: Continue monitoring as new permission sets and profiles are created.

4 failed login attempt(s) in the last 30 days

passed

There were 4 failed login attempts out of 60 total logins in the last 30 days.

Remediation: Investigate accounts with repeated failures. Consider IP restrictions or additional MFA policies for high-failure accounts.

All connected apps restrict user access appropriately

passed

All 0 connected app(s) are configured to require admin pre-authorization.

Remediation: Continue monitoring as new connected apps are added.

1 object(s) have Public Read OWD for external/portal users

HIGH

An external OWD of Public Read exposes all records to any Experience Cloud portal user. Attackers who create or compromise a portal account can enumerate the entire dataset for reconnaissance and data theft. Even without write access, bulk record exposure violates data minimisation principles and enables targeted attacks.

Remediation: Set external OWD to Private and use sharing sets or sharing rules to grant portal users access only to their own records.

3 object(s) have Public Read/Write OWD for internal users

HIGH

An internal OWD of Public Read/Write means every authenticated user can read and modify all records regardless of record ownership. A compromised internal account, malicious insider, or over-permissioned integration user gains full access to the entire dataset. This undermines record-level access controls and violates least-privilege principles.

Remediation: Set OWD to Private or Public Read Only for sensitive objects. Use sharing rules, role hierarchy, or Apex managed sharing to grant specific access where needed.

All monitored API limits are within acceptable thresholds

passed

All monitored API and resource limits are below 50% utilization.

Remediation: Continue monitoring limits as org activity grows.

1 permission or security configuration change(s) in the last 7 days

LOW

Frequent permission and security changes can indicate privilege escalation activity or risky configuration drift.

Remediation: Review each change in Setup → Audit Trail. Investigate unexpected changes, especially outside change-management windows.

Who can delete Event Monitoring data could not be read: the permission is not in this org

inconclusive

This org has no PermissionSet.PermissionsManageEventLogFiles field, which is usual when Event Monitoring is not licensed. Who can delete event monitoring data is therefore unestablished from permissions, and SBS-MON-002 is unevaluated rather than satisfied.

Remediation: If the org licenses Event Monitoring, review who holds "Manage Event Log Files" or "Delete Event Monitoring Data" in Setup → Permission Sets.

No active users with 90+ days of inactivity

passed

All active standard users have logged in within the past 90 days.

Remediation: Continue to run periodic user access reviews to catch future stale accounts.

Password and session policies appear compliant with security recommendations

passed

No password, session, or MFA-related deviations were detected in the Security Health Check results.

Remediation: Continue monitoring password policies and MFA enforcement as Salesforce releases new security recommendations.

4 admin user(s) have profiles without login IP restrictions

HIGH

Administrator accounts without IP login restrictions can be accessed from any network, increasing exposure to credential-stuffing attacks.

Remediation: Add IP login ranges to all admin profiles in Setup → Profiles → Login IP Ranges, or enable MFA as a compensating control.

1 active guest user(s) have live site access

MEDIUM

Guest users are present in this org. While no write access or overly permissive sharing rules were found, guest access should be periodically reviewed.

Remediation: Regularly review guest user profile permissions and sharing configurations as they represent an unauthenticated attack surface.

1 remote site(s) have protocol security disabled

HIGH

Remote sites with "Disable Protocol Security" enabled allow Apex to make callouts over plain HTTP, exposing data in transit to interception.

Remediation: Enable HTTPS on each endpoint and remove the "Disable Protocol Security" flag. Plaintext HTTP callouts should never be used for any integration.

1 active remote site setting(s) registered (1 insecure, 0 secure)

INFO

Remote Site Settings control which external URLs Apex code can call. Entries should be reviewed periodically to remove unused entries.

Remediation: Audit each remote site setting to confirm it is still actively used. Remove unused entries to reduce the attack surface.

No active CSP Trusted Sites configured

passed

No active CSP Trusted Sites are configured. Salesforce applies default Content Security Policy headers. Add trusted sites only when loading external resources in Lightning components.

Remediation: No action required. When adding external resources, use HTTPS endpoints only.

No named credentials configured

INFO

No named credentials are configured. If this org makes external callouts, consider using Named Credentials to avoid hardcoded endpoints.

Remediation: Configure Named Credentials for any external service integrations rather than hardcoding endpoints in Apex.

1 Apex class(es) contain potential hardcoded credentials

HIGH

Hardcoded Bearer tokens, Basic auth, or API keys in Apex source code expose credentials to anyone with metadata read access.

Remediation: Replace hardcoded credentials with Named Credentials. Rotate any exposed credentials immediately.

2 externally exposed Apex class(es) (@AuraEnabled/@RemoteAction/@RestResource) lack "with sharing": IDOR risk

CRITICAL

Classes with @AuraEnabled, @RemoteAction or @RestResource methods that use "without sharing" or have no sharing declaration execute without record-level access control. Attackers can supply arbitrary record IDs to read or manipulate data they should not access (IDOR). SBS-CPORTAL-001 requires server-side authorization for every record accessed via portal Apex.

Remediation: Add "with sharing" to all @AuraEnabled, @RemoteAction and @RestResource classes. Validate user ownership or sharing on every record accessed inside these methods.

1 Apex class(es) explicitly use "without sharing"

HIGH

Classes declared "without sharing" ignore the running user's record access and can access all data in the org.

Remediation: Replace "without sharing" with "with sharing" or "inherited sharing" unless there is a documented business requirement.

1 Apex class(es) have no sharing declaration

MEDIUM

Apex classes without a sharing declaration default to "without sharing" behavior when called from a context that doesn't enforce sharing.

Remediation: Add explicit sharing declarations to all Apex classes. Use "with sharing" as the default, or "inherited sharing" for utility classes.

Apex sharing analysis: 1 with sharing, 0 inherited, 1 without sharing, 1 no declaration (3 total)

INFO

Summary of sharing declarations across 3 custom Apex classes.

Remediation: Aim for all classes to use "with sharing" or "inherited sharing".

No active flows running without sharing context identified

passed

All 1 active flows either enforce user sharing context or are not autolaunched/screen flow types.

Remediation: Continue to review flow settings when new flows are activated.

No records shared to All Internal Users groups via sharing rules

passed

No sharing rules were found targeting the "All Internal Users" group on key objects.

Remediation: Continue to avoid broad sharing rules. Periodically review sharing configuration as the org grows.

Sensitive custom fields appear appropriately restricted

passed

No sensitive custom fields with excessive permission set access were found.

Remediation: Continue to apply restrictive field-level security to any new sensitive fields.

0 active scheduled/batch Apex job(s) found

INFO

This is an inventory of currently active scheduled and batch Apex jobs in the org.

Remediation: Periodically review scheduled jobs to ensure all active automation is expected and authorized.

Apex test coverage: 81%

MEDIUM

Org-wide Apex test coverage is 81%. Salesforce requires 75% minimum to deploy but higher coverage indicates better code quality and security.

Remediation: Increase test coverage, particularly for security-sensitive Apex classes handling authentication, data access, and external integrations.

No obviously credential-related custom objects detected

passed

No custom objects with credential-related naming patterns were found.

Remediation: Continue to avoid storing secrets in custom objects or custom settings. Use Named Credentials for external authentication.

No active users are assigned to standard out-of-the-box Salesforce profiles

passed

SBS-ACS-005 requires all active users be on custom profiles. No violations found.

Remediation: Continue monitoring as new users are onboarded.

No username-password logins detected in the last 30 days

passed

SBS-AUTH-001 requires production orgs to disable Salesforce credential logins. No username-password logins were found in LoginHistory for the past 30 days, which is consistent with SSO being enforced.

Remediation: Verify in Setup → Single Sign-On Settings that "Prevent Login with Salesforce Credentials" is enabled to enforce SBS-AUTH-001 at the org level.

No active external/portal users found: SBS-AUTH-004 not applicable

passed

SBS-AUTH-004 applies to external users with substantial access to sensitive data. No active portal user types were found in this org.

Remediation: If Experience Cloud sites are added in future, ensure SBS-AUTH-004 MFA requirements are met for external users.

"Use Any API Client" holders could not be read: the permission field is not in this org

inconclusive

This org has no PermissionSet.PermissionsUseAnyApiClient field, which is usual when API Access Control is not available. Who can bypass API client restrictions is therefore unestablished, and SBS-ACS-006 is unevaluated rather than satisfied.

Remediation: If API Access Control is enabled, review who holds "Use Any API Client" in Setup → Permission Sets.

No SOAP API login() authentication in the last 90 days

passed

Winter '27 requires the "Use Any API Auth" permission to authenticate with SOAP API login(). No login in the last 90 days used a SOAP API type, so no account is exposed to that change on the evidence available. LoginHistory retains six months, so an integration that runs less frequently than this window would not appear.

Remediation: No action needed. If you operate an integration that runs less often than quarterly, confirm its authentication method directly rather than relying on this window.

No candidate non-human identities found: SBS-ACS-007

passed

SBS-ACS-007 requires all non-human identities to be inventoried and documented. No standard users matching common service account patterns (by username) or never-logged-in users were found. This run could not gather the following signal(s): connected-app-run-as. Accounts identifiable only by connected-app-run-as are not represented here.

Remediation: As integration accounts are created, ensure they are documented with a named owner, stated purpose, and review date.

No integration or service accounts found

passed

No active account matched an integration signal (Salesforce Integration licence, scheduled-job owner, never logged in, API-only logins, or a service-account username pattern), so there is no non-human identity holding surplus permissions. One qualification: the following classification signal could not be gathered on this run — connected-app-run-as — so an account reachable only by it was not examined.

Remediation: As integration accounts are created, grant them a dedicated permission set scoped to the objects and operations they actually use, rather than a broad profile.

No active public content distribution links found

passed

SBS-FILE-001/002/003 govern the lifecycle of public content sharing links. No active public links were found in this org.

Remediation: Continue monitoring as files are shared externally.

8 sensitive object(s) have no field history tracking (investigation gap): SBS-DATA-004

MEDIUM

SBS-DATA-004 requires field history tracking on sensitive objects to capture who changed what data and when, enabling post-incident investigation and audit evidence. The following objects have no tracked fields: Account, Contact, Lead, Opportunity, Case, Contract, Quote, User.

Remediation: Enable field history tracking on each listed object in Setup → Object Manager → [Object] → Fields & Relationships → Set History Tracking. At minimum track key sensitive fields: email addresses, phone numbers, revenue fields, owner changes, and status changes.

7 of 7 key object(s) have no data classification: SBS-DATA-001/002

HIGH

SBS-DATA-001 requires all data to be classified by sensitivity and SBS-DATA-002 requires PII to be identified. 7 key object(s) have no fields with a Compliance Group set: Account, Contact, Lead, Opportunity, Case, Contract, User.

Remediation: Enable and configure the Salesforce Data Classification feature in Setup → Data Management → Data Classification. Assign compliance groups (PII, PCI, HIPAA, GDPR, etc.) to sensitive fields on all objects that store personal or regulated data. Prioritise email, phone, address, financial, and health-related fields.

Shield Platform Encryption not detected: SBS-DATA-003

MEDIUM

SBS-DATA-003 requires data at rest to be encrypted in line with its assigned classification. No Shield Platform Encryption keys were found, indicating either Shield is not licensed or encryption has not been configured for this org.

Remediation: Evaluate Salesforce Shield Platform Encryption for fields classified as sensitive or PII. If Shield is not available in your edition, document the compensating control (e.g., Classic Encryption for specific fields, or infrastructure-level disk encryption), and assess whether it meets the intent of SBS-DATA-003.

1 certificate(s) expire within 30 days

HIGH

Expired certificates break all integrations, SSO logins, and JWT-based authentication that depend on them. Certificates expiring within 30 days require immediate replacement to avoid service disruption.

Remediation: Renew or replace expiring certificates immediately. Update all integrations and connected apps that reference these certificates. Test authentication flows after replacement.

No installed packages found

INFO

No InstalledSubscriberPackage records were found. This org does not have any AppExchange or custom packages installed.

Remediation: No action required. Monitor for new package installations as part of your change management process.

No trusted IP ranges configured: MFA applies to all login locations

passed

No NetworkAccess (trusted IP range) records are configured. All users are subject to MFA and login challenge enforcement regardless of their network location.

Remediation: Continue to avoid configuring trusted IP ranges unless there is a documented, justified business requirement with compensating controls.

No anonymous Apex execution detected in the last 90 days

passed

No SetupAuditTrail entries matching anonymous Apex execution patterns were found in the last 90 days. This indicates the Developer Console and anonymous Apex execution have not been used recently in production.

Remediation: Continue monitoring. If anonymous Apex execution is ever required, ensure it is pre-approved, logged, and reviewed.

No active debug log traces found

passed

No active TraceFlag records were found. No users or classes are currently being traced, so no sensitive data is being captured in debug logs.

Remediation: Continue monitoring. Remove debug traces promptly after troubleshooting sessions complete.

My Domain configured: acme

INFO

The org has a custom My Domain (acme) configured, which is a prerequisite for SSO enforcement and Enhanced Domains.

Remediation: Verify the login policy in Setup → My Domain prevents login from login.salesforce.com.

My Domain allows username-password login: SSO not enforced

HIGH

The AuthConfig for this org allows users to log in with Salesforce username and password, meaning SSO via your identity provider is not the only authentication path. Users can bypass SSO (and its MFA, conditional access, and session controls) by using direct credentials. Affected authentication configuration(s): Acme_Login.

Remediation: In Setup → My Domain → Authentication Configuration, disable "Login Page" (Salesforce credentials) as an authentication option. Ensure SAML/SSO is the only allowed method. Also enable "Prevent Login from login.salesforce.com" in My Domain settings.

No connected apps found: session policy check not applicable

passed

No connected apps are configured in this org.

Remediation: Continue monitoring as connected apps are added.

Organization settings could not be read

inconclusive

The Organization object query returned no results.

Remediation: Verify the audit user has read access to the Organization object.

No active internal standard users found

passed

No active, unfrozen standard users were found in this org. MFA enforcement verification is not applicable.

Remediation: No action required.

All Salesforce release updates are enabled

passed

No pending release updates were found. The org is current with all platform changes Salesforce has made available.

Remediation: After each Salesforce release (3× per year), review Release Updates in Setup to enable new updates promptly.

All custom Apex classes are compiled on API v50+ (Winter '21 or later)

passed

No custom Apex classes with API versions older than the baseline threshold were found. Modern API versions ensure classes benefit from current platform security behaviors and FLS enforcement.

Remediation: When developing new Apex classes, target the current API version. Periodically update old classes and regression-test to stay current.

Inbound SOAP API usage: manual review required via Event Monitoring

INFO

Salesforce does not expose inbound SOAP API call details in SOQL-queryable objects. They are captured only in EventLogFile with EventType = "API". The API_TYPE column in those log files distinguishes SOAP callers: "E" = Enterprise WSDL, "P" = Partner WSDL. LoginHistory cannot make this distinction; SOAP login() calls and UI logins both appear as LoginType = "Application". If external systems are calling this org via the Enterprise or Partner WSDL, those callers should be migrated to REST API or connected-app-governed OAuth flows.

Remediation: In Setup → Event Monitoring, download an API event log and filter on API_TYPE = "E" or "P" to identify active SOAP callers. For each SOAP caller, work with the integration owner to migrate to REST API using a connected app with appropriate OAuth scopes and IP restrictions.

No connected apps found

passed

No connected apps exist in this org.

Remediation: Continue monitoring as new connected apps are added.

No Transaction Security Policies are enabled

HIGH

Transaction Security Policies provide automated, real-time threat detection and response within Salesforce. With no policies enabled, the org has no automated defence against: credential stuffing and brute-force attacks, impossible-travel logins (e.g. login from two countries within minutes), bulk data downloads and mass API queries, concurrent session anomalies, and privilege escalation attempts. An attacker who compromises any credential can operate without triggering any automated response.

Remediation: Enable Transaction Security (Setup → Transaction Security Policies) and create policies for at minimum: (1) Login anomalies: impossible travel, concurrent sessions from different IPs; (2) Data export: block or notify on bulk Report/List View exports; (3) API anomalies: high-volume REST/SOAP queries. Recommended actions: Block + Notify for critical events; Notify for informational events.

37 failed login(s) in 7 days: no brute-force patterns detected

passed

37 failed login attempts recorded in the last 7 days, but no single account exceeded the brute-force threshold (20 failures). This volume appears consistent with normal user error.

Remediation: Continue monitoring. Configure Transaction Security Policies to alert on anomalous login activity as volumes change.

1 live Experience Cloud site(s) allow self-registration

HIGH

Self-registration allows anyone on the internet to create a portal account. Attackers exploit this to: (1) enumerate valid email addresses already registered; (2) create portal accounts to access any data exposed to authenticated portal users via OWD, sharing rules, or misconfigured permissions; (3) pivot from a portal user account to exploit object-level permission misconfigurations. If OWD for sensitive objects is set to Public Read or wider for external users, self-registration gives attackers direct data access without any approval step.

Remediation: Disable self-registration unless explicitly required (Setup → Digital Experiences → <site> → Administration → Registration). If required, implement email domain allow-listing, CAPTCHA, and manual approval workflows. Immediately audit external OWD settings and guest user permissions for sites with self-registration enabled.

1 live Experience Cloud site(s) have guest (unauthenticated) access enabled

MEDIUM

Sites with an active Guest User allow unauthenticated visitors to access the site without creating an account. Any Salesforce objects or records accessible to the Guest User profile are exposed to the entire internet. Misconfigurations in guest user object permissions or OWD external settings result in public data exposure.

Remediation: Review guest user object permissions for each site (Setup → Profiles → <Guest Profile> → Object Settings). Ensure external OWD is Private for all sensitive objects. Run the Guest User Access check for detailed permission findings.

No custom labels found in org namespace

passed

No custom labels were found in the org namespace.

Remediation: Continue using Named Credentials and Custom Metadata (protected) for secrets storage.

No Report folders have Public access

passed

All Report folders are restricted to specific users, roles, or groups. No folder exposes reports to all authenticated users.

Remediation: Continue reviewing report folder permissions as new reports and folders are created. Ensure sensitive reports are in Private or Shared folders with explicit access grants.

1 escalation-permission grant(s) across active users

HIGH

These permissions let a user create accounts, reset passwords, assign permission sets, modify metadata, or register auth providers: the primitives an attacker uses for lateral movement and persistence after an initial foothold. 4 super-admin(s) also hold them and are rated in the super-admin finding instead.

Remediation: Remove these permissions from non-administrator profiles/permission sets and document who legitimately needs each one.

No CORS allowlist entries configured

passed

No cross-origin allowlist entries exist, so browser-based cross-origin token theft via CORS is not a concern.

Remediation: If CORS entries are added later, allow only exact, fully-qualified HTTPS origins.

No active inbound email services

passed

No inbound email service is active, so no Apex runs on receipt of email.

Remediation: If one is added, require authentication and restrict accepted senders.

No workflow outbound messages configured

passed

No outbound messages are defined, so there is no automated POST of org data to external endpoints to review.

Remediation: If outbound messages are added later, use HTTPS endpoints and avoid including the session ID.

No externally available Documents found

passed

No Document is marked "Externally Available Image", so none are retrievable without authentication.

Remediation: Continue to keep Documents private unless anonymous access is explicitly required.

No static resources use Public cache control

passed

All static resources use Private cache control or none exist.

Remediation: Continue to keep static resources Private unless public delivery is required.

2 object(s) fully readable by unauthenticated guests (public external OWD)

CRITICAL

These objects have an external org-wide default of Read or ReadWrite, are readable by the guest profile, and are modelled by the UI API, so every record is reachable by any unauthenticated visitor who can enumerate counts and page through records in bulk. Reachable unauthenticated via the Experience Cloud UI API (GraphQL) through aura://RecordUiController/ACTION$executeGraphQL on /s/sfsites/aura (aura.token=null).

Remediation: Set external OWD to Private for these objects, and remove Read from the guest profile/permission sets unless a specific public dataset is intended. Then verify no guest-accessible Apex returns the data.

1 site(s) allow guest users to access files

HIGH

Guest file access lets unauthenticated visitors read public files (ContentVersion/ContentDocument/Attachment). Combined with the UI API, file IDs can be enumerated and content downloaded via the file servlet (/sfc/servlet.shepherd/version/download).

Remediation: Disable guest file access (Network setting "Let guest users access public files") unless a specific public file library is intended.

1 site(s) let guest users see other members

MEDIUM

Guest member visibility exposes other site members (User records, names, profile data) to unauthenticated visitors, leaking member identities and enabling enumeration.

Remediation: Disable "Let guest users see other members of this site" unless member directories must be public.

Confirm guest record-access guardrails manually (1 active guest user(s))

LOW

The "Secure guest user record access" Release Update is no longer exposed via the API (usually because it was auto-activated in an earlier Salesforce release). Enforcement is therefore assumed but not API-verifiable. The two settings that jointly close the guest-ownership-defeats-OWD vector cannot be read programmatically.

Remediation: In Setup → Sharing Settings, confirm "Secure guest user record access" is on and "Assign new records created by guest users to the default owner" is enabled. Then confirm no guest user OWNS records (see the guest-object-exposure finding) and that guest access is granted only via minimal guest user sharing rules.

Threat Detection stores are present but contain no events

MEDIUM

The Threat Detection anomaly stores are queryable but hold no events in the last 180 days. Storage may have been enabled only recently, or detection is not generating events. Until events accumulate, "no anomalies" is not evidence of safe behaviour, and historical anomalous guest access cannot be reconstructed.

Remediation: Confirm storage is enabled for the anomaly events (Setup > Event Manager) and has been for the full retention window. Verify Transaction Security / Threat Detection policies are active and alerting.

No delegated administration groups configured

passed

No DelegateGroup records exist, so there is no delegated-admin escalation surface.

Remediation: If delegated administration is introduced, scope each group minimally and review assignable permission sets.

Verify the "Administrators Can Log In as Any User" policy manually

INFO

When "Administrators Can Log In as Any User" is enabled (Setup → Login Access Policies), any administrator can impersonate any user and access all of their data with no per-session consent. This run could not read SecuritySettings, so the policy must be confirmed manually.

Remediation: In Setup → Login Access Policies, disable "Administrators Can Log In as Any User" unless there is a documented support need, and require users to grant time-boxed login access instead.

No broad mass-export capability found

passed

No profiles/permission sets grant Weekly Data Export, nor API access combined with View/Modify All Data.

Remediation: Keep Weekly Data Export and View/Modify-All limited to trusted admins, and prefer scoped integration users for extracts.

No active classic Force.com sites

passed

No active Visualforce Force.com Sites were found, so there is no classic unauthenticated site surface.

Remediation: If a classic site is activated later, review its guest user profile before it goes live.

No external Auth Providers or SAML SSO configured

passed

No AuthProvider or SamlSsoConfig records exist, so there is no external federation surface to review.

Remediation: If external identity is added later, restrict just-in-time provisioning to least-privilege profiles and validate the IdP certificate.

1 guest user(s); no API or Bulk API access

passed

No active guest user has "API Enabled" or "Bulk API Hard Delete", so guests cannot drive the raw API.

Remediation: Keep API and Bulk permissions off guest profiles as sites change.

2 guest permission grant(s) give Read access to the User object

HIGH

A guest permission set or profile grants Read on the User object. Object-level read is what makes User queryable at all for a guest; combined with any sharing path that exposes records — a public external OWD, a user sharing rule, or guest member visibility on an Experience site — it turns the User table into an enumerable directory reachable over the UI API.

Remediation: Remove Read on the User object from guest profiles and guest permission sets. Where site components must show a name, expose it through Apex that returns only the specific fields required.

No External Credentials configured

passed

No ExternalCredential records exist, so there is no external-credential authentication surface to grade.

Remediation: When adding External Credentials, prefer OAuth/JWT or AWS SigV4 over custom or no-authentication schemes.

No successful logins in the last 7 days

passed

LoginHistory returned no successful logins in the window, so no login-distribution anomaly could be computed.

Remediation: Re-run after normal activity; forward LoginHistory to a SIEM for continuous anomaly detection.

1 session/clickjack/CSRF setting(s) deviate from the security baseline

MEDIUM

These browser-session hardening settings differ from Salesforce's recommended values. Weak framing, CSRF, session-lock, or XSS-protection settings enable clickjacking, cross-site request forgery, session hijacking, and reflected-XSS attacks against authenticated users.

Remediation: In Setup → Session Settings (and Session Security Levels), align each flagged setting to the recommended value: highest clickjack protection for all pages, CSRF protection on GET and POST, "Lock sessions to the IP address" and "to the domain", content-sniffing and XSS protection on, and warnings on redirects to external URLs.

No fields are classified as sensitive on the key standard objects

passed

No fields on Account, Contact, Lead, Opportunity, Case, Contract, User, Individual carry a ComplianceGroup (data classification), so encryption coverage cannot be assessed against a sensitivity baseline. Custom objects are not scanned. Classification is the prerequisite — see the data-classification check.

Remediation: Classify PII/PHI fields (Setup → Data Classification) first, then encrypt the sensitive ones with Shield Platform Encryption.

Verify Strict CSP + Lightning Web Security on 1 live Experience Cloud site(s)

INFO

The per-site Content Security Policy level and Lightning Web Security toggle are not reliably exposed to the API, so they must be confirmed manually. A "Relaxed CSP" level or disabled Lightning Web Security lets inline/third-party scripts run on pages an unauthenticated guest can reach, widening the XSS and script-injection surface.

Remediation: For each site: Setup → Digital Experiences → (site) → Administration → Security & Privacy — set the CSP level to "Strict CSP" and enable Lightning Web Security. Review any Trusted Sites/URLs added to relax CSP.

Not a sandbox — data masking not applicable

passed

This org is a production org, so sandbox data-masking does not apply here.

Remediation: Apply Data Mask to sandboxes seeded from this production org so PII/PHI is not copied in the clear.

1 user(s) hold admin-equivalent access without the System Administrator profile

CRITICAL

These active users have accumulated effective permissions equivalent to a System Administrator (either "Modify All Data" directly, or "Manage Users" combined with "Assign Permission Sets", which lets them grant themselves anything) but sit on a different profile. Such "shadow admins" are easy to miss in profile-based reviews, yet a takeover of any one grants full org control. The access is reached via the user's profile, assigned permission sets, or permission set groups combined.

Remediation: Review each user's permission sets and profile. Remove "Modify All Data" / the Manage Users + Assign Permission Sets pairing unless the role genuinely requires org administration, and consolidate true admins onto a controlled admin profile.

6 active user(s) hold at least one high-risk permission

INFO

Inventory of active users whose effective permissions include one or more catalogued high-risk permissions. Use this as the privileged-access baseline for least-privilege review.

Remediation: Periodically confirm each privileged user still requires their high-risk permissions; remove any that are no longer needed.

No active GenAI Prompt Templates found in the org

passed

Zero GenAiPromptTemplate records were returned.

Remediation: Review grounding sources whenever new Prompt Templates are created.

No Data Cloud Data Spaces found

passed

Zero DataSpace records exist in this org.

Remediation: Define segmented Data Spaces if Data Cloud is activated in the future.

No active triggers on custom Platform Events identified

passed

Zero active Apex triggers subscribe to custom Platform Event objects (__e).

Remediation: When subscribing to Platform Events, ensure publish permissions are strictly scoped to internal authorized actors.

Declarative Flow HTTP Callouts use proper Named Credentials without embedded secrets

passed

External services and declarative flows were inspected; no hardcoded API keys or uncredentialed external service endpoints detected.

Remediation: Continue utilizing Named Credentials and External Credentials for all declarative HTTP integrations.

Verify the OAuth Device Flow and Username-Password Flow setting manually

INFO

This run could not read the Device Flow and Username-Password Flow setting from OAuth and OpenID Connect Settings, so whether it is enabled is unknown. Both flows let a token be issued outside the browser sign-in, bypassing MFA and conditional access.

Remediation: In Setup → OAuth and OpenID Connect Settings, confirm "Allow OAuth Device Flow" and "Allow OAuth Username-Password Flows" are off unless a documented integration needs them.

Verify Delegated Authentication settings manually

INFO

This run could not read SecuritySettings, so whether Delegated Authentication is enabled is unknown. 0 administrator profile(s) hold "Is Single Sign-On Enabled", which routes their sign-in through the delegated gateway if it is on.

Remediation: In Setup → Single Sign-On Settings, check whether Delegated Authentication is enabled. If it is, the gateway must be HTTPS with mutual TLS, and administrator profiles should not hold "Is Single Sign-On Enabled".

No Delegated Administration Groups found

passed

Zero DelegateGroup records are configured in this org.

Remediation: Continue avoiding unmonitored delegated administration groups.

No Auth Providers configured with Registration Handlers

passed

Zero AuthProvider records in this org configure an automated Registration Handler.

Remediation: When configuring Registration Handlers, avoid execution as System Administrator and verify email authenticity.

No active inbound Email-to-Apex services found

passed

Zero active EmailServicesFunction records exist in the org.

Remediation: When creating inbound email services, enforce sender restrictions and SPF/DKIM verification.

Zero active DKIM keys configured for outbound Salesforce email

MEDIUM

Outbound emails sent from Salesforce without DKIM signatures are vulnerable to domain spoofing, recipient rejection, or landing in junk folders. Active DKIM keys ensure cryptographic origin authentication for all outbound Salesforce messages.

Remediation: Generate and activate DKIM keys in Setup → DKIM Keys for all corporate sending domains used by Salesforce.

No Partner Super Users or External Account Hierarchies widening portal visibility

passed

External portal users are constrained to their own account boundaries without hierarchical over-sharing.

Remediation: Maintain standard Private external OWD and avoid unreviewed Super User grants.

No Restriction Rules configured

passed

Zero RestrictionRule records configured across standard and custom objects.

Remediation: When deploying Restriction Rules, ensure they remain active and avoid multiple conflicting rules on the same entity.

No installed subscriber packages found in org

passed

Zero InstalledSubscriberPackage records were identified.

Remediation: Continue inventorying new packages when installed.

No active Shield TenantSecret keys generated

passed

Zero TenantSecret records were returned.

Remediation: Generate tenant encryption secrets if Shield Platform Encryption is enabled.

3 distinct user(s) performed deployment actions in the last 90 days: SBS-DEP-001

MEDIUM

SBS-DEP-001 requires all deployments to be performed by a single designated deployment identity, not individual user accounts. 3 distinct users were found in deployment-related audit trail entries (Change Sets, Developer Tools, Packages, Metadata) over the past 90 days. Multiple deployers make it harder to audit changes and bypass change-management controls.

Remediation: Centralise deployments through a CI/CD pipeline that authenticates as a single named service account. Revoke direct deployment access from individual admin users.

3 deployer(s) are admin-profile users: SBS-DEP-003

MEDIUM

SBS-DEP-003 requires monitoring for unauthorized deployment modifications. Deployments performed by administrator-profile users are harder to distinguish from emergency break-glass changes and are more likely to occur outside of a change-management window.

Remediation: Replace admin-user deployments with a CI/CD pipeline using a dedicated integration user with only deployment-required permissions. Reserve individual admin accounts for emergency use only, and document any emergency deployments in the system of record.

No System.debug-only logging or sensitive-data logging patterns found: SBS-CODE-003/004

passed

SBS-CODE-003 requires a persistent logging framework and SBS-CODE-004 prohibits sensitive data in logs. No violations were detected in the scanned Apex classes.

Remediation: Continue monitoring as new Apex classes are added to the org.

No connected apps to check for inactivity

passed

No connected apps were found in the org. No inactivity check is needed.

Remediation: Continue monitoring as new connected apps are added.

No standing OAuth tokens found

passed

No rows were returned from OauthToken, so no app currently holds a standing OAuth authorisation in this org.

Remediation: Re-check after authorising any new integration.

1 Apex class(es) run "without sharing" and perform DML/SOQL without CRUD/FLS checks

HIGH

Apex classes declared "without sharing" bypass record-level visibility AND have no field-level or object-level permission checks, meaning any user who triggers the code can read or write any record and field regardless of their assigned permissions. This is the most exploited Salesforce access control vulnerability. OWASP Salesforce Top 10 ranks CRUD/FLS bypass as the #1 risk.

Remediation: Refactor to use "with sharing" where possible. Add `Security.stripInaccessible()` before DML and `Schema.SObjectType.[Object].fields.[Field].isAccessible()` before displaying fields. Where "without sharing" is required for a technical reason, document the justification and tighten the scope.

1 guest-executable Apex class(es) run without sharing, directly or through a helper

CRITICAL

These Apex classes can be invoked by unauthenticated guest users AND do not enforce record-level sharing, either themselves or in a helper class they call that is declared "without sharing". This is the classic Salesforce guest-user exploit chain: an attacker calls the class and reads or writes business data in bulk with no login. Object-level guest permissions do not mitigate this: the class runs in system context.

Remediation: Add "with sharing" to every guest-reachable Apex class and to every helper it calls, enforce CRUD/FLS, and remove guest execution access from any class that does not strictly need it.

No custom @RestResource Apex endpoints found

passed

No Apex classes with the @RestResource annotation were found in the org namespace.

Remediation: Continue monitoring as new Apex code is developed.

No custom Visualforce pages found

passed

No Visualforce pages in the org namespace were found.

Remediation: Continue monitoring as new pages are added.

No Lightning Message Channels defined

passed

This org defines no Lightning Message Channels, so there is no cross-component message bus to expose.

Remediation: No action required.

No Event Monitoring log files found in the last 35 days: SBS-MON-001

HIGH

SBS-MON-001 requires Event Monitoring storage to be enabled so that login, API access, and data export events are captured. No EventLogFile records exist for the past 35 days, indicating Event Monitoring is either not licensed or not configured.

Remediation: Enable Event Monitoring in Setup → Event Monitoring Settings. If the feature is not licensed, raise with your Salesforce account team. SBS-MON-001 compliance requires it.

No guest event logs in the retention window

passed

Event Monitoring is enabled but produced no EventLogFile blobs in the retention window. Stream logs to a SIEM for durable coverage.

Remediation: Enable Event Monitoring and forward guest event logs to a SIEM so this analysis has a durable window.

All 0 active standard user(s) have registered at least one MFA method

passed

All 0 active, unfrozen standard users have at least one MFA method registered in TwoFactorInfo. Users who have not registered a method cannot complete MFA challenges and may be locked out of the org if MFA is enforced.

Remediation: Continue monitoring MFA registration as new users are onboarded. Ensure new user onboarding includes an MFA registration step before their first login.

No SIEM or external monitoring integration detected: SBS-MON-003/004

HIGH

SBS-MON-003 requires suspicious login activity to be monitored and alerted on. SBS-MON-004 requires API activity anomalies to be detected. No signals of an external monitoring or SIEM integration were found across Named Credentials, Remote Sites, Connected Apps, or Scheduled Apex jobs. Without external log forwarding, Event Monitoring data remains unanalysed and no automated alerts can be generated.

Remediation: Integrate Salesforce Event Monitoring with a SIEM platform (Splunk, Datadog, Sumo Logic, Microsoft Sentinel, etc.) using the EventLogFile API or Salesforce Shield Event Streaming. Configure alerts for: repeated failed logins, off-hours API access, bulk data export events, and unusual login geolocations (SBS-MON-003). Enable API usage anomaly detection (SBS-MON-004).

No registered MFA methods to grade

passed

No active internal user has a registered MFA method, so there is no method strength to assess. Missing registration itself is reported by the MFA registration check.

Remediation: None for method strength. Address MFA registration coverage first.

No toxic permission combinations detected

passed

Only super-admins hold flagged combinations; they already have unrestricted control and are rated in the super-admin finding (users-super-admin-combo). No other active user holds a flagged combination.

Remediation: Continue to separate user administration, code authorship, identity, and data-access duties across roles.