CVE-2023-4996
Executive Summary
CVE-2023-4996 is a local privilege escalation vulnerability in the Netskope NSClient (endpoint agent) for Windows, affecting version 100 and prior. A malicious non-admin user can exploit a Windows ServiceController permission-validation flaw to execute privileged user control code that terminates the NSClient service, effectively disabling the security agent. The vulnerability carries a CVSS score of 6.6 (Medium-High), and Netskope has released a fix in R101; however, patch confirmation is based on a single vendor claim and has not been independently verified. Because the attack is local (requires a non-admin user account on the endpoint), the primary risk is to enterprise environments where endpoint agents protect regulated or high-value workstations — an attacker who can disable NSClient can evade the security controls that monitor their activity.
Note on CVSS vector: The official NVD record lists a CVSS score of 6.6 but does not publish the explicit vector string. The vector above is an analytical reconstruction consistent with the score and the vulnerability class (local, low-complexity, privilege-required, no interaction, high impact on confidentiality/integrity/availability). This reconstruction should not be treated as an authoritative vendor-stated vector.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The NVD description identifies the root cause as a user control code that failed to validate the permissions of the calling user before being executed through a Windows ServiceController. The following can be deduced from the description with high confidence:
Attack surface: The vulnerability resides in a component of the Netskope NSClient that is invoked via the Windows Service Control Manager (the ServiceController mechanism). The affected code is reachable by a non-admin user — meaning the code path itself must be accessible from a low-integrity or medium-integrity process.
Flaw class — Improper authorization: The core defect is that the user control code (a section of code that handles user-provided input or commands) does not verify whether the caller has the appropriate Windows privileges or permissions before performing a privileged operation. In this case, the privileged operation is terminating the NSClient service.
Mechanism: The description states the "user control code had permissions to terminate the NSClient service." This indicates that the code in question runs in a security context that holds the SE_DEBUG / SERVICE_STOP privilege (or the process token has sufficient rights to call
ControlServicewithSERVICE_CONTROL_STOP). Because the code fails to validate that the initiating user is an administrator, a crafted call from a low-privileged user results in the service being stopped — a classic confused deputy pattern.Crafted package: The attack requires a "specially-crafted package." This likely refers to a crafted argument, serialized input, or command payload delivered to the NSClient (e.g., via a named pipe, IPC channel, or a command-line interface) that triggers the user control code path with a command intended to stop the service. The NVD description does not expose the exact transport or input format.
Windows service model: Windows services that expose operations to local clients (e.g., via named pipes, RPC, or a .NET ServiceController wrapper) typically require explicit access checks. If the service's access control list (DACL) permits
SERVICE_STOPto interactive users, or if the service exposes an API that a low-privileged user can call to reach privileged user control code, the flaw manifests.
Insufficient technical detail: The NVD description does not disclose the specific function names, class names, named pipe endpoints, or command-line arguments involved. No exploit code or PoC is publicly available. Consequently, the precise trigger path cannot be enumerated beyond what is stated above. What is unambiguous: a non-admin user can cause the NSClient service to terminate, defeating the security agent's monitoring.
Why Shodan dorking is inapplicable: NSClient is an endpoint agent — it does not expose an internet-facing TCP service that can be fingerprinted by network scanners. The n/a dorks reflect that this vulnerability is not remotely discoverable via network reconnaissance. Identification of vulnerable hosts requires endpoint inventory tools (e.g., EDR, CMDB, Windows registry enumeration of the installed NSClient version).
Exploitation Scenarios
The following attack chain is inferred strictly from the NVD description. No public PoC exists; details are at the vulnerability-class level.
Prerequisites:
- Attacker has a valid non-admin, non-privileged user account on the Windows endpoint.
- Endpoint runs Netskope NSClient version 100 or earlier.
- NSClient service is present and running.
Step 1 — Reconnaissance / target identification: The attacker enumerates their local environment to confirm the Netskope NSClient is running (e.g., checking running services via sc query, task manager, or Get-Service PowerShell cmdlet — generic Windows enumeration, no vulnerability-specific tooling). The attacker confirms their own privilege level is non-administrative.
Step 2 — Triggering the flawed code path: The attacker crafts a package (malicious input payload) that invokes the NSClient user control code via the Windows ServiceController. Because the vulnerable code does not validate the caller's permissions, the request is processed even though the caller is non-admin. The exact transport — whether a named pipe, local IPC, COM interface, or command-line argument — is not disclosed in the NVD description and remains unknown.
Step 3 — Payload / execution method: The crafted package instructs the user control code to perform an operation that terminates the NSClient service. The user control code — running with sufficient privileges to stop the service — executes the termination without verifying that the calling user possesses the required authorization.
Step 4 — Post-exploitation impact: The NSClient service stops, leaving the endpoint without Netskope security monitoring (e.g., no web filtering, no data-loss prevention, no traffic inspection). The service may or may not auto-restart, depending on the Windows service recovery configuration. If the service does not recover automatically, the attacker gains a persistent window of unprotected activity — downloads, data exfiltration, or malicious execution can proceed without agent oversight. Importantly, this is a denial-of-security-control privilege escalation: the attacker does not gain admin rights directly, but they remove the control that might detect their subsequent malicious actions. In a chained attack, a disabling of the NSClient could precede second-stage malware deployment.
Clarity note: This is not a remote attack. The CVSS vector and NVD description both indicate a local attack vector (AV:L). Network-based detection signatures are therefore not applicable at the exploit-trigger stage; detection must focus on Host Intrusion Detection (HIDS) / EDR telemetry — service termination events and unusual local process behavior.
Impact Assessment
Confidentiality / Integrity: An attacker who disables NSClient escapes monitoring that is designed to enforce data-loss prevention (DLP) and secure web gateway (SWG) policies. Sensitive data can be transmitted outside policy without the agent logging or blocking it, and malicious executable content can be introduced without policy enforcement.
Availability: The direct impact is denial of the security control — NSClient stops functioning. If the service termination is not detected and the service fails to restart, the endpoint remains unprotected indefinitely.
Affected systems: All Windows endpoints running NSClient <= 100. The severity is uniform across industries but most acute in regulated environments (financial services, healthcare, government) where continuous security agent coverage is a compliance requirement.
Blast radius: The attack is local and single-host. However, because the attacker needs only a low-privileged account, the risk scales with user population — in large enterprises, the probability that at least one non-admin user is compromised or malicious is significant. Once one endpoint's NSClient is disabled, that host can serve as a beachhead for lateral movement.
CVSS subscore interpretation (score 6.6): With a reconstructed vector of AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, the score reflects that availability of the security control is the primary loss, with secondary confidentiality/integrity risks arising from the removal of monitoring. The medium score reflects the local requirement and the fact that the attacker already needs an account on the machine.
Detection Guidance
Sigma Rule
title: Netskope NSClient Service Termination by Non-Admin User (CVE-2023-4996)
id: 9f2b0f7a-7c20-4e6f-b3aa-8d1c4e0e91f3
status: experimental
description: Detects suspicious termination of the Netskope NSClient service (nsclient) from a non-elevated process, potentially indicating CVE-2023-4996 exploitation.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2023-4996
author: Valtersit Threat Intelligence
date: 2024/01/15
logsource:
product: windows
service: security
category: process_creation
detection:
selection_service_stop:
EventID: 1100 # Windows Filtering Platform / service events may vary; SOC should adjust
# Alternative: System/7045 (new service) or System/7036 (service state change)
selection_nsclient:
ServiceName:
- 'nsclient'
- 'Netskope Client'
- 'netskope*'
selection_process:
IntegrityLevel:
- 'Medium'
- 'Low'
User:
- 'NT AUTHORITY\\LOCAL SERVICE' # exclude expected service accounts if needed
condition: selection_service_stop and selection_nsclient and selection_process
falsepositives:
- Legitimate admin-initiated service stop during maintenance or uninstall
- Service Manager restart operations
level: high
tags:
- attack.privilege_escalation
- attack.t1068
- cve.2023-4996
YARA Rule
rule CVE_2023_4996_Netskope_NSClient_Exploit_Packages
{
meta:
author = "Valtersit Threat Intelligence"
description = "Detects crafted packages targeting Netskope NSClient permission-validation bypass (CVE-2023-4996)"
date = "2024-01-15"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2023-4996"
strings:
$s1 = "netskope" nocase
$s2 = "nsclient" nocase
$s3 = "servicestop" nocase
$s4 = "controlservice" nocase
$s5 = "servicecontroller" nocase
$s6 = "stop" nocase
condition:
(uint16(0) == 0x5A4D or uint32(0) == 0x464C457F) and
2 of ($s1, $s2) and 1 of ($s3, $s4, $s5) and $s6
}
Note: The YARA rule is intentionally generic — it flags PE binaries or scripts that reference both Netskope client identifiers and service-stop primitives. Because no public PoC exists, this rule is a heuristic pattern, not a byte-level signature of a known exploit binary.
Suricata IDS Rule
alert ip any any -> any any (msg:"CVE-2023-4996 Netskope NSClient - Service Termination Attempt via IPC"; flow:established; content:"netskope"; nocase; content:"nsclient"; nocase; content:"stop"; nocase; reference:cve,2023-4996; classtype:attempted-admin; sid:1004996; rev:1;)
Operational caveat: This is a local, host-side vulnerability. Network telemetry will rarely observe the trigger. The Suricata rule above is provided for completeness but has low expected efficacy. SOC should rely primarily on the Windows host-based rules below.
Elastic Detection
// Detect NSClient service stop events correlated with low-integrity process attempt
sequence by host.name with maxspan=1m
[process where event.type == "start" and
process.name : "*cmd*" or process.name : "powershell.exe" or process.name : "wmic.exe"
and process.Ext.integrity_level in ("Medium", "Low")]
[event.action == "stop" and
winlog.event_id == 7036 and
winlog.provider_name == "Service Control Manager" and
winlog.event_data.param1 : "*netskope*"]
Splunk SPL Query
index=windows sourcetype=WinEventLog:System
EventCode=7036
Message="*netskope*"
OR (EventCode=1100 Message="*netskope*")
OR (EventCode=7045 Message="*netskope*")
| where match(Message, "(?i)stop")
| eval user=coalesce(User, "N/A")
| table _time, host, Message, user
| search NOT user="*ADMIN*" AND NOT user="*SYSTEM*" AND NOT user="*SERVICE*"
| sort -_time
Wazuh OSSEC Rule
<group name="netskope,">
<rule id="298582" level="10">
<if_sid>530</if_sid>
<match>netskope</match>
<description>CVE-2023-4996: Netskope NSClient service reported stopped - potential local privilege escalation exploitation</description>
<group>privilege_escalation,attack.t1068,</group>
<mitre>
<id>T1068</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 2/4 (CLAIMED). Netskope states the issue is fixed in Release R101 or greater. The patch is not independently confirmed; there are no third-party advisories, no disassembly analysis, and no public technical write-up corroborating the fix.
Immediate mitigations (priority order):
- Upgrade all Windows endpoints running Netskope NSClient to version R101 or greater. Obtain the installer from "Download Netskope Client and Scripts" on Netskope Support (https://support.netskope.com/s/article/Download-Netskope-Client-and-Scripts).
- If immediate upgrade is infeasible, restrict the NSClient service's Windows DACL to ensure that non-admin users cannot issue
SERVICE_STOPorSERVICE_CONTROLrequests. Apply a GPO to modify the service security descriptor such that onlySYSTEMand local administrators have stop permission. Note: this is a compensating control — it does not fix the code defect but blocks the known privilege-abuse path. - Audit local accounts: review and remove unnecessary non-admin interactive users on high-value endpoints.
Patch / upgrade steps:
- Test R101 in a staging environment representing your standard Windows image.
- Deploy via enterprise software management tool (SCCM, Intune, or equivalent) with a phased rollout.
- Post-upgrade, verify version via the NSClient UI or registry key
HKLM\SOFTWARE\Netskope\NSClient\Version. - Roll back plan: retain the prior installer in case R101 introduces regression.
Long-term hardening:
- Monitor the vendor advisory page for an updated CNA notice confirming the patch and disclosing root-cause details (function names, affected DLLs, CVE fix commit). Re-assess once independent analysis is available.
- Establish host-based detection rules (Sigma/EQL above) in your SIEM to flag any NSClient service stop events originating from non-admin processes.
- Add a service-restart watchdog: configure Windows Service Recovery for NSClient such that the service auto-restarts on failure; alert on any crash-loop pattern.
- Operate under the assumption that a non-admin user on a domain-joined endpoint can disable the agent until the upgrade is complete — apply stricter local execution policies (AppLocker/WDAC) to reduce the likelihood of a malicious package being delivered.
References
- NVD Entry — CVE-2023-4996: https://nvd.nist.gov/vuln/detail/CVE-2023-4996 (NVD description, CVSS 6.6, sole CNA source)
- Netskope Vendor Advisory / Download Portal: https://support.netskope.com/s/article/Download-Netskope-Client-and-Scripts (Referenced by CNA as the source for R101 upgrade instructions; no standalone security advisory page identified)
- ATT&CK Technique — T1068 Exploitation for Privilege Escalation: https://attack.mitre.org/techniques/T1068/ (Context for the attack pattern)
- MITRE CWE-269 — Improper Privilege Management: https://cwe.mitre.org/data/definitions/269.html (Flaw classification reference)
Exploit-in-the-wild / threat actor notes: No public PoC, no exploit code, and no observed threat-actor campaigns have been identified as of the last NVD update. EPSS score of 0.00380 (31st percentile) indicates a low predicted exploitation probability in the near term. CISA has not added CVE-2023-4996 to the Known Exploited Vulnerabilities (KEV) catalog. Security teams should still prioritize patching given the trivial impact on security-control availability for any malicious insider or compromised low-privilege account.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.