03.13.13: Mobile Code
To meet the 03.13.13: mobile code requirement, you must control how “mobile code” (scripts, macros, applets, and similar executable content) is allowed to run in environments that handle CUI, and be able to prove those controls operate. Operationalize it by defining what counts as mobile code, setting allow/deny rules, enforcing them technically, and collecting repeatable evidence. (NIST SP 800-171 Rev. 3)
Key takeaways:
- Define “mobile code” for your environment and tie it to your CUI boundary so teams scope controls correctly. (NIST SP 800-171 Rev. 3)
- Enforce execution rules with technical controls (application control, browser hardening, macro/script policies), not policy-only statements. (NIST SP 800-171 Rev. 3)
- Retain assessor-ready artifacts: configuration baselines, exceptions with approvals, and monitoring outputs showing the rules work. (NIST SP 800-171 Rev. 3)
03.13.13: mobile code requirement work usually fails for one reason: organizations treat it like a “malware” control and stop at endpoint protection. Assessors typically expect something narrower and more provable: governance and enforcement over executable content that can arrive through documents, browsers, email, or embedded components, and then run in your environment with limited visibility.
For a CCO or GRC lead, the fastest path is to (1) get a crisp definition that fits your tech stack, (2) bind that definition to where CUI is processed, stored, or transmitted, (3) implement a default-deny posture for high-risk execution paths (common examples include Office macros and unsigned scripts), and (4) manage exceptions with documented approvals, time bounds, and compensating controls. Your evidence package should make it easy to answer two examiner questions: “What mobile code can run?” and “How do you know?” (NIST SP 800-171 Rev. 3)
This page is requirement-level guidance you can hand to IT and security teams as an execution checklist, while keeping it mapped to what a NIST SP 800-171 Rev. 3 assessment will ask you to show. (NIST SP 800-171 Rev. 3)
Regulatory text
Requirement: “NIST SP 800-171 Rev. 3 requirement 03.13.13 (Mobile Code).” (NIST SP 800-171 Rev. 3)
Operator interpretation of the text: You are expected to control the use of mobile code in systems that handle CUI. Practically, this means you must (a) identify the mobile-code-capable technologies you run, (b) set conditions under which they are allowed or blocked, (c) enforce those conditions through configuration and tooling, and (d) maintain evidence that enforcement is in place and exceptions are managed. (NIST SP 800-171 Rev. 3)
Plain-English interpretation (what the requirement is really asking)
“Mobile code” is executable content that can be delivered as part of another object or session and then run on an endpoint or within a runtime environment. In most real environments, your assessment scope includes at least:
- Document-borne execution: Office macros, embedded scripts, PDF actions.
- Browser-borne execution: JavaScript and browser extensions/add-ons (especially in admin workflows).
- OS and admin scripting: PowerShell, shell scripts, Python, batch files, scheduled tasks.
- Application plug-ins and embedded runtimes: custom add-ins, embedded applets, or workflow automation that executes code.
The requirement is not asking you to “ban scripting.” It is asking you to make execution intentional: approved sources, signed code where possible, constrained runtimes, and measurable enforcement. (NIST SP 800-171 Rev. 3)
Who it applies to (entity and operational context)
This applies to:
- Federal contractors and other organizations operating nonfederal systems that handle CUI, including subsidiaries and managed environments where CUI is processed, stored, or transmitted. (NIST SP 800-171 Rev. 3)
- CUI boundary systems and supporting services, such as endpoints used by engineering, program management, finance (if CUI touches it), shared file services, VDI, jump boxes, and admin workstations. (NIST SP 800-171 Rev. 3)
- Third parties who access or operate your CUI environment (MSPs, SaaS admins, outsourced IT). Treat their access paths as part of your “mobile code” exposure, because their tooling frequently runs scripts and browser-based admin functions. (NIST SP 800-171 Rev. 3)
Scoping rule that keeps you honest: if a device can open CUI documents, browse CUI portals, or administer CUI systems, mobile code controls must be enforced there. (NIST SP 800-171 Rev. 3)
What you actually need to do (step-by-step)
1) Define “mobile code” for your environment (and freeze the definition)
Create a short standard that answers:
- What you classify as mobile code (macros, scripts, browser code, extensions, plug-ins).
- What’s explicitly out-of-scope (for example, compiled signed applications distributed via your software deployment process), if you can defend it.
- What control objective you enforce (default deny, allow-list, signed-only, or restricted contexts). (NIST SP 800-171 Rev. 3)
Deliverable: Mobile Code Standard referenced by your system security plan and security policies. (NIST SP 800-171 Rev. 3)
2) Inventory mobile-code execution paths inside the CUI boundary
You need an inventory that is useful for enforcement, not a generic asset list:
- Endpoint types: user workstations, engineering workstations, admin workstations, VDI.
- Execution surfaces: Office macro settings, script interpreters, browser extension policies, local admin rights.
- High-risk apps: PDF readers, Office, browsers, RPA tools, IDEs, terminal tools. (NIST SP 800-171 Rev. 3)
Deliverable: “Mobile Code Surfaces” register tied to your CUI system inventory. (NIST SP 800-171 Rev. 3)
3) Set an enforcement policy: default-deny where feasible, constrained allow where needed
A workable ruleset most assessors can follow:
- Office macros: block by default; allow only signed macros or macros from controlled locations; require exception approvals for legacy workflows.
- Scripts (PowerShell/shell/Python): restrict to signed scripts or approved repositories; block execution from temp/user download paths; limit who can run administrative scripts.
- Browsers: manage extensions via allow-list; restrict developer tools or privileged browser profiles on admin endpoints; separate admin browsing from general browsing.
- Application control: allow-list known-good executables; block untrusted binaries and common “living off the land” execution chains where your tooling supports it. (NIST SP 800-171 Rev. 3)
If IT pushes back, ask one scoping question: “Does this code path touch CUI?” If yes, it needs enforceable conditions and evidence. (NIST SP 800-171 Rev. 3)
4) Implement technical controls and align them to the written standard
Your control should be visible in configuration:
- Centralized configuration enforcement (MDM, GPO, endpoint management) for macro and script settings.
- Endpoint security controls that can enforce application control and script restrictions.
- Browser policy management for extension control and security settings.
- Segmentation for admin workstations and privileged sessions (reduces mobile-code blast radius). (NIST SP 800-171 Rev. 3)
Deliverable: Baseline configurations for each endpoint class in scope. (NIST SP 800-171 Rev. 3)
5) Build an exceptions workflow that is assessor-proof
Exceptions are normal. Uncontrolled exceptions fail assessments.
- Require: business justification, data sensitivity context (CUI use-case), risk review, compensating controls, approval, and an expiration date.
- Track: system/asset owner, affected users/devices, and the exact setting being overridden.
- Revalidate: remove or renew exceptions on a regular governance cadence you define. (NIST SP 800-171 Rev. 3)
Deliverable: Exception register + approvals (tickets or GRC records). (NIST SP 800-171 Rev. 3)
6) Monitor and prove operation (don’t rely on “configured once”)
Collect evidence that shows the control still works:
- Reports from endpoint management showing macro/script policies applied.
- Alerts or logs for blocked script execution, blocked macros, and policy violations.
- Spot checks against your baseline on a defined cadence. (NIST SP 800-171 Rev. 3)
Deliverable: Recurring evidence pack with time-stamped outputs. (NIST SP 800-171 Rev. 3)
7) Map the requirement to your compliance system (SSP/POA&M and evidence collection)
For assessment readiness, document:
- Where 03.13.13 is implemented (systems, endpoints, control owners).
- What tools enforce it.
- What gaps remain and how you’ll close them. (NIST SP 800-171 Rev. 3)
This is where Daydream fits naturally: track the requirement-to-control mapping, assign owners, and schedule recurring evidence requests so you have a clean 03.13.13 audit trail without scrambling. (NIST SP 800-171 Rev. 3)
Required evidence and artifacts to retain
Keep artifacts that answer “defined, enforced, monitored, exceptions managed”:
- Mobile Code Standard approved and versioned. (NIST SP 800-171 Rev. 3)
- CUI boundary scope statement and in-scope endpoint classes. (NIST SP 800-171 Rev. 3)
- Configuration baselines (screenshots/exports) for:
- Office macro settings
- Script execution controls
- Browser extension policies
- Application control policies (if used) (NIST SP 800-171 Rev. 3)
- Deployment/compliance reports showing policies applied across in-scope assets. (NIST SP 800-171 Rev. 3)
- Exception register with approvals and expirations. (NIST SP 800-171 Rev. 3)
- Monitoring outputs: SIEM queries, endpoint security events, or periodic audit logs tied to mobile-code controls. (NIST SP 800-171 Rev. 3)
- Training/communications targeted to users who commonly trigger mobile code (finance, engineering, project teams), if you issue guidance as part of rollout. (NIST SP 800-171 Rev. 3)
Common exam/audit questions and hangups
Auditors and assessors commonly press on:
- “Define mobile code in your environment. What’s included?” (NIST SP 800-171 Rev. 3)
- “Show me the technical control that blocks or restricts macros.” (NIST SP 800-171 Rev. 3)
- “Who can run scripts? How do you prevent random user execution?” (NIST SP 800-171 Rev. 3)
- “How do you manage browser extensions and plug-ins?” (NIST SP 800-171 Rev. 3)
- “Show exceptions. Are they time-bounded? Who approved them?” (NIST SP 800-171 Rev. 3)
- “How do you know the policy remains enforced across endpoints in scope?” (NIST SP 800-171 Rev. 3)
Hangup to anticipate: teams present an endpoint AV console screenshot. That rarely answers “control the use of mobile code” unless it clearly enforces script/macro controls and you can show policy coverage. (NIST SP 800-171 Rev. 3)
Frequent implementation mistakes (and how to avoid them)
- No definition, just tooling. Fix: publish a short standard that names specific mobile code types you control and where. (NIST SP 800-171 Rev. 3)
- Relying on “user training” to avoid macros. Fix: enforce macro settings centrally; keep training as supporting control. (NIST SP 800-171 Rev. 3)
- Exceptions via email or chat. Fix: require ticketed approvals with expiration and compensating controls. (NIST SP 800-171 Rev. 3)
- Scope mismatch. Fix: tie controls to the CUI boundary and privileged access paths; document any segmentation decisions. (NIST SP 800-171 Rev. 3)
- One-and-done configuration. Fix: collect recurring compliance reports and review drift. (NIST SP 800-171 Rev. 3)
Enforcement context and risk implications
No public enforcement cases were provided in the source catalog for this requirement, so this page does not cite specific case outcomes.
Operational risk is straightforward: mobile code is a common execution path for initial access and lateral movement. For CUI environments, weak control over macros, scripts, and plug-ins increases the chance that CUI systems become the entry point or the impact zone. The compliance risk is also predictable: even if your security team “generally blocks malware,” an assessment can still fail if you cannot show defined conditions for mobile code use and repeatable evidence of enforcement. (NIST SP 800-171 Rev. 3)
Practical 30/60/90-day execution plan
First 30 days (stabilize scope and decisions)
- Publish a one-page Mobile Code Standard with in-scope code types and enforcement intent. (NIST SP 800-171 Rev. 3)
- Identify CUI endpoints and admin workstations; list mobile-code execution surfaces for each. (NIST SP 800-171 Rev. 3)
- Decide default positions for macros, scripting, and browser extensions; document where business needs require exceptions. (NIST SP 800-171 Rev. 3)
- Stand up an exception workflow (ticket + approver + expiration + compensating controls). (NIST SP 800-171 Rev. 3)
By 60 days (implement and prove coverage)
- Push centralized configuration for macro controls and browser extension governance across in-scope endpoints. (NIST SP 800-171 Rev. 3)
- Implement script controls appropriate to your environment (signing where feasible, restriction policies, admin separation). (NIST SP 800-171 Rev. 3)
- Produce your first evidence pack: baselines + policy deployment reports + exception register export. (NIST SP 800-171 Rev. 3)
By 90 days (operationalize and make it repeatable)
- Add monitoring and periodic review for drift: blocked events, policy noncompliance, new extensions, new interpreters. (NIST SP 800-171 Rev. 3)
- Reconcile exceptions: close what you can, strengthen compensating controls for what remains. (NIST SP 800-171 Rev. 3)
- In Daydream (or your GRC system), schedule recurring evidence collection and control-owner attestations for 03.13.13 so audit readiness is continuous, not seasonal. (NIST SP 800-171 Rev. 3)
Frequently Asked Questions
What counts as “mobile code” for 03.13.13 in a typical enterprise?
Treat it as executable content delivered through documents, browsers, scripts, and plug-ins (macros, JavaScript contexts, extensions, PowerShell/shell/Python, and app add-ins). Document your definition and apply it to the CUI boundary. (NIST SP 800-171 Rev. 3)
Do we have to block all Office macros to meet the 03.13.13: mobile code requirement?
You need controlled conditions for macro execution and evidence they’re enforced. Many teams block by default and allow signed or tightly scoped macros via exceptions. (NIST SP 800-171 Rev. 3)
How do we handle developers or engineers who legitimately need scripts?
Separate roles and endpoints where possible, restrict admin scripting to privileged contexts, and manage scripts through approved repositories with change control and approvals. Track exceptions where restrictions must be relaxed. (NIST SP 800-171 Rev. 3)
Are browser scripts like JavaScript “mobile code” we must disable?
You don’t need to disable core web functionality, but you should control higher-risk elements like unmanaged extensions, privileged browser profiles, and admin browsing on sensitive endpoints. Document what you control and show enforcement. (NIST SP 800-171 Rev. 3)
What evidence is strongest in an assessment?
Versioned policy/standard, exported configuration baselines, deployment compliance reports across in-scope endpoints, and a clean exception register with approvals and expirations. Pair that with monitoring outputs or logs that show enforcement. (NIST SP 800-171 Rev. 3)
How should third parties be handled if they administer our CUI environment?
Treat their access path as in-scope: require controlled endpoints or VDI, restrict scripts/macros/extensions in those sessions, and retain evidence that the same mobile code rules apply to third-party-administered workflows. (NIST SP 800-171 Rev. 3)
Frequently Asked Questions
What counts as “mobile code” for 03.13.13 in a typical enterprise?
Treat it as executable content delivered through documents, browsers, scripts, and plug-ins (macros, JavaScript contexts, extensions, PowerShell/shell/Python, and app add-ins). Document your definition and apply it to the CUI boundary. (NIST SP 800-171 Rev. 3)
Do we have to block all Office macros to meet the 03.13.13: mobile code requirement?
You need controlled conditions for macro execution and evidence they’re enforced. Many teams block by default and allow signed or tightly scoped macros via exceptions. (NIST SP 800-171 Rev. 3)
How do we handle developers or engineers who legitimately need scripts?
Separate roles and endpoints where possible, restrict admin scripting to privileged contexts, and manage scripts through approved repositories with change control and approvals. Track exceptions where restrictions must be relaxed. (NIST SP 800-171 Rev. 3)
Are browser scripts like JavaScript “mobile code” we must disable?
You don’t need to disable core web functionality, but you should control higher-risk elements like unmanaged extensions, privileged browser profiles, and admin browsing on sensitive endpoints. Document what you control and show enforcement. (NIST SP 800-171 Rev. 3)
What evidence is strongest in an assessment?
Versioned policy/standard, exported configuration baselines, deployment compliance reports across in-scope endpoints, and a clean exception register with approvals and expirations. Pair that with monitoring outputs or logs that show enforcement. (NIST SP 800-171 Rev. 3)
How should third parties be handled if they administer our CUI environment?
Treat their access path as in-scope: require controlled endpoints or VDI, restrict scripts/macros/extensions in those sessions, and retain evidence that the same mobile code rules apply to third-party-administered workflows. (NIST SP 800-171 Rev. 3)
Operationalize this requirement
Map requirement text to controls, owners, evidence, and review workflows inside Daydream.
See Daydream