Skip to content
System hardening
ASD ISMISM-1491

ASD ISM 1491 Block unprivileged users from running script execution engines

What it says

Unprivileged human users are prevented from running script execution engines, including: - Windows Script Host (cscript.exe and wscript.exe) - PowerShell (powershell.exe, powershell_ise.exe and pwsh.exe) - Command Prompt (cmd.exe) - Windows Management Instrumentation (wmic.exe) - Microsoft Hypertext Markup Language (HTML) Application Host (mshta.exe).

Quoted as published. Everything else on this page is written by Control Stack.

What it means

In plain English

Standard (non-admin) staff accounts must be technically blocked from launching Windows Script Host, PowerShell, Command Prompt, WMIC and mshta.exe.

Windows ships with several built-in tools that run scripts and commands: Windows Script Host (cscript.exe and wscript.exe), PowerShell (powershell.exe, powershell_ise.exe and pwsh.exe), Command Prompt (cmd.exe), the Windows Management Instrumentation command-line tool (wmic.exe) and the HTML Application Host (mshta.exe). Ordinary staff rarely need any of them to do their jobs, but attackers rely on them constantly. This control requires that unprivileged human users (everyday accounts that are not administrators) are prevented from running these five script execution engines. The block must apply to all of the listed executables, not just one or two of them. Why it matters: most phishing and malicious-document attacks do not deliver a traditional virus file. Instead they trick the user's machine into calling one of these trusted, already-installed tools to download and run the attacker's code, a technique often described as "living off the land". Because the tools are signed Microsoft binaries, antivirus tends to leave them alone. If a standard user account cannot launch them at all, a large class of malware chains simply fails at the first step, even when the user has clicked the link or opened the attachment.

Why it matters

If unprivileged users can run these script engines, a single opened attachment or malicious link can lead to PowerShell, WScript, mshta or WMIC being used to fetch and execute malware, harvest credentials, establish persistence and spread across the network, all under a normal user account and without tripping traditional file-based antivirus. Partial coverage (for example blocking PowerShell but leaving cmd.exe, wmic.exe or mshta.exe available) still leaves a working path for attackers.

How to implement

  1. The desktop or endpoint engineering team should build an application control rule set (for example AppLocker or Windows Defender Application Control) that explicitly denies cscript.exe, wscript.exe, powershell.exe, powershell_ise.exe, pwsh.exe, cmd.exe, wmic.exe and mshta.exe, and apply it to all standard user accounts while exempting only defined administrative groups.

  2. The identity or Active Directory team should define which security groups count as privileged for this purpose and scope the deny rules by group membership, so that the block follows the account rather than the device and cannot be dodged by logging on to another workstation.

  3. The endpoint team should deploy the policy in audit-only mode first, collect the block events for two to four weeks, and work with application owners to move any legitimate dependency (login scripts, software installers, monitoring agents) to run under a service or administrative context instead of the user's own account.

  4. The endpoint team should build the rules using publisher or hash conditions rather than path conditions, so that the block also covers alternate copies and locations of the engines (for example the SysWOW64 folder and any per-user PowerShell 7 installs) and renaming or copying the executable does not bypass it.

  5. The security operations team should forward application control block events to the central logging platform and set up a recurring review so that attempts by standard users to launch these engines are investigated and the policy is re-checked after each operating system feature update or new device image.

Keep it running

Day to day, this control is a standing configuration rather than a task. The block is typically enforced by an application control policy (such as AppLocker or Windows Defender Application Control) or by Group Policy restrictions scoped to non-administrative accounts, and it must cover every executable named in the statement: cscript.exe, wscript.exe, powershell.exe, powershell_ise.exe, pwsh.exe, cmd.exe, wmic.exe and mshta.exe.

Expect friction. Some line-of-business software, login scripts and help-desk tools call these engines behind the scenes, so the desktop team should keep a short register of legitimate exceptions and the way each has been handled (for example running the task under a service or administrative context rather than the user's account). Any exception should still leave the human user unable to launch the engine directly.

Watch for drift when new device images, software or operating system changes (for example a PowerShell 7 install adding pwsh.exe) or new organisational units are introduced. Block events from the enforcement tool should be reviewed periodically, both to catch attempted misuse and to spot business processes that are silently failing. Confirm the control on a sample of standard user sessions after any change to the policy.

Evidence and audit

  1. Check 1 of 5What an auditor asks for

    Ask for

    Ask for the current application control or Group Policy configuration that blocks script execution engines, including the list of executables it covers.

    Look at

    Check that all eight executables named in the control (cscript.exe, wscript.exe, powershell.exe, powershell_ise.exe, pwsh.exe, cmd.exe, wmic.exe, mshta.exe) appear as denied for standard users.

    Good evidence

    Every listed engine is explicitly denied for unprivileged users and the policy is enforced rather than left in audit-only mode.

  2. Check 2 of 5What an auditor asks for

    Ask for

    Ask which accounts or groups the policy applies to and which groups are exempt.

    Look at

    Compare the exempt groups against the organisation's definition of privileged users and check that ordinary staff accounts are not members of those groups.

    Good evidence

    The deny rules apply to all standard user accounts, and exemptions are limited to named administrative groups with a documented reason.

  3. Check 3 of 5What an auditor asks for

    Ask for

    Ask to observe or receive a live test from a standard user session attempting to launch each engine.

    Look at

    Watch whether each executable is actually blocked, including when launched from a Run dialog, from File Explorer or from a copied file in a user-writable folder.

    Good evidence

    All attempts fail with a block message for the standard user, while the same attempts succeed for an authorised administrative account.

  4. Check 4 of 5What an auditor asks for

    Ask for

    Ask for the register of exceptions and the change records for the policy over the past twelve months.

    Look at

    Look at whether exceptions allow a human user to run an engine directly, or whether they redirect the task to a service or administrative context, and whether changes were approved.

    Good evidence

    Exceptions are few, justified, time-bound where possible, and none of them give an unprivileged human user direct access to a listed engine.

  5. Check 5 of 5What an auditor asks for

    Ask for

    Ask for recent block-event logs or reports from the enforcement tool.

    Look at

    Check that events exist for the listed engines, are being collected centrally and show evidence of review or investigation.

    Good evidence

    Block events are logged, reviewed on a regular cycle, and any pattern of attempts is followed up rather than ignored.

Mappings

Closest match in ASD Essential Eight: E8-AC-ML1.3, Ensure only approved applications and scripts can run, which this control partially meets.

ISO 27001

ISO/IEC 27001: 1 mapping

  • A.8.18Use of privileged utility programsPartially overlaps
Essential Eight

ASD Essential Eight: 4 mappings

Mappings show how controls relate across frameworks. They do not imply full equivalence or certification.