Detection rules › Elastic

Potential Git CVE-2025-48384 Exploitation

Source
github.com/elastic/protections-artifacts

Identifies potential attempts to execute malicious commands via a known git remote code execution vulnerability CVE-2025-48384.

MITRE ATT&CK coverage

Telemetry coverage

Rule body

[rule]
description = """
Identifies potential attempts to execute malicious commands via a known git remote code execution vulnerability
CVE-2025-48384.
"""
id = "78ca6f13-ff26-416f-9e48-e2d92694ed58"
license = "Elastic License v2"
name = "Potential Git CVE-2025-48384 Exploitation"
os_list = ["linux", "macos"]
reference = [
    "https://www.kucoin.com/zh-hant/blog/en-breaking-lazarus-group-apt38-targets-crypto-sector-with-sophisticated-phishing-campaign",
    "https://securitylabs.datadoghq.com/articles/git-arbitrary-file-write/",
    "https://github.com/acheong08/CVE-2025-48384",
]
version = "1.0.2"

query = '''
process where event.type == "start" and event.action == "exec" and
 process.parent.name == "git" and process.command_line : "*clone*--recursive*http*" and
 process.name in (
   "dash", "sh", "static-sh", "bash", "bash-static", "zsh", "ash", "csh", "ksh", "tcsh", "busybox", "fish", "ksh93", "rksh", "rksh93", "lksh",
   "mksh", "mksh-static", "csharp", "posh", "rc", "sash", "yash", "zsh5", "zsh5-static"
)
'''

min_endpoint_version = "7.16.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0

[[actions]]
action = "kill_process"
field = "process.parent.entity_id"
state = 0

[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1203"
name = "Exploitation for Client Execution"
reference = "https://attack.mitre.org/techniques/T1203/"


[threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"

[internal]
min_endpoint_version = "7.16.0"

Stages and Predicates

Stage 1: process

process where event.type == "start" and event.action == "exec" and
 process.parent.name == "git" and process.command_line : "*clone*--recursive*http*" and
 process.name in (
   "dash", "sh", "static-sh", "bash", "bash-static", "zsh", "ash", "csh", "ksh", "tcsh", "busybox", "fish", "ksh93", "rksh", "rksh93", "lksh",
   "mksh", "mksh-static", "csharp", "posh", "rc", "sash", "yash", "zsh5", "zsh5-static"
)

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • exec
field:"EventType" kind:eq value:"exec"
event.typeeq
  • start
field:"event.type" kind:eq value:"start"
process.command_linewildcard
  • *clone*--recursive*http*
field:"CommandLine" kind:wildcard value:"*clone*--recursive*http*"
process.namein
  • ash
  • bash
  • bash-static
  • busybox
  • csh
  • csharp
  • dash
  • fish
  • ksh
  • ksh93
  • lksh
  • mksh
  • mksh-static
  • posh
  • rc
  • rksh
  • rksh93
  • sash
  • sh
  • static-sh
  • tcsh
  • yash
  • zsh
  • zsh5
  • zsh5-static
field:"process_name" kind:in
process.parent.nameeq
  • git
field:"parent_process_name" kind:eq value:"git"