Detection rules › Splunk

F5 BIG-IP iControl REST Vulnerability CVE-2022-1388

Status
production
Severity
medium
Group by
Web.src, 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 F5 BIG-IP iControl REST API vulnerability (CVE-2022-1388) for unauthenticated remote code execution. It identifies suspicious URI paths and POST HTTP methods, along with specific request headers containing potential commands in the utilcmdargs field and a random base64 encoded value in the X-F5-Auth-Token field. This activity is significant as it targets a critical vulnerability that can allow attackers to execute arbitrary commands on the affected system. If confirmed malicious, this could lead to full system compromise and unauthorized access to sensitive data.

MITRE ATT&CK coverage

Rule body splunk

name: F5 BIG-IP iControl REST Vulnerability CVE-2022-1388
id: bb1c2c30-107a-4e56-a4b9-1f7022867bfe
version: 10
creation_date: '2022-05-10'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: |
    The following analytic detects attempts to exploit the F5 BIG-IP iControl REST API vulnerability (CVE-2022-1388) for unauthenticated remote code execution.
    It identifies suspicious URI paths and POST HTTP methods, along with specific request headers containing potential commands in the `utilcmdargs` field and a random base64 encoded value in the `X-F5-Auth-Token` field.
    This activity is significant as it targets a critical vulnerability that can allow attackers to execute arbitrary commands on the affected system.
    If confirmed malicious, this could lead to full system compromise and unauthorized access to sensitive data.
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="*/mgmt/tm/util/bash*"
    Web.http_method="POST"
    BY Web.http_user_agent 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)`
    | `f5_big_ip_icontrol_rest_vulnerability_cve_2022_1388_filter`
how_to_implement: |
    To successfully implement this search, you need to be ingesting web or proxy logs, or ensure it is being filled by a proxy like device, into the Web Datamodel. For additional filtering, allow list private IP space or restrict by known good.
known_false_positives: |
    False positives may be present if the activity is blocked or was not successful. Filter known vulnerability scanners. Filter as needed.
references:
    - https://github.com/dk4trin/templates-nuclei/blob/main/CVE-2022-1388.yaml
    - https://www.randori.com/blog/vulnerability-analysis-cve-2022-1388/
    - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1388
    - https://twitter.com/da_667/status/1523770267327250438?s=20&t=-JnB_aNWuJFsmcOmxGUWLQ
    - https://github.com/horizon3ai/CVE-2022-1388/blob/main/CVE-2022-1388.py
drilldown_searches:
    - name: View the detection results for - "$dest$"
      search: '%original_detection_search% | search  dest = "$dest$"'
      earliest_offset: $info_min_time$
      latest_offset: $info_max_time$
    - name: View risk events for the last 7 days for - "$dest$"
      search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$") | stats count min(_time) as firstTime max(_time) as lastTime values(search_name) as "Search Name" values(risk_message) as "Risk Message" values(analyticstories) as "Analytic Stories" values(annotations._all) as "Annotations" values(annotations.mitre_attack.mitre_tactic) as "ATT&CK Tactics" by normalized_risk_object | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`'
      earliest_offset: 7d
      latest_offset: "0"
finding:
    title: An attempt to exploit CVE-2022-1388 against an F5 appliance $dest$ has occurred.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - F5 BIG-IP Vulnerability CVE-2022-1388
    - CISA AA24-241A
asset_type: Web Server
cve:
    - CVE-2022-1388
mitre_attack_id:
    - T1190
    - T1133
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: network
security_domain: network
tests:
    - name: True Positive Test
      attack_data:
        - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/f5/f5.log
          source: not_applicable
          sourcetype: pan:threat
      test_type: unit

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="*/mgmt/tm/util/bash*"
Web.http_method="POST"
BY Web.http_user_agent 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

| `f5_big_ip_icontrol_rest_vulnerability_cve_2022_1388_filter`

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
Web.http_methodeq
  • "POST"
Web.urleq
  • "*/mgmt/tm/util/bash*"