The Salesforce Jungle: Why Your Fastest-Growing Platform Is Also Your Biggest Blind Spot
Every day, your Salesforce org ships new Flows, Apex code, and AppExchange integrations, and every day, your security team sees less of it. Here’s how the gap between platform velocity and security visibility opens, why it’s dangerous, and how to close it.
The Problem: One Platform, Two Realities
Salesforce was built to let non-developers build. Sales ops, RevOps, and business teams can spin up a new Flow, automation, or custom object in an afternoon β no ticket to IT required. That’s the entire pitch of low-code platforms, and it’s why Salesforce sprawls faster inside most enterprises than almost any other system.
But that speed creates a split reality:
- Platform velocity keeps accelerating. Features, automations, Flows, and Apex code ship into production continuously, often outside any formal SDLC or security review.
- Security visibility stays flat, near zero. Traditional application security scanners, the tools built for traditional codebases, were never designed to parse Apex classes or declarative Flow logic. To most scanners, the inside of a Salesforce org is invisible.
The faster the platform builds, the less security can actually see. That gap is where risk accumulates quietly, release after release, until it surfaces as an incident.
Five Ways the Gap Gets Exploited
Security teams who have looked inside production Salesforce orgs consistently find the same categories of exposure. Here’s what they look like in practice.
1. Row-Level Access Bypass
Salesforce’s sharing rules are supposed to restrict which records a user can see. But a poorly configured custom app or Apex class can silently ignore those rules, returning far more data than the user was ever meant to access.
In one demonstrated example, a standard “Internal Loan Viewer” correctly limited a user to a single record. A modified version of the same app, running with elevated (system) context instead of the user’s actual permissions, returned every loan in the system β names, credit scores, and full Social Security numbers included. Nothing in the UI signaled that anything had changed; the bypass was invisible to the end user and to any monitoring that only watches the front door.
2. Open Redirects
Custom Visualforce and Lightning pages can be built (or misconfigured) to redirect users to an external URL based on unvalidated input. Attackers exploit this to make a phishing link look like it originates from a trusted, branded Salesforce domain β “Welcome back, sign in to continue” pages that route the click straight to a lookalike site. Because the redirect starts on a legitimate corporate domain, it slips past email security filters and user suspicion alike.
3. Cross-Site Scripting (XSS) via External Vectors
Fields that render user- or partner-submitted HTML without sanitization β case comments, chat widgets, community portals β are a classic XSS vector. A single unescaped <img src=x onerror=...> payload dropped into a customer-facing field can execute in the context of an internal user’s session the moment they view the record, potentially exposing session tokens or triggering further actions on the user’s behalf.
4. SOQL Injection and HTML Injection in Flows
Because Flows are declarative rather than hand-coded, teams often assume they’re inherently safe. They’re not. Flow actions that construct SOQL queries or emails from unvalidated inputs are just as vulnerable to injection as traditional application code β the difference is that almost no one is reviewing them the way they’d review a pull request.
5. Third-Party Risk via AppExchange
AppExchange makes it trivial to install a partner app with a few clicks. But installing an app grants it a data and permissions footprint inside your org, and Salesforce is explicit that it makes no guarantees about the security of non-Salesforce-built (“non-SFDC”) applications β that responsibility sits with the customer. Security review dates on listed apps can lag years behind the “latest release,” meaning the version actually running in your org may never have been assessed.
Taming the Jungle: A Practical Framework
Closing the visibility gap doesn’t mean slowing the business down. It means building a continuous discipline around three things:
- Full application inventory. You can’t secure what you can’t see. That means a live, continuously updated inventory of every Flow, Apex class, Visualforce page, Lightning component, and installed package in the org, including ownership, creation date, and production status. “Unknown owner” and “unknown business context” should be exceptions, not the default state of your inventory.
- Code- and logic-level scanning. Apex and Flow logic need the same scrutiny as any other production code: static analysis for injection and access-control flaws, and testing that specifically targets sharing-rule enforcement rather than just perimeter authentication.
- Governance over third-party installs. Every AppExchange install should go through a lightweight review: what data it touches, what permissions it requests, and when it was last security-reviewed β before it goes live, not after an incident prompts the question.
Platform velocity and security visibility don’t have to trade off against each other. They just require security tooling that was actually built to understand how Salesforce works, not tooling designed for a codebase Salesforce never uses.