Check Point Research has disclosed a two-month tracking effort against a malware campaign it calls Yoba — a supply-chain-style social engineering operation that weaponizes the enormous public appetite for AI tooling. The operators build convincing fake GitHub projects masquerading as ChatGPT and Claude desktop clients, distribute digitally signed installers, and abuse legitimate OpenAI and Anthropic binaries as DLL sideloading hosts to deploy a custom malware chain ending in a cryptocurrency miner.
This is not a vulnerability in OpenAI or Anthropic products. It is a classic trust-abuse operation: the attackers exploit the reputation of legitimate vendors, the perceived authority of signed code, and the low scrutiny users apply to GitHub search results. For defenders, the campaign is a reminder that Authenticode signatures and familiar process names are not a verdict of safety — and that your endpoint telemetry must look at what a signed binary loads and where it loads it from.
Technical Analysis: How the Yoba Chain Works
Stage 1 — Fake GitHub Projects as the Delivery Vehicle
The attackers publish GitHub repositories crafted to look like legitimate open-source AI clients — fake ChatGPT and Claude desktop applications. The repos are dressed up with realistic READMEs, release pages, and download links, and they surface when users search for free or unofficial AI desktop tools. This maps to MITRE ATT&CK T1608 (Stage Capabilities) combined with T1036 (Masquerading): the infrastructure and payloads are presented as trustworthy artifacts.
Users who download and run the installer are performing T1204.002 (User Execution: Malicious File) — no exploit is required. The entire chain depends on the victim voluntarily executing the payload, which is exactly why signed installers and familiar branding are so effective.
Stage 2 — Signed Installers and DLL Sideloading Through Legitimate Binaries
The most technically interesting element of Yoba is the use of legitimate, signed OpenAI and Anthropic executables as sideloading hosts. The installer drops the genuine vendor binary alongside a malicious DLL with a name the legitimate executable will resolve at load time. When the victim launches what appears to be ChatGPT or Claude, the signed binary loads the attacker-controlled DLL from its own directory — a textbook T1574.002 (Hijack Execution Flow: DLL Side-Loading).
This technique delivers three advantages to the attacker:
- Signature trust laundering. The parent process is a validly signed binary from a known AI vendor. Naive application control, reputation-based filtering, and even some EDR allowlists will wave it through.
- Execution from user-writable paths. These fake clients typically live under
%LOCALAPPDATA%,%APPDATA%, or the user'sDownloadsfolder — locations where code execution should raise eyebrows but often doesn't. - Abuse of T1553.002 (Subvert Trust Controls: Code Signing). The installers themselves are signed, defeating controls that simply block unsigned executables.
Stage 3 — Custom Malware Chain and Crypto Miner Deployment
The sideloaded DLL kicks off a custom multi-stage chain that ultimately deploys a cryptocurrency miner — T1496 (Resource Hijacking). Miners in campaigns like this are typically XMRig or XMRig-derived Monero miners, which communicate with mining pools over the Stratum protocol (commonly TCP ports 3333, 4444, 5555, 7777, 14444) and frequently expose themselves through characteristic command-line arguments (--donate-level, stratum+tcp://, --coin, pool wallet addresses). Persistent access is usually maintained via Run keys or scheduled tasks so the miner survives reboots.
Exploitation Status
- Status: Confirmed active, in-the-wild campaign, tracked by Check Point Research for approximately two months.
- CVE: None. This campaign requires no vulnerability — it is pure social engineering plus living-off-trusted-binaries tradecraft.
- CISA KEV: Not applicable (no CVE).
- Affected platforms: Windows endpoints where users install unofficial AI desktop clients sourced from third-party GitHub repositories rather than official vendor channels (openai.com, claude.ai, Microsoft Store).
Detection & Response
The detections below target the three most reliable observables of this campaign: (1) a signed AI-vendor binary loading unsigned or oddly-located modules, (2) Stratum/mining-pool network behavior, and (3) miner-style command lines and persistence. Each is tuned to minimize noise — unsigned module loads into signed binaries from user-writable paths are almost never legitimate in enterprise environments.
Sigma Rules
---
title: Signed AI Vendor Binary Loading Unsigned DLL From User-Writable Path
id: 3f9c2a71-6b84-4d1e-9a52-7c1e4f8b2d05
status: experimental
description: Detects legitimate signed executables (e.g., ChatGPT/Claude desktop binaries) loading unsigned DLLs from user-writable directories, consistent with Yoba campaign DLL side-loading via trojanized AI client installers.
references:
- https://securityaffairs.com/202149/malware/yoba-malware-hides-a-crypto-miner-behind-legitimate-openai-and-anthropic-binaries.html
- https://attack.mitre.org/techniques/T1574/002/
author: Security Arsenal
date: 2026/01/15
tags:
- attack.defense_evasion
- attack.persistence
- attack.t1574.002
logsource:
category: image_load
product: windows
detection:
selection_image:
Image|endswith:
- '\ChatGPT.exe'
- '\Claude.exe'
- '\Claude Desktop.exe'
- '\OpenAI.exe'
selection_path:
ImageLoaded|contains:
- '\AppData\Local\'
- '\AppData\Roaming\'
- '\Downloads\'
- '\Temp\'
- 'C:\Users\Public\'
selection_unsigned:
Signed: 'false'
condition: selection_image and selection_path and selection_unsigned
falsepositives:
- Beta or self-built AI desktop clients in developer environments
level: high
---
title: Cryptocurrency Miner Command Line Indicators
id: 8d4e1b36-2a57-4f09-b83d-5e6a9c1d7f42
status: experimental
description: Detects process command lines containing XMRig-style mining arguments and Stratum protocol references associated with crypto miners deployed by campaigns such as Yoba.
references:
- https://securityaffairs.com/202149/malware/yoba-malware-hides-a-crypto-miner-behind-legitimate-openai-and-anthropic-binaries.html
- https://attack.mitre.org/techniques/T1496/
author: Security Arsenal
date: 2026/01/15
tags:
- attack.impact
- attack.t1496
logsource:
category: process_creation
product: windows
detection:
selection:
CommandLine|contains:
- 'stratum+tcp://'
- 'stratum+ssl://'
- '--donate-level'
- '--coin='
- '--algo=rx/'
- 'xmrig'
- '--randomx-'
- 'pool.minexmr'
- 'supportxmr.com'
condition: selection
falsepositives:
- Authorized mining activity in research environments (extremely rare in enterprise)
level: critical
---
title: Outbound Connection to Common Mining Pool Port From Non-Browser Process
id: 5b7f3d92-1c68-4e2a-a94b-3d8f6e0a2c17
status: experimental
description: Detects outbound connections to well-known Stratum mining pool ports by processes other than browsers or known update services, a behavioral indicator of crypto miner deployment seen in the Yoba campaign.
references:
- https://securityaffairs.com/202149/malware/yoba-malware-hides-a-crypto-miner-behind-legitimate-openai-and-anthropic-binaries.html
- https://attack.mitre.org/techniques/T1496/
author: Security Arsenal
date: 2026/01/15
tags:
- attack.command_and_control
- attack.t1496
logsource:
category: network_connection
product: windows
detection:
selection_port:
DestinationPort:
- 3333
- 4444
- 5555
- 7777
- 14444
- 45700
selection_initiated:
Initiated: 'true'
filter_browsers:
Image|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\firefox.exe'
- '\brave.exe'
- '\iexplore.exe'
condition: selection_port and selection_initiated and not filter_browsers
falsepositives:
- Rare legitimate services using these ports (validate per environment)
level: high
KQL Hunting (Microsoft Sentinel / Defender)
The first query hunts the sideloading pattern — AI-vendor-named processes executing from user-writable paths with unsigned module loads or spawning suspicious children. The second hunts miner behavior across process and network telemetry.
// Hunt 1: Sideloading pattern - AI-branded processes running from user-writable paths
DeviceImageLoadEvents
| where TimeGenerated > ago(14d)
| where FileName in~ ("ChatGPT.exe", "Claude.exe", "Claude Desktop.exe", "OpenAI.exe")
or InitiatingProcessFileName in~ ("ChatGPT.exe", "Claude.exe", "Claude Desktop.exe", "OpenAI.exe")
| where FolderPath has_any ("\\AppData\\", "\\Downloads\\", "\\Temp\\", "Users\\Public")
| extend IsSignedPath = FolderPath has_any ("Program Files", "Windows\\System32")
| where not(IsSignedPath)
| project TimeGenerated, DeviceName, FileName, FolderPath, SHA256, InitiatingProcessFileName, InitiatingProcessCommandLine, ReportId
| join kind=leftouter (
DeviceProcessEvents
| where TimeGenerated > ago(14d)
| project DeviceName, ProcessCommandLine, FileName, AccountName, TimeGenerated
) on DeviceName
| summarize arg_max(TimeGenerated, *) by DeviceName, FolderPath
// Hunt 2: Miner indicators - Stratum connections and miner command lines
union isfuzzy=true
(DeviceNetworkEvents
| where TimeGenerated > ago(14d)
| where RemotePort in (3333, 4444, 5555, 7777, 14444, 45700)
| where InitiatingProcessFileName !in~ ("chrome.exe", "msedge.exe", "firefox.exe", "brave.exe")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteIP, RemotePort, RemoteUrl),
(DeviceProcessEvents
| where TimeGenerated > ago(14d)
| where ProcessCommandLine has_any ("stratum+tcp", "stratum+ssl", "--donate-level", "xmrig", "--algo=rx/", "supportxmr", "minexmr")
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, SHA256, AccountName)
| summarize arg_max(TimeGenerated, *) by DeviceName
Velociraptor VQL Hunt
This artifact sweeps endpoints for live miner processes and active Stratum connections, then cross-references persistence locations for AI-branded binaries in user-writable paths.
-- Yoba campaign hunt: miner processes, Stratum connections, and fake AI client persistence
SELECT * FROM {
-- Suspicious processes with miner-style command lines
SELECT 'process' AS IndicatorType, Pid AS Pid, Name AS Name,
CommandLine AS Detail, Exe AS Path, Username AS User, CreateTime AS Timestamp
FROM pslist()
WHERE CommandLine =~ '(?i)(stratum\+(tcp|ssl)|donate-level|xmrig|--algo=rx/|supportxmr|minexmr)'
OR Exe =~ '(?i)(ChatGPT|Claude|OpenAI)'
AND Exe =~ '(?i)(AppData|Downloads|Temp|Users\\\\Public)'
}, {
-- Established connections to common mining pool ports
SELECT 'network' AS IndicatorType, Pid AS Pid, Name AS Name,
(RemoteAddr.IP + ':' + format(format='%d', args=RemoteAddr.Port)) AS Detail,
'' AS Path, '' AS User, '' AS Timestamp
FROM netstat()
WHERE Status =~ 'ESTABLISHED'
AND RemoteAddr.Port IN (3333, 4444, 5555, 7777, 14444, 45700)
}
Remediation and Audit Script
Run this on any endpoint suspected of exposure. It identifies fake AI clients running from user-writable paths, validates Authenticode signatures, hunts miner processes and Stratum connections, and enumerates persistence entries tied to the campaign.
# Yoba Campaign - Endpoint Audit and Remediation Script
# Run elevated. Produces a report; use -Remediate to kill miner processes.
param([switch]$Remediate)
$report = @()
Write-Host "[*] Yoba campaign endpoint audit starting..." -ForegroundColor Cyan
# 1) Find AI-branded executables in user-writable paths and verify signatures
$searchPaths = @("$env:LOCALAPPDATA", "$env:APPDATA", "$env:USERPROFILE\Downloads", "C:\Users\Public", "$env:TEMP")
$aiNames = @("ChatGPT.exe", "Claude.exe", "Claude Desktop.exe", "OpenAI.exe")
foreach ($base in $searchPaths) {
if (Test-Path $base) {
Get-ChildItem -Path $base -Recurse -Include $aiNames -ErrorAction SilentlyContinue | ForEach-Object {
$sig = Get-AuthenticodeSignature $_.FullName
$report += [pscustomobject]@{
Type = 'AIBinary'; Path = $_.FullName
SignatureStatus = $sig.Status; Signer = $sig.SignerCertificate.Subject
}
if ($sig.Status -ne 'Valid' -or $sig.SignerCertificate.Subject -notmatch 'OpenAI|Anthropic') {
Write-Host "[!] SUSPICIOUS AI binary: $($_.FullName) - Signature: $($sig.Status)" -ForegroundColor Red
}
}
}
}
# 2) Detect miner-style processes by command line
$minerProcs = Get-CimInstance Win32_Process | Where-Object {
$_.CommandLine -match '(?i)(stratum\+(tcp|ssl)|donate-level|xmrig|--algo=rx/|supportxmr|minexmr)'
}
foreach ($p in $minerProcs) {
Write-Host "[!] MINER PROCESS: PID $($p.ProcessId) - $($p.Name) - $($p.CommandLine)" -ForegroundColor Red
$report += [pscustomobject]@{Type='MinerProcess'; Path=$p.ExecutablePath; SignatureStatus='N/A'; Signer=$p.CommandLine}
if ($Remediate) { Stop-Process -Id $p.ProcessId -Force -ErrorAction SilentlyContinue }
}
# 3) Check established connections to common Stratum pool ports
$poolPorts = @(3333,4444,5555,7777,14444,45700)
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
Where-Object { $poolPorts -contains $_.RemotePort } | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
Write-Host "[!] POOL CONNECTION: $($proc.ProcessName) (PID $($_.OwningProcess)) -> $($_.RemoteAddress):$($_.RemotePort)" -ForegroundColor Red
$report += [pscustomobject]@{Type='PoolConnection'; Path=$proc.Path; SignatureStatus='N/A'; Signer="$($_.RemoteAddress):$($_.RemotePort)"}
}
# 4) Enumerate persistence: Run keys and scheduled tasks referencing user-writable AI binaries
$runKeys = @('HKCU:\Software\Microsoft\Windows\CurrentVersion\Run',
'HKLM:\Software\Microsoft\Windows\CurrentVersion\Run')
foreach ($key in $runKeys) {
if (Test-Path $key) {
Get-ItemProperty $key | Get-Member -MemberType NoteProperty | ForEach-Object {
$val = (Get-ItemProperty $key).($_.Name)
if ($val -match '(?i)(ChatGPT|Claude|OpenAI|xmrig|miner)' -and $val -match '(?i)(AppData|Downloads|Temp|Public)') {
Write-Host "[!] PERSISTENCE: $key\$($_.Name) = $val" -ForegroundColor Red
$report += [pscustomobject]@{Type='Persistence'; Path="$key\$($_.Name)"; SignatureStatus='N/A'; Signer=$val}
}
}
}
}
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match '(?i)(AppData|Downloads|Temp)' -and ($_.Actions.Execute -match '(?i)(ChatGPT|Claude|OpenAI|xmrig)') } |
ForEach-Object { Write-Host "[!] SUSPICIOUS TASK: $($_.TaskName) -> $($_.Actions.Execute)" -ForegroundColor Red }
$report | Export-Csv -Path "$env:TEMP\yoba_audit_report.csv" -NoTypeInformation
Write-Host "[*] Audit complete. Report: $env:TEMP\yoba_audit_report.csv" -ForegroundColor Cyan
Remediation
Because Yoba requires no vulnerability, remediation is about removing the payload, closing the delivery path, and hardening trust assumptions:
-
Remove the infection. On any confirmed host, terminate miner processes, delete the fake AI client directories, and remove associated Run key and scheduled task persistence. Given that miners frequently coexist with credential theft or additional staging, re-image the host if it handled sensitive data or had elevated user sessions. Reset credentials used on the machine.
-
Acquire AI tooling only through official channels. Enforce via policy and user guidance: ChatGPT via openai.com and the Microsoft Store; Claude via claude.ai. Unofficial GitHub "desktop clients" for commercial AI services should be treated as hostile by default.
-
Deploy application control that goes beyond signature checks. WDAC or AppLocker policies should restrict execution to approved paths (
Program Files, managed install locations) — this breaks the entire sideloading model because the malicious DLL lands in a user-writable directory. Signature alone is insufficient, since the sideload host is validly signed by design. -
Mitigate DLL search-order hijacking. Verify
SafeDllSearchModeis enabled and setCWDIllegalInDllSearch(registry:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager) to0xFFFFFFFFto block DLL loading from the current working directory. This reduces, though does not eliminate, sideloading exposure. -
Block mining infrastructure at the network edge. Deny outbound traffic to known mining pool domains and Stratum ports (3333, 4444, 5555, 7777, 14444) from user VLANs. Alert on sustained high-CPU processes making long-lived outbound TCP sessions.
-
Educate users on GitHub repo vetting. Star counts and READMEs are trivially faked. Train users to verify publisher identity, check organization ownership, and treat search-engine or SEO-poisoned GitHub results for "free AI apps" with suspicion.
-
Monitor for code-signing trust abuse. Alert on newly observed signer certificates in your environment and on signed binaries executing from user-writable paths — the signature is an attribute, not a verdict.
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.