Back to Intelligence

CVE-2024-21762 FortiGate SSL-VPN Exploitation + MeshCentral RMM Persistence: Thai Telecom Intrusion — OTX Detection Pack

SA
Security Arsenal Team
September 15, 2026
10 min read

Threat Summary

An AlienVault OTX pulse published on 2026-09-15 exposes an active intrusion campaign against 3BB (Triple T Broadband), one of Thailand's largest telecommunications providers. The campaign was discovered when researchers located an open/exposed directory on attacker infrastructure containing operational artifacts from the compromise.

The attack chain is a textbook example of the modern edge-device intrusion playbook:

  1. Initial Access: Exploitation of CVE-2024-21762, a critical out-of-bounds write vulnerability (CVSS 9.6) in FortiGate SSL-VPN, against a FortiGate 60F appliance. This vulnerability allows unauthenticated remote code execution via crafted HTTP requests and has been widely exploited since its disclosure in February 2024.
  2. Persistence & C2: Deployment of MeshCentral, a legitimate open-source remote monitoring and management (RMM) platform, repurposed as a covert command-and-control channel. The attacker registered agent subdomains mimicking the victim's own infrastructure (agent.3bb.co.th), indicating either DNS hijacking capability, control of a victim DNS zone, or convincing lookalike infrastructure.
  3. Reconnaissance & Credential Access: The truncated pulse description references "extensive reconnaissance, cred[ential access]" — consistent with telecom-targeting operations seeking subscriber data, RADIUS/LDAP credentials, and lateral movement paths into ISP core systems.

Objective assessment: Telecommunications providers are high-value targets for espionage-motivated actors and initial access brokers alike. ISP-level access enables traffic interception, subscriber data harvesting, and downstream supply-chain positioning against the provider's enterprise customers. The use of legitimate RMM tooling rather than commodity malware suggests an operator prioritizing stealth and long-term dwell time over smash-and-grab monetization.

Threat Actor / Malware Profile

Attribution: Unknown. No named APT cluster or malware family is assigned in this pulse. However, the tradecraft profile — FortiGate edge exploitation + living-off-the-land RMM persistence against Southeast Asian telecom — aligns with patterns observed across multiple China-nexus clusters and access brokers operating in the region.

CVE-2024-21762 (Initial Access Vector)

  • Type: Out-of-bounds write in sslvpnd (FortiOS SSL-VPN daemon)
  • Impact: Unauthenticated remote code execution as root on the FortiGate appliance
  • Affected: FortiOS 7.4.0–7.4.2, 7.2.0–7.2.6, 7.0.0–7.0.13, 6.4.0–6.4.14, 6.2.0–6.2.15, 6.0 all versions
  • Delivery: Crafted HTTP requests to the SSL-VPN interface; no authentication or user interaction required

MeshCentral (Persistence / C2)

  • Nature: Legitimate open-source RMM — this is RMM abuse, not malware in the traditional sense
  • Distribution method: Post-exploitation deployment via the compromised FortiGate, likely pushed to internal hosts after initial foothold
  • Payload behavior: MeshAgent installs as a service, providing full remote desktop, file transfer, terminal access, and tunneling — a complete C2 capability wrapped in signed, legitimate code
  • C2 communication: HTTPS/WebSocket (TLS) to MeshCentral server on port 443; blends with normal web traffic. In this campaign, the attacker used victim-impersonating hostnames (agent.3bb.co.th) to make agent check-ins appear as internal traffic
  • Persistence mechanism: Windows service installation (Mesh Agent service), registry Run keys, and self-updating agent binaries
  • Anti-analysis: No packing or obfuscation needed — the tool is legitimate software. Detection must be behavioral: unauthorized RMM tooling is the signal, not the binary itself. MeshAgent is rarely on application allowlists in telecom/enterprise environments

IOC Analysis

The pulse contains 10 indicators across three types:

TypeIndicatorsOperationalization
CVECVE-2024-21762Not a blockable IOC — drive patch/vuln management validation and retro-hunting for exploitation artifacts (sslvpnd crashes, anomalous HTTP POSTs)
IPv4 (attacker/infra)92.63.180.133Block at egress; retro-hunt NetFlow/proxy/firewall logs for any session. This range (92.63.180.0/24) has prior abuse history — consider subnet-level scrutiny
IPv4 (victim-side 3BB space)110.164.129.67, 110.164.192.228, 110.164.58.195These are 3BB-owned addresses — likely compromised hosts or observed infrastructure. Do NOT blindly block if you peer with Thai telecom; treat as hunt targets and watch for inbound connections from them
Hostnamemail.3bb.co.th, agent.3bb.co.th, www.ayuthayatech.comagent.3bb.co.th is the critical indicator — resolve-check your DNS logs for this and any agent.* subdomain pattern. ayuthayatech.com appears to be attacker-registered or compromised staging infrastructure — block and hunt

SOC operationalization guidance:

  • Ingest IPv4s into firewall/EDR blocklists with 90-day expiry and alerting on any historical hit
  • DNS-sinkhole or alert on agent.3bb.co.th and www.ayuthayatech.com; more importantly, hunt for any MeshCentral agent traffic in your environment (default ports 443/4430, TLS SNI patterns, meshagents.com relay infrastructure)
  • For CVE indicators, cross-reference your asset inventory: any FortiGate 60F (or any FortiOS in affected ranges) with SSL-VPN enabled that was unpatched after Feb 2024 requires compromise assessment, not just patching — patching does not evict an implanted actor
  • Tooling: OTX indicators can be pulled via the OTXv2 Python SDK or DirectConnect API into your SIEM/TIP (MISP, OpenCTI, ThreatConnect). Feed hostnames into passive DNS (SecurityTrails, PassiveTotal) to enumerate the full MeshCentral server footprint

Detection Engineering

YAML
---
title: FortiGate SSL-VPN CVE-2024-21762 Exploitation Attempt
id: 8f2a1c4d-7e3b-4a9f-b1c2-9d5e6f7a8b9c
status: experimental
description: Detects exploitation attempts against FortiGate SSL-VPN via CVE-2024-21762 patterns — oversized/crafted HTTP requests to sslvpnd endpoints, followed by anomalous process spawning on the appliance or crash artifacts.
author: Security Arsenal Threat Intelligence
date: 2026/09/15
references:
    - https://hunt.io/blog/thai-broadband-fortigate-sslvpn-meshcentral-intrusion
    - https://www.fortiguard.com/psirt/FG-IR-24-015
logsource:
    category: webserver
    product: fortigate
detection:
    selection_uri:
        cs_uri|contains:
            - '/remote/hostcheck_validate'
            - '/remote/info'
            - '/remote/logincheck'
            - '/sslvpn/portal/'
    selection_size:
        Content_Length|gte: 1500
    selection_method:
        cs_method: 'POST'
    condition: selection_uri and selection_size and selection_method
falsepositives:
    - Legitimate SSL-VPN authentication flows (filter known-good client source ranges)
level: high
tags:
    - attack.initial_access
    - attack.t1190
    - cve.2024-21762
---
title: MeshCentral RMM Agent Installation and Execution
id: 3b7d9e1f-2a4c-4d8e-9f0a-1b2c3d4e5f6a
status: experimental
description: Detects installation or execution of MeshCentral MeshAgent — legitimate RMM tooling abused for covert C2, as observed in the 3BB telecom intrusion. Alerts on service installation, binary execution, and characteristic child process behavior.
author: Security Arsenal Threat Intelligence
date: 2026/09/15
references:
    - https://hunt.io/blog/thai-broadband-fortigate-sslvpn-meshcentral-intrusion
logsource:
    category: process_creation
    product: windows
detection:
    selection_img:
        - Image|endswith:
            - '\MeshAgent.exe'
            - '\meshagent64.exe'
            - '\meshagent32.exe'
        - OriginalFileName: 'MeshAgent.exe'
    selection_service:
        ParentImage|endswith: '\services.exe'
        CommandLine|contains: 'mesh'
    condition: selection_img or selection_service
falsepositives:
    - Organizations legitimately using MeshCentral for IT management (maintain an approved-server allowlist and alert on deviations)
level: high
tags:
    - attack.command_and_control
    - attack.t1219
    - attack.persistence
    - attack.t1543.003
---
title: Outbound Connection to Known 3BB Intrusion Infrastructure
id: 5c1e8a2b-6d3f-4b7a-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects DNS resolution or network connections to infrastructure identified in the OTX pulse covering the Thai broadband FortiGate/MeshCentral intrusion.
author: Security Arsenal Threat Intelligence
date: 2026/09/15
references:
    - https://hunt.io/blog/thai-broadband-fortigate-sslvpn-meshcentral-intrusion
logsource:
    category: dns
detection:
    selection:
        query|contains:
            - 'agent.3bb.co.th'
            - 'www.ayuthayatech.com'
    condition: selection
falsepositives:
    - Unlikely outside of research/threat hunting activity
level: critical
tags:
    - attack.command_and_control
    - attack.t1071.001
KQL — Microsoft Sentinel / Defender
// Hunt: MeshCentral RMM abuse + 3BB intrusion IOCs (Microsoft Sentinel / Defender XDR)
// Looks for MeshAgent execution, connections to pulse IOCs, and unexpected RMM-style TLS egress
let Lookback = 30d;
let SuspiciousIPs = dynamic(["92.63.180.133", "110.164.129.67", "110.164.192.228", "110.164.58.195"]);
let SuspiciousHosts = dynamic(["agent.3bb.co.th", "www.ayuthayatech.com", "mail.3bb.co.th"]);
let NetworkHits =
    DeviceNetworkEvents
    | where Timestamp > ago(Lookback)
    | where RemoteIP in (SuspiciousIPs) or RemoteUrl has_any (SuspiciousHosts)
    | project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
              RemoteIP, RemoteUrl, RemotePort, ActionType
    | extend Detection = "IOC Network Match";
let MeshAgentExec =
    DeviceProcessEvents
    | where Timestamp > ago(Lookback)
    | where FileName has_any ("MeshAgent", "meshagent64", "meshagent32")
       or ProcessCommandLine has_any ("meshcentral", "MeshAgent.exe")
    | project Timestamp, DeviceName, FileName, ProcessCommandLine, FolderPath,
              InitiatingProcessFileName, AccountName
    | extend Detection = "MeshCentral Agent Execution";
let MeshServiceInstall =
    DeviceEvents
    | where Timestamp > ago(Lookback)
    | where ActionType == "ServiceInstalled"
    | where AdditionalFields has "mesh"
    | project Timestamp, DeviceName, FileName, AdditionalFields
    | extend Detection = "Mesh Service Installed";
union NetworkHits, MeshAgentExec, MeshServiceInstall
| sort by Timestamp desc
PowerShell
# ============================================================
# Hunt Script: FortiGate/MeshCentral Intrusion Artifacts
# Checks for MeshAgent services, persistence, IOC connections
# Run elevated on Windows endpoints/servers
# ============================================================

$Report = @()

# --- 1. MeshCentral agent services and processes ---
$meshServices = Get-CimInstance Win32_Service -ErrorAction SilentlyContinue |
    Where-Object { $_.Name -match 'mesh' -or $_.PathName -match 'MeshAgent' }
foreach ($svc in $meshServices) {
    $Report += [pscustomobject]@{
        Category = 'Suspicious Service'
        Finding  = "$($svc.Name) | $($svc.State) | $($svc.PathName)"
        Host     = $env:COMPUTERNAME
    }
}

$meshProcs = Get-Process -ErrorAction SilentlyContinue |
    Where-Object { $_.ProcessName -match 'meshagent' }
foreach ($p in $meshProcs) {
    $Report += [pscustomobject]@{
        Category = 'Running MeshAgent Process'
        Finding  = "$($p.ProcessName) PID=$($p.Id) Path=$($p.Path)"
        Host     = $env:COMPUTERNAME
    }
}

# --- 2. Persistence: Run keys and scheduled tasks referencing Mesh ---
$runPaths = @('HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
              'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run')
foreach ($path in $runPaths) {
    if (Test-Path $path) {
        (Get-ItemProperty $path).PSObject.Properties |
            Where-Object { $_.Value -match 'meshagent|meshcentral' } |
            ForEach-Object {
                $Report += [pscustomobject]@{
                    Category = 'Registry Persistence'
                    Finding  = "$path :: $($_.Name) = $($_.Value)"
                    Host     = $env:COMPUTERNAME
                }
            }
    }
}

Get-ScheduledTask -ErrorAction SilentlyContinue |
    Where-Object { ($_.Actions.Execute -match 'mesh') -or ($_.TaskName -match 'mesh') } |
    ForEach-Object {
        $Report += [pscustomobject]@{
            Category = 'Scheduled Task Persistence'
            Finding  = "$($_.TaskName) -> $($_.Actions.Execute)"
            Host     = $env:COMPUTERNAME
        }
    }

# --- 3. Network connections to OTX pulse IOCs ---
$badIPs  = @('92.63.180.133','110.164.129.67','110.164.192.228','110.164.58.195')
$badFqdn = @('agent.3bb.co.th','www.ayuthayatech.com','mail.3bb.co.th')

Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
    Where-Object { $badIPs -contains $_.RemoteAddress } |
    ForEach-Object {
        $proc = (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName
        $Report += [pscustomobject]@{
            Category = 'IOC Network Connection (ACTIVE)'
            Finding  = "$($_.RemoteAddress):$($_.RemotePort) via $proc"
            Host     = $env:COMPUTERNAME
        }
    }

foreach ($fqdn in $badFqdn) {
    try {
        $r = Resolve-DnsName $fqdn -ErrorAction Stop
        $Report += [pscustomobject]@{
            Category = 'IOC DNS Resolution'
            Finding  = "$fqdn resolves: $($r.IPAddress -join ',')"
            Host     = $env:COMPUTERNAME
        }
    } catch {}
}

# --- 4. MeshAgent install directories ---
$meshDirs = @("$env:ProgramFiles\Mesh Agent", "${env:ProgramFiles(x86)}\Mesh Agent",
              "$env:ProgramData\MeshAgent", "$env:windir\Temp\mesh")
foreach ($d in $meshDirs) {
    if (Test-Path $d) {
        $Report += [pscustomobject]@{
            Category = 'MeshAgent Directory Found'
            Finding  = $d
            Host     = $env:COMPUTERNAME
        }
    }
}

if ($Report.Count -eq 0) {
    Write-Output "[CLEAN] No MeshCentral/IOC artifacts found on $env:COMPUTERNAME"
} else {
    $Report | Format-Table -AutoSize
    $Report | Export-Csv -Path ".\mesh_hunt_$env:COMPUTERNAME.csv" -NoTypeInformation
    Write-Warning "$($Report.Count) suspicious artifact(s) found. CSV exported."
}

Response Priorities

Immediate (0–4 hours)

  • Block 92.63.180.133, www.ayuthayatech.com, and agent.3bb.co.th at egress firewall, DNS, and proxy layers
  • Inventory check: Identify every FortiGate appliance in your environment running affected FortiOS versions with SSL-VPN enabled. If unpatched during the Feb 2024+ exploitation window, treat as potentially compromised, not merely vulnerable
  • Hunt for MeshAgent execution using the KQL and PowerShell above — any RMM tool not on your approved software list is an incident by default
  • Pull retro NetFlow/proxy data for all 10 pulse IOCs going back at least 90 days

24 Hours

  • The pulse references credential access activity: force password resets for any accounts that authenticated through the compromised SSL-VPN, prioritizing privileged/VPN admin accounts
  • Review FortiGate local and LDAP-bound admin accounts for unauthorized additions; check for rogue admin sessions and config exports (execute backup full-config events)
  • Audit SSL-VPN session logs for anomalous source geographies, impossible-travel patterns, and sessions coinciding with patch-window gaps
  • Validate VPN MFA enforcement — stolen credentials are worthless to the actor if second-factor is enforced and session tokens are revoked

1 Week

  • Architecture hardening: Place FortiGate management interfaces behind a dedicated management VLAN unreachable from user segments; disable SSL-VPN if not business-required (IPsec or ZTNA alternatives carry a smaller exploit surface)
  • Implement application allowlisting for RMM tooling: explicitly permit only your sanctioned platform (e.g., your actual RMM), alert on all others — TeamViewer, AnyDesk, MeshCentral, ScreenConnect, Atera, Splashtop
  • Deploy TLS inspection or JA3/JA4 fingerprinting on egress to catch RMM check-ins that blend into port 443
  • Establish an edge-device compromise-assessment runbook: patching a firewall after public exploit availability must automatically trigger artifact review, not closure of the ticket

Related Resources

Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.