
Tekunda Team

Tekunda Team

A Salesforce security review checklist is only useful if it is ordered. Most submissions fail on a short, predictable list, and access control sits at the top of it. Work in this order: enforce user-mode access in code, triage the three scanner reports, then assemble the submission materials and a test environment the reviewer can actually use. Salesforce puts a typical review at 4 to 5 weeks, so a rejection costs you a release cycle, not an afternoon.
Tekunda has taken managed packages through the review in healthcare, logistics and manufacturing. What follows is the order we work in, not a description of the process. For the end-to-end submission journey, see How ISVs Pass the Salesforce AppExchange Security Review.
Three things moved this year, and older checklists predate all of them.
with sharing, and
WITH SECURITY_ENFORCED
is removed, so a class still using it on v67.0 will not compile. Triggers are the
exception: they always run in system mode.
Salesforce's guidance is blunt that all of your solution's components and services, no matter where they live, are fair game. That means the package, any web service it calls, any site that stores Salesforce data, and any mobile or desktop client. Settle your package type before you start fixing code, because it decides what you upload; Salesforce Packaging Models for ISVs: 1GP vs 2GP vs Unmanaged covers that choice.
Fix these top to bottom. The items near the top are both the most common findings and the most expensive to retrofit, which is why leaving them until last is how a submission slips a cycle.
WITH USER_MODE on SOQL and AccessLevel.USER_MODE on
Database calls, and replace any remaining
WITH SECURITY_ENFORCED before you bump the API version.
@AuraEnabled method can quietly run without it. Declare
with sharing, without sharing or
inherited sharing explicitly on every class, including inner and
utility classes, so the reviewer never has to work out which default applies.
escape="false", lwc:dom="manual" or
innerHTML has to be sanitised before it gets there, not after.
System.debug. Named Credentials and protected custom metadata are what
reviewers expect instead.
Secure and HttpOnly. Reviewers check the site you
hand them, not the one you describe.
You must include a Salesforce Code Analyzer report, a Partner Security Portal source scanner report and a DAST report. The bar is not zero findings, and it is different for each scanner:
Generate the Code Analyzer v5 report with the AppExchange rule selector, so it matches what the reviewer expects. On a complex codebase the run can take hours:
sf code-analyzer run --rule-selector AppExchange --rule-selector
Recommended:Security --output-file CodeAnalyzerReport.html
Which scans are mandatory has shifted more than once, so confirm the current scanner requirements before you generate anything.
Across our submissions, four categories come back as genuine false positives often enough to plan for: access-control findings raised against code that already enforces user mode, sharing findings on classes only ever entered through a context that has applied sharing, retired-library findings matched on a version string inside a bundled static resource, and reflected cross-site scripting findings on parameters that never reach the DOM.
Being right is not enough, though. The document is what passes. Salesforce asks for a document explaining why each flagged item does not pose a security risk, and tells you to be specific about how you protect against the vulnerability indicated. Give every finding its own entry: scanner and rule identifier, file and line, one sentence describing the data path, the exact control that protects it, and where that control lives in the package. One-line dismissals come back as questions, and questions cost weeks. For the justification format and the mistakes that get it rejected, see How to Document False Positives for the Salesforce Security Review.
You then start the review from the Publishing Partner Console: open the Technologies tab, choose Start Review on your solution, and complete the contacts, technical details, documentation and test environment sections before payment.
Salesforce states that a solution typically takes 4 to 5 weeks to get through the review, and that for every paid solution there is a $999 fee for the initial submission and for any subsequent attempts. If the team finds vulnerabilities, you fix and resubmit, and that counts as another attempt. Salesforce also notes that most submissions pass on the second attempt. Both facts argue for the same thing: front-load the access control work, because the cheapest submission is the one you only have to make once.
If you would rather the review was handled by people who have cleared it before, Tekunda runs AppExchange security review preparation as a Salesforce partner. If you are still weighing whether to bring in outside help, What a Salesforce PDO Does, and When to Hire One sets out where a PDO earns its fee.
Do free apps need a security review?
Yes. A solution has to pass the review before it is listed on the marketplace. The $999 submission fee that Salesforce documents applies to paid solutions.
Does API version 67.0 mean I can skip CRUD, FLS and sharing work?
No. The new defaults only apply to classes compiled at v67.0 or later, and triggers still run in system mode. Declare access modes and sharing explicitly so the reviewer can verify them line by line.
Is Salesforce Code Analyzer enough on its own?
No. You also need the Partner Security Portal source scanner report, and any external endpoint your app calls needs a DAST report of its own.
Does an Agentforce or agent-based app change the checklist?
The same review applies, but every external service your agent can call has to be described and scanned. See AppExchange Security Review for Agentic Apps: What Is Different.
Is the security review a one time event?
No. Listed solutions are typically re-reviewed once a year, and Salesforce can request a review at any time. New package versions use an attestation in the Partner Console instead of a fresh review, so keep the checklist as a standing release gate.