Detection rules › Splunk
Exploit Public-Facing Fortinet FortiNAC CVE-2022-39952
The following analytic detects attempts to exploit the Fortinet FortiNAC CVE-2022-39952 vulnerability. It identifies HTTP POST requests to the URI configWizard/keyUpload.jsp with a payload.zip file. The detection leverages the Web datamodel, analyzing fields such as URL, HTTP method, and user agent. This activity is significant as it indicates an attempt to exploit a known vulnerability, potentially leading to remote code execution. If confirmed malicious, attackers could gain control over the affected system, schedule malicious tasks, and establish persistent access via a remote command and control (C2) server.
Known false positives
- False positives may be present. Modify the query as needed to POST, or add additional filtering (based on log source).
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Persistence |
Rule body
name: Exploit Public-Facing Fortinet FortiNAC CVE-2022-39952
id: 2038f5c6-5aba-4221-8ae2-ca76e2ca8b97
version: 11
creation_date: '2023-02-21'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: |
The following analytic detects attempts to exploit the Fortinet FortiNAC CVE-2022-39952 vulnerability. It identifies HTTP POST requests to the URI configWizard/keyUpload.jsp with a payload.zip file.
The detection leverages the Web datamodel, analyzing fields such as URL, HTTP method, and user agent.
This activity is significant as it indicates an attempt to exploit a known vulnerability, potentially leading to remote code execution.
If confirmed malicious, attackers could gain control over the affected system, schedule malicious tasks, and establish persistent access via a remote command and control (C2) server.
data_source:
- Palo Alto Network Threat
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Web WHERE
Web.url IN ("*configWizard/keyUpload.jsp*")
BY Web.http_user_agent Web.status
Web.http_method Web.url Web.url_length
Web.src Web.dest
| `drop_dm_object_name("Web")`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `exploit_public_facing_fortinet_fortinac_cve_2022_39952_filter`
how_to_implement: |
This detection requires the Web datamodel to be populated from a supported Technology Add-On like Splunk for Apache, Splunk for Nginx, or Splunk for Palo Alto.
known_false_positives: |
False positives may be present. Modify the query as needed to POST, or add additional filtering (based on log source).
references:
- https://github.com/horizon3ai/CVE-2022-39952
- https://www.horizon3.ai/fortinet-fortinac-cve-2022-39952-deep-dive-and-iocs/
- https://viz.greynoise.io/tag/fortinac-rce-attempt?days=30
finding:
title: Potential CVE-2022-39952 against a Fortinet NAC may be occurring against $dest$.
entity:
field: dest
type: system
score: 50
analytic_story:
- Fortinet FortiNAC CVE-2022-39952
- Hellcat Ransomware
asset_type: Network
cve:
- CVE-2022-39952
mitre_attack_id:
- T1190
- T1133
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: web
security_domain: network
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Web WHERE
Web.url IN ("*configWizard/keyUpload.jsp*")
BY Web.http_user_agent Web.status
Web.http_method Web.url Web.url_length
Web.src Web.dest
Stage 2: search
| `drop_dm_object_name("Web")`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `exploit_public_facing_fortinet_fortinac_cve_2022_39952_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Web.url | in |
| field:"c-uri" kind:in |