Detection rules › Splunk

Exploit Public-Facing Fortinet FortiNAC CVE-2022-39952

Status
production
Severity
medium
Group by
Web.src, Web.status, Web.url_length, c-uri, c-useragent, cs-host, cs-method
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

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

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.

FieldKindValuesSearch
Web.urlin
  • "*configWizard/keyUpload.jsp*"
field:"c-uri" kind:in