CM-7(2): Prevent Program Execution
CM-7(2): prevent program execution requirement means you must technically block execution of unauthorized programs on your systems, using defined organizational parameters (your “allow/deny” rules). To operationalize it fast, establish an approved software baseline, enforce execution control (application allowlisting/denylisting), and retain repeatable evidence that the control blocks what it should and is maintained over time. 1
Key takeaways:
- Define the parameter first: what “prevent program execution” means in your environment (allowlist scope, exceptions, and enforcement points). 1
- Implement a hard technical gate (not guidance) that blocks unapproved binaries/scripts across endpoints and servers, with monitored exceptions. 2
- Evidence must prove operation: policy + configuration + block logs + exception tickets + periodic review records. 2
The CM-7 control family focuses on “least functionality”: systems should only provide capabilities essential to mission and business needs. CM-7(2) tightens that concept into a specific operational outcome: prevent the execution of programs that are not authorized under your organization-defined rules. 1
For a Compliance Officer, CCO, or GRC lead, the fast path is to treat CM-7(2) as an execution control requirement with two deliverables: (1) a clear definition of “authorized programs” (the parameter) and (2) technical enforcement that blocks everything else, with traceable exception handling. The most common audit failure is not a missing tool; it’s a missing decision record that explains your allow/deny approach and shows it working consistently in production.
This page gives requirement-level guidance you can hand to IT/security to implement, then collect evidence without guesswork. It focuses on what assessors look for: defined scope, enforceable configuration, controlled exceptions, and proof that the control is maintained as systems and software change. 2
CM-7(2) overview (what the requirement is asking for)
CM-7(2): prevent program execution requirement expects you to stop unauthorized software from running. This is stricter than “we try to keep systems clean” or “users shouldn’t install apps.” You need a preventative mechanism that blocks execution based on organization-defined criteria and does so consistently across in-scope systems. 1
Plain-English interpretation
- You decide what software is allowed to run (and where).
- Everything else is blocked from executing.
- Exceptions are explicitly approved, time-bounded (if appropriate), and monitored.
- You can prove it with logs, configs, and change records. 2
Regulatory text
Control requirement (excerpt): “Prevent program execution in accordance with {{ insert: param, cm-07.02_odp.01 }}.” 1
Operator translation of the “insert: param” part: NIST is telling you that the organization must define the parameter(s) that determine what program execution is prevented. In practice, your program execution prevention standard should define:
- The in-scope system types (endpoints, servers, VDI, containers, etc.).
- The authorization model (allowlist by publisher/hash/path; denylist categories; approved repositories).
- What counts as “programs” (executables, scripts, macros, installers, interpreters).
- Where enforcement happens (endpoint agent, OS policy, EDR, application control, server hardening).
- How exceptions are requested, approved, implemented, reviewed, and removed. 1
Who it applies to (entity and operational context)
This requirement applies to organizations implementing NIST SP 800-53 controls, including:
- Federal information systems operating under NIST SP 800-53 control baselines. 2
- Contractor systems handling federal data where NIST SP 800-53 is a contractual or program requirement. 2
Operationally, CM-7(2) is most relevant where unauthorized code execution is a plausible path to compromise:
- User endpoints where employees can download/run software.
- Admin workstations and jump hosts.
- Server fleets where ad hoc scripts and installers appear during troubleshooting.
- High-integrity enclaves (finance, engineering build systems, regulated workloads). 2
What you actually need to do (step-by-step)
Step 1: Define your execution-prevention parameter (the “ODP” decision)
Write a short standard that answers these questions in unambiguous terms:
- Authorization basis: Are programs authorized by publisher signature, file hash, package name, path rules, or an approved catalog?
- Default stance: Is the default “deny unless explicitly allowed,” “allow except known bad,” or a tiered approach by system criticality?
- Scope of “program execution”: Do you include PowerShell, Bash, Python, MSI installers, Office macros, browser extensions, and portable executables?
- Exception model: Who can approve, what evidence is required, how long it lasts, and how it is monitored.
- Ownership: Name the control owner and the operations teams responsible for enforcement and monitoring. 1
Deliverable: CM-7(2) Program Execution Prevention Standard (one to three pages) mapped into your control library. Daydream can help you map CM-7(2) to an owner, a repeatable procedure, and recurring evidence artifacts so assessments don’t become a scramble. 1
Step 2: Build an approved software baseline (what “authorized” means)
You need an authoritative list or catalog that operations can enforce:
- Approved business applications (and versions, if you enforce at that granularity).
- Approved admin tools (remote management, debugging, package managers).
- Approved scripting runtimes and signed scripts (if your model allows scripts).
- Approved installation sources (managed app store, MDM catalog, golden image). 2
Tip from practice: separate “allowed on endpoints” from “allowed on servers.” Treat admin tools as a controlled set with explicit justification.
Step 3: Implement technical enforcement (the “prevent” part)
Pick enforcement that can truly block execution, not just alert:
- Endpoint/Server application control: allowlisting/denylisting via OS-native controls or application control tooling.
- Script controls: restrict interpreter execution, require signed scripts where feasible, block untrusted macro/script sources.
- Privilege controls: reduce ability to install/run from user-writable paths; restrict local admin; control removable media execution where relevant.
- Central policy management: ensure policies are pushed, versioned, and tamper-resistant. 2
Minimum bar for audit readiness: you can show a policy/config that would block an unapproved executable and you can show evidence of blocks in logs (or test results in a controlled environment). 2
Step 4: Create an exception workflow that doesn’t break security
A workable exception process prevents two failure modes: “everyone bypasses the control” and “the control blocks the business.” Design the workflow:
- Request ticket includes business justification, target hosts/users, program identity (hash/publisher), and duration.
- Security review checks legitimacy and alternatives (approved equivalent, packaging, signing).
- Approval is role-based and recorded.
- Implementation is done through managed policy, not local workarounds.
- Exception is reviewed and removed when no longer needed. 2
Step 5: Monitor, test, and maintain
Execution prevention degrades unless you operationalize maintenance:
- Review block events for false positives and attempted unauthorized execution.
- Reconcile approved catalog to new images, patch cycles, and software updates.
- Validate policy coverage for new device classes and new server pools.
- Include CM-7(2) checks in build pipelines or configuration compliance checks. 2
Required evidence and artifacts to retain
Assessors typically need “design + operation” proof. Keep artifacts that show both.
| Evidence type | What good looks like | Owner |
|---|---|---|
| CM-7(2) standard / procedure | Defines the parameter, scope, enforcement points, and exception process | GRC + Security |
| Approved software baseline | Controlled list/catalog, change-controlled | IT + Security |
| Configuration evidence | Screenshots/exports of application control policies; MDM/endpoint policy settings; server baselines | IT/SecOps |
| Block/allow logs | Centralized logs showing prevented executions and policy decisions | SecOps |
| Exception tickets | Requests, approvals, implementation notes, expiry/review | ITSM + Security |
| Periodic review record | Meeting notes or attestation showing the baseline and exceptions were reviewed | Control owner |
Mapping CM-7(2) to the control owner, procedure, and recurring evidence artifacts is a pragmatic way to stay continuously ready for assessment. 1
Common exam/audit questions and hangups
Expect these lines of questioning:
- “Show me the parameter: what exactly do you prevent, and where is that defined?” 1
- “Demonstrate prevention: can an unapproved binary run on a standard workstation?” 2
- “How do you handle scripts and macros?” 2
- “Who can approve exceptions, and how do you ensure exceptions don’t become permanent?” 2
- “How do you ensure coverage across servers, including ephemeral infrastructure?” 2
Hangups usually appear where teams rely on “detect only” EDR configurations. CM-7(2) is framed as prevention, so be ready to explain any compensating approach if your environment cannot block in specific segments. 2
Frequent implementation mistakes (and how to avoid them)
- Policy-only compliance. A written standard without enforced blocking fails the “prevent” expectation. Pair documents with technical controls and proof. 2
- Undefined “authorized.” If “authorized” is informal, every exception becomes subjective. Maintain an approved catalog with change control. 1
- Ignoring scripts. Attackers often use built-in interpreters. Decide how PowerShell/Bash/Python are governed and show enforcement. 2
- Exceptions by local admin workarounds. If staff can bypass by copying to a different path or disabling an agent, the control is brittle. Use tamper resistance and central policy. 2
- No lifecycle for exceptions. Exceptions accumulate and become the new normal. Require periodic review and removal. 2
Enforcement context and risk implications
No public enforcement cases were provided in the supplied source catalog, so this page does not list enforcement actions. Practically, CM-7(2) reduces exposure to malware execution, unauthorized admin tools, and “shadow IT” binaries that evade standard patching and inventory. Failure modes tend to show up during incident response: teams cannot confidently state what ran, where it came from, and whether it was permitted. 2
Practical 30/60/90-day execution plan (phased, assessment-oriented)
First 30 days (Immediate stabilization)
- Assign a single control owner and publish the CM-7(2) parameter decision (scope + authorization basis + exceptions). 1
- Pick enforcement points for endpoints and servers; confirm the chosen tooling can block, not just alert. 2
- Stand up an exception workflow in your ticketing system with required fields and approvals. 2
- Define your evidence list and start collecting “as-built” configurations in a dedicated repository. Daydream fits well here as the place to tie the requirement to owners, procedures, and evidence so nothing gets lost between GRC and operations. 1
Days 31–60 (Controlled rollout)
- Build the approved software baseline for the most common endpoint and server images. 2
- Pilot application control in a constrained group; tune false positives through formal exception tickets, not ad hoc bypasses. 2
- Turn on centralized logging for blocks and policy changes; confirm retention and searchability. 2
Days 61–90 (Coverage and repeatability)
- Expand enforcement to remaining in-scope fleets; document any out-of-scope segments and why. 2
- Run a tabletop “audit drill”: produce the standard, the baseline, sample block logs, and a closed-loop exception record. 2
- Schedule recurring reviews: baseline updates tied to patch cycles and a recurring exception review cadence owned by the control owner. 2
Frequently Asked Questions
Does CM-7(2) require application allowlisting specifically?
The text requires prevention of program execution according to your defined parameter, not a named technology. In practice, application control (allowlisting/denylisting) is the most direct way to show “prevent,” because it produces enforceable policies and block evidence. 1
Can EDR in “detect” mode satisfy CM-7(2)?
CM-7(2) is written as prevention, so alert-only configurations are hard to defend during an assessment. If you cannot block in a segment, document the technical constraint, implement the strongest feasible preventative control, and keep evidence of compensating controls and approvals. 2
What counts as a “program” for this requirement?
Define this in your parameter decision and be explicit about executables, installers, scripts, and macros. Assessors look for alignment between your definition and what your tooling actually controls. 1
How do we handle developers who need lots of tools?
Use a separate policy tier for engineering workstations with a curated allowlist and a fast exception process. Keep the approval trail and review exceptions so the developer tier does not become “anything goes.” 2
What evidence is most persuasive in an audit?
A written standard with the parameter decision plus exported enforcement policies and real block logs is usually stronger than screenshots alone. Pair that with exception tickets that show approvals, implementation, and closure. 2
How should third-party software be treated under CM-7(2)?
Treat third-party software like any other software: it runs only if it is approved under your authorization model and appears in your baseline. If a third party needs remote tools or agents, route them through the same exception and approval workflow. 2
Footnotes
Frequently Asked Questions
Does CM-7(2) require application allowlisting specifically?
The text requires prevention of program execution according to your defined parameter, not a named technology. In practice, application control (allowlisting/denylisting) is the most direct way to show “prevent,” because it produces enforceable policies and block evidence. (Source: NIST SP 800-53 Rev. 5 OSCAL JSON)
Can EDR in “detect” mode satisfy CM-7(2)?
CM-7(2) is written as prevention, so alert-only configurations are hard to defend during an assessment. If you cannot block in a segment, document the technical constraint, implement the strongest feasible preventative control, and keep evidence of compensating controls and approvals. (Source: NIST SP 800-53 Rev. 5)
What counts as a “program” for this requirement?
Define this in your parameter decision and be explicit about executables, installers, scripts, and macros. Assessors look for alignment between your definition and what your tooling actually controls. (Source: NIST SP 800-53 Rev. 5 OSCAL JSON)
How do we handle developers who need lots of tools?
Use a separate policy tier for engineering workstations with a curated allowlist and a fast exception process. Keep the approval trail and review exceptions so the developer tier does not become “anything goes.” (Source: NIST SP 800-53 Rev. 5)
What evidence is most persuasive in an audit?
A written standard with the parameter decision plus exported enforcement policies and real block logs is usually stronger than screenshots alone. Pair that with exception tickets that show approvals, implementation, and closure. (Source: NIST SP 800-53 Rev. 5)
How should third-party software be treated under CM-7(2)?
Treat third-party software like any other software: it runs only if it is approved under your authorization model and appears in your baseline. If a third party needs remote tools or agents, route them through the same exception and approval workflow. (Source: NIST SP 800-53 Rev. 5)
Operationalize this requirement
Map requirement text to controls, owners, evidence, and review workflows inside Daydream.
See Daydream