CM-7(6): Confined Environments with Limited Privileges

CM-7(6) requires you to force specified user-installed software to run inside a confined physical or virtual environment with limited privileges, so that untrusted or user-added code cannot freely access the host, sensitive data, or admin functions. To operationalize it, define what “user-installed software” means in your scope, route it into an approved sandbox/VM container, and prove the confinement and least-privilege settings stay enforced. (NIST SP 800-53 Rev. 5 OSCAL JSON)

Key takeaways:

  • You must name the software categories covered (your org-defined parameter) and enforce confinement for them. (NIST SP 800-53 Rev. 5 OSCAL JSON)
  • “Confined” means isolation boundaries plus restricted privileges, not just “approved by IT.” (NIST SP 800-53 Rev. 5 OSCAL JSON)
  • Auditors look for durable evidence: configuration baselines, technical enforcement, and exception handling tied to specific software. (NIST SP 800-53 Rev. 5)

CM-7(6): confined environments with limited privileges requirement is a targeted enhancement to NIST’s least functionality expectations: if users can install software, you assume some of that software will be risky, unnecessary, or outright malicious. The control’s intent is simple: don’t let user-installed software run “on the metal” with broad rights. Put it in a box, and keep the box locked.

For a Compliance Officer, CCO, or GRC lead, the fastest path to “operationalized” is to treat CM-7(6) as a routing and enforcement problem: (1) decide which user-installed software is in scope, (2) constrain where it can execute (sandbox/VM/VDI/app container or dedicated kiosk host), (3) restrict privileges inside that environment, and (4) retain evidence that the confinement is real, consistently applied, and exceptions are controlled.

This page gives requirement-level guidance you can hand to endpoint engineering, IT operations, and security architecture, then audit against without guessing. Primary sources: NIST SP 800-53 Rev. 5 and the OSCAL catalog entry for cm-7.6. (NIST SP 800-53 Rev. 5; NIST SP 800-53 Rev. 5 OSCAL JSON)

Regulatory text

Requirement (verbatim excerpt): “Require that the following user-installed software execute in a confined physical or virtual machine environment with limited privileges: {{ insert: param, cm-07.06_odp }}.” (NIST SP 800-53 Rev. 5 OSCAL JSON)

Operator meaning: you must (a) specify which “user-installed software” types are covered (that’s the organization-defined parameter), and (b) implement a technical control so that software in that set only runs inside an isolated environment and does not receive broad permissions. Your job is not to ban the software category by policy alone; your job is to make the execution environment measurably safer through confinement and least privilege. (NIST SP 800-53 Rev. 5 OSCAL JSON)

Plain-English interpretation

CM-7(6) is a guardrail for the stuff users add: browser extensions, developer tools, freeware, plugins, scripting runtimes, unsigned binaries, and “portable” apps. You either block it, or you allow it only in a restricted environment that limits what it can touch.

“Confined physical or virtual machine environment” means an isolation boundary you can explain and evidence: a dedicated kiosk workstation, a hardened VDI pool, an application sandbox, a containerized runtime, or a disposable VM. “Limited privileges” means the software runs without local admin, without broad filesystem access, without unrestricted network reach, and without access to protected secrets unless explicitly authorized. (NIST SP 800-53 Rev. 5 OSCAL JSON)

Who it applies to (entity and operational context)

Entities: Federal information systems and contractor systems handling federal data commonly adopt NIST SP 800-53 controls, including CM-7(6). (NIST SP 800-53 Rev. 5)

Operational contexts where auditors expect a clear CM-7(6) story:

  • Endpoints where users can install applications (persistent admin rights, self-service portals, unmanaged plugin ecosystems).
  • Admin workstations and engineering laptops that frequently run third-party tools.
  • VDI/Citrix environments where “power users” request niche executables.
  • Systems that process sensitive federal data where user-installed code could exfiltrate or tamper with information.
  • Bring-your-own-tool scenarios (data science, DevOps, QA) where new runtimes appear constantly.

If your environment already blocks all user installs, CM-7(6) becomes an exception-management control: what happens when you do allow it, and how do you confine it when you must. (NIST SP 800-53 Rev. 5 OSCAL JSON)

What you actually need to do (step-by-step)

1) Define the scope parameter (the “cm-07.06_odp” list)

Write a short, explicit list of in-scope software categories for your environment. Keep it operational, not philosophical. Examples to consider:

  • Any executable not deployed via your enterprise software distribution
  • Any application installed by a non-admin user profile
  • Unsigned binaries or binaries from non-approved publishers
  • Scripting engines and package managers installed by users (where applicable)
  • Browser plugins/extensions outside an approved store

Your scope statement should answer: “If this software appears on an endpoint, does CM-7(6) require confinement?” (NIST SP 800-53 Rev. 5 OSCAL JSON)

2) Pick the confinement patterns you will standardize

Choose one or more enforceable patterns, then standardize them so you can audit them.

Common patterns that map cleanly to “confined environment”:

  • VDI or hardened remote app host for user-installed tools
  • Sandboxed application packaging (app sandbox/container runtime)
  • Ephemeral VM for testing unknown executables
  • Dedicated kiosk device for a risky but necessary tool

Document which pattern is approved for which software category, and who can authorize deviations. (NIST SP 800-53 Rev. 5)

3) Implement “limited privileges” inside the confined environment

Decide what “limited” means in your environment, then implement it as configuration, not a promise. Minimum expectations most assessors probe:

  • No local administrator for the user session running the tool
  • Restrict access to sensitive directories, tokens, and credential stores
  • Restrict clipboard / drive redirection for VDI if sensitive data could traverse
  • Control network egress from the confined environment (allow only required destinations)
  • Block access to production admin interfaces from the confined environment unless explicitly needed

Write these as testable requirements that endpoint/VDI teams can implement and you can verify. (NIST SP 800-53 Rev. 5 OSCAL JSON)

4) Force the routing: make “allowed execution” equal “confined execution”

This is where CM-7(6) succeeds or fails. If users can still run the same software outside the confined environment, you do not have a control, you have guidance.

Practical mechanisms include:

  • Application control rules that block execution on standard endpoints and allow it only on the sandbox/VDI host class
  • Conditional access posture checks that only permit the tool’s network dependencies from the confined segment
  • Enterprise software portals that publish “user-installed” tools only through a remote app channel
  • Device group policies that prevent installation outside the confined host group

Your compliance test should be simple: attempt to run an in-scope tool on a standard endpoint. It must fail or automatically redirect to the confined environment. (NIST SP 800-53 Rev. 5 OSCAL JSON)

5) Build an exception process you can defend

You will get edge cases: a research team needs a niche binary; an auditor asks why a specific tool runs locally; operations needs a temporary installer.

Create an exception workflow with:

  • Business justification
  • Risk review and compensating controls
  • Time-bound approval and review trigger
  • Evidence of confinement choice and privilege restrictions
  • Removal/rollback plan

Keep the exception list small and review it routinely. If exceptions become the norm, your scope or your confinement model is wrong. (NIST SP 800-53 Rev. 5)

6) Map ownership, procedure, and recurring evidence

Make CM-7(6) an owned control with a runbook and an evidence calendar. This is the fastest way to stay audit-ready: name the control owner, define the implementation procedure, and define what evidence you will capture on a recurring basis. Daydream can help you maintain this mapping as a requirement page tied to owners, tickets, and standing evidence requests, so you are not rebuilding proof during every assessment cycle. (NIST SP 800-53 Rev. 5 OSCAL JSON)

Required evidence and artifacts to retain

Keep evidence that proves (1) the scope, (2) the confinement design, and (3) the enforcement works.

Policy / governance

  • CM-7(6) control statement with the in-scope “user-installed software” parameter (the defined list) (NIST SP 800-53 Rev. 5 OSCAL JSON)
  • Standard(s) for approved confinement patterns and “limited privileges” definition (NIST SP 800-53 Rev. 5)

Technical design

  • Architecture diagram of confined environment(s): trust boundaries, identity, network paths, data flows
  • Baseline build document for the confined host/VDI image (hardened settings, installed agents, logging)

Technical enforcement

  • Application control configuration/rules showing block/allow conditions tied to device groups or execution contexts
  • VDI/remote app configuration: session privilege level, redirection controls, profile restrictions
  • Network controls for confined segment: allowlists, DNS policy, proxy rules (as applicable)

Operational proof

  • Sample test results (screenshots/logs) demonstrating an in-scope tool fails on standard endpoints and runs in the confined environment
  • List of approved user-installed software requests and how they were routed
  • Exception register with approvals, scope, and expiration

Monitoring

  • Logs that show execution events for in-scope tools inside the confined environment
  • Alerting rules or review notes for anomalous behavior from the confined segment

Common exam/audit questions and hangups

Assessors tend to focus on definitional clarity and technical enforceability:

  • “What exactly is ‘user-installed software’ here?” Show the scoped list and how you detect it. (NIST SP 800-53 Rev. 5 OSCAL JSON)
  • “Prove it runs only in the confined environment.” Demonstrate block rules and an execution test on a standard endpoint. (NIST SP 800-53 Rev. 5)
  • “What makes the environment ‘confined’?” Provide a boundary diagram and controls: segmentation, isolation, limited privileges. (NIST SP 800-53 Rev. 5 OSCAL JSON)
  • “Who approves exceptions and how long do they last?” Produce the exception workflow and recent examples.
  • “How do you know privileges are limited?” Show non-admin configuration, denied permissions, and relevant hardening settings.

Hangup to anticipate: teams often treat “virtual machine exists” as “confined.” Auditors will ask what prevents data movement, credential access, or privilege escalation from that VM/session. (NIST SP 800-53 Rev. 5)

Frequent implementation mistakes and how to avoid them

Mistake Why it fails Fix
Defining scope as “anything users install” with no examples Not testable, not auditable Publish a concrete list and decision rule for edge cases. (NIST SP 800-53 Rev. 5 OSCAL JSON)
Allowing local execution plus “recommended” sandbox Users bypass it Block local execution for in-scope software; allow only in confined hosts. (NIST SP 800-53 Rev. 5 OSCAL JSON)
Confined environment runs with admin rights for convenience Breaks “limited privileges” Enforce standard user context; use privilege elevation only for tightly controlled admin tasks. (NIST SP 800-53 Rev. 5)
No evidence cadence Scramble during audits Predefine recurring artifacts: configs, logs, exception register, test results. (NIST SP 800-53 Rev. 5)
Treating exceptions as permanent Scope drifts and risk grows Time-bound exceptions with re-approval and retirement plan.

Enforcement context and risk implications

No public enforcement cases were provided in the source catalog for this requirement, so this page does not list enforcement actions.

Risk-wise, CM-7(6) reduces the blast radius of user-installed code: it limits credential theft paths, lateral movement opportunities, and accidental data handling in unmanaged apps. From a compliance perspective, the biggest avoidable risk is an “evidence gap,” where the organization believes it confines risky tools but cannot show the scoped list, enforcement mechanism, and tests under assessment. (NIST SP 800-53 Rev. 5; NIST SP 800-53 Rev. 5 OSCAL JSON)

Practical 30/60/90-day execution plan

First 30 days (stabilize scope and choose the confinement standard)

  • Name the control owner and technical owners (endpoint, VDI, network, IAM).
  • Define the “user-installed software” scope parameter list and get sign-off. (NIST SP 800-53 Rev. 5 OSCAL JSON)
  • Select your default confinement pattern(s) and write a short standard: where it runs, how identity works, what logs are retained.
  • Draft the “limited privileges” baseline (non-admin, restricted access, egress controls as applicable). (NIST SP 800-53 Rev. 5)

By 60 days (enforce routing and prove it works)

  • Implement application control rules to block in-scope software outside confined hosts.
  • Stand up the confined environment baseline (VDI pool, sandbox host class, or VM template).
  • Run a tabletop plus a hands-on test: attempt local execution; capture logs/screenshots for evidence.
  • Implement an exception workflow and start an exception register.

By 90 days (operationalize and make it audit-ready)

  • Turn on routine reporting: what ran in the confined environment, what was blocked locally, what exceptions exist.
  • Add recurring evidence tasks to your GRC calendar (configs, sample logs, test reruns, exception review notes).
  • Validate that third parties and contractors using your endpoints follow the same confinement pathway where relevant.
  • In Daydream, map CM-7(6) to the control owner, procedure, and recurring artifacts so audits become a retrieval exercise, not a fire drill. (NIST SP 800-53 Rev. 5 OSCAL JSON)

Frequently Asked Questions

What counts as “user-installed software” for CM-7(6)?

The control requires you to define the in-scope set (the organization-defined parameter) and then enforce confinement for that set. Write it as a decision rule plus examples so endpoint teams can implement detection and routing. (NIST SP 800-53 Rev. 5 OSCAL JSON)

If we block all user installs, do we still need CM-7(6)?

You still need a documented position and an exception path. Auditors commonly ask how you handle necessary exceptions and whether any user-installed software can execute outside controlled environments. (NIST SP 800-53 Rev. 5)

Does “confined environment” have to be a VM?

No. The text allows a confined physical or virtual machine environment. The key is a defensible isolation boundary plus limited privileges you can evidence. (NIST SP 800-53 Rev. 5 OSCAL JSON)

What evidence is most persuasive in an audit?

Configurations that enforce the routing (block local, allow confined) plus a captured test showing the behavior, backed by the scoped software list and an exception register. Tie artifacts to owners and refresh them on a recurring cadence. (NIST SP 800-53 Rev. 5)

How do we handle developer tools that engineers need to install frequently?

Put those tools in your defined scope and provide a standard confined execution path (for example, dev VDI or sandboxed runtime) with limited privileges and controlled egress. Use exceptions only for truly temporary needs, and make them time-bound. (NIST SP 800-53 Rev. 5 OSCAL JSON)

What’s the fastest way to make CM-7(6) sustainable?

Assign a control owner, publish the scope list, standardize one confinement pattern, and predefine recurring evidence. Daydream helps by keeping the requirement, owners, procedures, and evidence requests in one place so the control stays “alive” between audits. (NIST SP 800-53 Rev. 5 OSCAL JSON)

Frequently Asked Questions

What counts as “user-installed software” for CM-7(6)?

The control requires you to define the in-scope set (the organization-defined parameter) and then enforce confinement for that set. Write it as a decision rule plus examples so endpoint teams can implement detection and routing. (NIST SP 800-53 Rev. 5 OSCAL JSON)

If we block all user installs, do we still need CM-7(6)?

You still need a documented position and an exception path. Auditors commonly ask how you handle necessary exceptions and whether any user-installed software can execute outside controlled environments. (NIST SP 800-53 Rev. 5)

Does “confined environment” have to be a VM?

No. The text allows a confined physical or virtual machine environment. The key is a defensible isolation boundary plus limited privileges you can evidence. (NIST SP 800-53 Rev. 5 OSCAL JSON)

What evidence is most persuasive in an audit?

Configurations that enforce the routing (block local, allow confined) plus a captured test showing the behavior, backed by the scoped software list and an exception register. Tie artifacts to owners and refresh them on a recurring cadence. (NIST SP 800-53 Rev. 5)

How do we handle developer tools that engineers need to install frequently?

Put those tools in your defined scope and provide a standard confined execution path (for example, dev VDI or sandboxed runtime) with limited privileges and controlled egress. Use exceptions only for truly temporary needs, and make them time-bound. (NIST SP 800-53 Rev. 5 OSCAL JSON)

What’s the fastest way to make CM-7(6) sustainable?

Assign a control owner, publish the scope list, standardize one confinement pattern, and predefine recurring evidence. Daydream helps by keeping the requirement, owners, procedures, and evidence requests in one place so the control stays “alive” between audits. (NIST SP 800-53 Rev. 5 OSCAL JSON)

Operationalize this requirement

Map requirement text to controls, owners, evidence, and review workflows inside Daydream.

See Daydream