Back to Intelligence

FDMTP Implant via QuickFox Supply Chain Attack + ENDLESSDOORS Router Backdoor (CVE-2026-66747): OTX Detection Pack

SA
Security Arsenal Team
September 4, 2026
12 min read

Two concurrent supply chain compromises surfaced in AlienVault OTX this cycle, and together they illustrate a sobering trend: adversaries are no longer just attacking software update pipelines — they are pre-positioning implants inside products before those products ever reach the customer.

Pulse 1 — QuickFox / FDMTP. A long-running campaign, active since at least August 2025 and attributed to a threat cluster tracked as Twill Typhoon, compromised the build or distribution pipeline of QuickFox, a VPN application popular with Chinese-language users seeking access to mainland resources and optimized gaming routes. Trojanized Windows installers (versions 3.0.51.0 through 3.59.5) shipped with modified Electron renderer HTML files that executed a malicious JavaScript loader. The loader fingerprints victim endpoints and retrieves the FDMTP implant, with staging infrastructure hosted on lookalike CDN domains such as www.icloud-cdn.net and cdns3.51quickfox.cn, plus the throwaway domain jiejie.net.

Pulse 2 — Zbtlink / ENDLESSDOORS. VulnCheck researchers disclosed that routers manufactured by Shenzhen Zhibotong Electronics (Zbtlink) — sold globally under multiple brand names including Wiflyer — contain a factory pre-installed backdoor tracked as ENDLESSDOORS and CVE-2026-66747. The implant is derived from the open-source rctl remote-control tool, runs as disguised userland processes named kworker (mimicking Linux kernel threads), and beacons continuously to C2 infrastructure, granting unauthenticated remote access to the device.

The common thread is trust exploitation at the supply layer: one campaign poisons a legitimate software update channel, the other embeds the implant at the point of manufacture. Both bypass traditional perimeter controls because the malicious code arrives signed, packaged, and installed by the victim's own choice.

Threat Actor / Malware Profile

FDMTP Implant (QuickFox Supply Chain Campaign)

  • Attribution: Unknown actors, activity cluster tagged as Twill Typhoon. The victimology (Chinese diaspora and cross-border users) suggests espionage-oriented collection rather than financially motivated crime.
  • Distribution method: Trojanized QuickFox VPN Windows installers, versions 3.0.51.0–3.59.5, delivered through the vendor's legitimate distribution/update channel.
  • Payload behavior: Malicious JavaScript embedded in modified Electron renderer HTML executes at application launch. The loader fingerprints the endpoint (OS, hostname, network environment) before deciding whether to pull the FDMTP second-stage implant — classic selective targeting to avoid sandboxes and researchers.
  • Execution technique: DLL sideloading is used to run malicious code under the context of the legitimate, signed QuickFox Electron binary, evading application allowlisting.
  • C2 communication: Staging and C2 domains impersonate cloud CDN services (www.icloud-cdn.net, cdns3.51quickfox.cn abusing the vendor's own domain space, and jiejie.net).
  • Anti-analysis: Conditional payload delivery based on endpoint fingerprinting; malicious logic hidden inside HTML/JS resources of a legitimate application bundle rather than a standalone executable.

ENDLESSDOORS (Zbtlink Router Backdoor)

  • Attribution: Unknown; the implant is pre-installed in firmware, indicating either manufacturer-level compromise, an OEM supply chain issue, or deliberate inclusion in a shared SDK/codebase.
  • Distribution method: Embedded in shipping firmware of Zbtlink devices and rebadged variants (e.g., Wiflyer). No user action required — devices are compromised out of the box.
  • Payload behavior: Based on the open-source rctl remote administration tool. Provides unauthenticated remote command execution and device control.
  • Persistence mechanism: Resident in firmware; survives reboots and, in many cases, user-initiated factory resets since the implant lives in the stock image.
  • Anti-analysis / masquerading: Runs as userland processes named kworker, imitating legitimate Linux kernel worker threads to evade casual process inspection.
  • C2 communication: Persistent outbound beaconing loop to remote C2 servers from the router itself — meaning the malicious traffic originates from a network edge device most EDR stacks never see.

IOC Analysis

The two pulses contain 138 total indicators across the following types:

IOC TypeExamplesOperational Use
Domains / Hostnamesjiejie.net, www.icloud-cdn.net, cdns3.51quickfox.cnDNS sinkholing, proxy/DNS blocklists, retro-hunt in DNS query logs
File hashes (MD5, SHA256)03fd832b81dd54d2bf5f610a8ff27856, 00a1228648fffa7338076970037b89f679a166a08c4d9573f1f27973ec6ed497EDR blocklists, hash sweeps across endpoints and email/web gateways
CVECVE-2026-66747Asset inventory correlation — identify all Zbtlink/Wiflyer devices on the network

How to operationalize:

  1. Domain indicators should be pushed to DNS resolvers (RPZ), secure web gateways, and firewall blocklists immediately. Then run a retroactive DNS log hunt — the QuickFox campaign has been active since August 2025, so look back at least 13 months.
  2. Hashes should be ingested into your EDR's block/watchlist. MD5s cover the QuickFox trojanized installers; SHA256s cover ENDLESSDOORS implant binaries. Sweep software repositories, download caches, and SMB shares for the installer hashes.
  3. CVE-2026-66747 has no patch in the traditional sense — the fix is device replacement or network isolation. Feed the CVE into your vulnerability management platform and correlate against procurement/CMDB records and passive network fingerprinting (DHCP fingerprints, UPnP banners, MAC OUI lookup for Shenzhen Zhibotong).

Tooling: ingest the OTX pulses directly via the OTX DirectConnect API or TAXII feed into your SIEM/TIP (MISP, OpenCTI, Anomali). YARA rules from the referenced Fortinet and VulnCheck reports can be deployed to endpoint and network scanners for deeper artifact matching.

Detection Engineering

YAML
---
title: QuickFox Trojanized Installer - Electron JavaScript Loader Execution
id: 7a3f1c2e-9d4b-4e8a-b1f5-3c6d2e8a9f01
status: experimental
description: Detects execution of QuickFox Electron application with modified renderer HTML/JavaScript loader associated with the FDMTP supply chain implant (Twill Typhoon)
author: Security Arsenal Threat Intelligence
references:
  - https://www.fortinet.com/blog/threat-research/quickfox-supply-chain-attack-used-to-deploy-fdmtp-implant
date: 2026/09/05
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith:
      - '\quickfox.exe'
      - '\QuickFox.exe'
  selection_child:
    Image|endswith:
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\powershell.exe'
      - '\cmd.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Legitimate QuickFox update activity (rare - Electron apps seldom spawn script interpreters)
level: high
tags:
  - attack.execution
  - attack.t1059
  - attack.t1574.002
---
title: DLL Sideloading from QuickFox Application Directory
id: 8b4e2d3f-0e5c-5f9b-c2a6-4d7e3f9b0a12
status: experimental
description: Detects DLL loading from QuickFox installation paths by non-QuickFox signed processes, consistent with FDMTP implant sideloading behavior
author: Security Arsenal Threat Intelligence
references:
  - https://www.fortinet.com/blog/threat-research/quickfox-supply-chain-attack-used-to-deploy-fdmtp-implant
date: 2026/09/05
logsource:
  category: image_load
  product: windows
detection:
  selection_path:
    ImageLoaded|contains:
      - '\QuickFox\'
      - '\quickfox\'
  selection_temp:
    ImageLoaded|contains:
      - '\AppData\Local\Temp\'
      - '\AppData\Roaming\QuickFox\'
  filter_signed:
    Signed: 'true'
    SignatureStatus: 'valid'
  condition: (selection_path or selection_temp) and not filter_signed
falsepositives:
  - Legitimate unsigned vendor plugins
level: high
tags:
  - attack.persistence
  - attack.t1574.002
  - attack.t1574.001
---
title: QuickFox FDMTP C2 and Staging Domain Resolution
id: 9c5f3e4a-1f6d-6a0c-d3b7-5e8f4a0c1b23
status: experimental
description: Detects DNS resolution of known FDMTP implant staging and C2 domains including lookalike CDN infrastructure
author: Security Arsenal Threat Intelligence
date: 2026/09/05
logsource:
  category: dns
  product: windows
detection:
  selection:
    query|contains:
      - 'jiejie.net'
      - 'icloud-cdn.net'
      - 'cdns3.51quickfox.cn'
  condition: selection
falsepositives:
  - None expected - these are confirmed malicious/typosquat domains
level: critical
tags:
  - attack.command_and_control
  - attack.t1071.001
  - attack.t1583.001
KQL — Microsoft Sentinel / Defender
// QuickFox FDMTP + ENDLESSDOORS supply chain hunt - Microsoft Sentinel
// Hunts for C2 domain contact, QuickFox process anomalies, and suspicious outbound from network edge devices
let lookback = 30d;
let malicious_domains = dynamic(["jiejie.net", "www.icloud-cdn.net", "cdns3.51quickfox.cn"]);
// Part 1: DNS/network connections to FDMTP C2 infrastructure
let dns_hits = DeviceNetworkEvents
| where TimeGenerated > ago(lookback)
| where RemoteUrl has_any (malicious_domains)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteUrl, RemoteIP, RemotePort
| extend Hunt = "FDMTP C2 Contact";
// Part 2: QuickFox spawning unexpected child processes (Electron JS loader behavior)
let proc_hits = DeviceProcessEvents
| where TimeGenerated > ago(lookback)
| where InitiatingProcessFileName =~ "quickfox.exe"
| where FileName in~ ("rundll32.exe", "regsvr32.exe", "powershell.exe", "cmd.exe", "wscript.exe", "cscript.exe", "mshta.exe")
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessCommandLine, SHA256
| extend Hunt = "QuickFox Suspicious Child Process";
// Part 3: Endpoints running trojanized QuickFox installer versions (3.0.51.0 - 3.59.5)
let version_hits = DeviceProcessEvents
| where TimeGenerated > ago(lookback)
| where FileName =~ "quickfox.exe" or ProcessCommandLine has "QuickFox"
| where FileVersion startswith "3."
| project TimeGenerated, DeviceName, FileName, FileVersion, FolderPath, SHA256
| extend Hunt = "Potentially Trojanized QuickFox Version";
union dns_hits, proc_hits, version_hits
| sort by TimeGenerated desc
PowerShell
<#
.SYNOPSIS
  Security Arsenal - Supply Chain Compromise Hunt Script
  Hunts for QuickFox FDMTP implant artifacts and Zbtlink/ENDLESSDOORS exposure indicators
.DESCRIPTION
  Run on endpoints (QuickFox hunt) and use the network section from any management host
  to enumerate potentially backdoored routers (CVE-2026-66747).
#>

$ErrorActionPreference = 'SilentlyContinue'
$report = @()

Write-Host "[*] Security Arsenal Supply Chain Hunt - $(Get-Date)`n" -ForegroundColor Cyan

# --- 1. QuickFox installation and version check ---
Write-Host "[1] Checking for QuickFox installations..." -ForegroundColor Yellow
$quickfoxPaths = @("$env:LOCALAPPDATA\Programs\QuickFox", "$env:ProgramFiles\QuickFox", "${env:ProgramFiles(x86)}\QuickFox", "$env:APPDATA\QuickFox")
foreach ($path in $quickfoxPaths) {
    if (Test-Path $path) {
        $exe = Get-ChildItem -Path $path -Filter "quickfox.exe" -Recurse | Select-Object -First 1
        if ($exe) {
            $ver = $exe.VersionInfo.FileVersion
            $flagged = $false
            # Trojanized range: 3.0.51.0 - 3.59.5
            if ($ver -match '^3\.' ) {
                $parts = $ver -split '\.'
                if ([int]$parts[1] -lt 59 -or ($ver -match '^3\.0\.' -and [int]$parts[2] -ge 51)) { $flagged = $true }
            }
            $report += [PSCustomObject]@{ Check="QuickFox Install"; Path=$exe.FullName; Version=$ver; Risk=$(if($flagged){"HIGH - Trojanized version range"}else{"Review manually"}) }
        }
    }
}

# --- 2. Hash sweep for known trojanized installer MD5s ---
Write-Host "[2] Sweeping Downloads/Temp for known-bad installer hashes..." -ForegroundColor Yellow
$badMD5 = @("03fd832b81dd54d2bf5f610a8ff27856","19e760ee849eb7c1f100f2b7010a763d","1f3031167f94b166cc7b69376a01c124","2dd8681dcd218c88d1c78dfe939ec92b","2ffdcfb7157511789228988e26d06fd6")
$sweepDirs = @("$env:USERPROFILE\Downloads", "$env:TEMP")
foreach ($dir in $sweepDirs) {
    Get-ChildItem -Path $dir -Recurse -File -Include *.exe,*.msi | ForEach-Object {
        $h = (Get-FileHash -Algorithm MD5 $_.FullName).Hash.ToLower()
        if ($badMD5 -contains $h) {
            $report += [PSCustomObject]@{ Check="Malicious Hash Match"; Path=$_.FullName; Version="N/A"; Risk="CRITICAL - Known FDMTP installer" }
        }
    }
}

# --- 3. Suspicious child processes of QuickFox (running now) ---
Write-Host "[3] Checking for QuickFox spawning script interpreters..." -ForegroundColor Yellow
$qf = Get-CimInstance Win32_Process -Filter "Name='quickfox.exe'"
foreach ($proc in $qf) {
    Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq $proc.ProcessId -and $_.Name -match 'rundll32|regsvr32|powershell|cmd|wscript|cscript|mshta' } | ForEach-Object {
        $report += [PSCustomObject]@{ Check="Suspicious Child Proc"; Path=$_.ExecutablePath; Version=$_.CommandLine; Risk="HIGH - Electron loader behavior" }
    }
}

# --- 4. DNS cache check for C2 domains ---
Write-Host "[4] Checking DNS cache for FDMTP C2 domains..." -ForegroundColor Yellow
$c2 = @("jiejie.net","icloud-cdn.net","cdns3.51quickfox.cn")
Get-DnsClientCache | Where-Object { $e=$_.Entry; $c2 | Where-Object { $e -like "*$_*" } } | ForEach-Object {
    $report += [PSCustomObject]@{ Check="C2 DNS Cache Hit"; Path=$_.Entry; Version=$_.Data; Risk="CRITICAL - C2 resolution observed" }
}

# --- 5. Active connections to C2 infrastructure ---
Write-Host "[5] Checking active network connections..." -ForegroundColor Yellow
Get-NetTCPConnection -State Established | ForEach-Object {
    try {
        $ptr = ([System.Net.Dns]::GetHostEntry($_.RemoteAddress)).HostName
        foreach ($d in $c2) { if ($ptr -like "*$d*") {
            $report += [PSCustomObject]@{ Check="Active C2 Connection"; Path="$($_.RemoteAddress):$($_.RemotePort)"; Version=$ptr; Risk="CRITICAL" }
        }}
    } catch {}
}

# --- 6. Network sweep for Zbtlink/Wiflyer routers (run from mgmt host) ---
Write-Host "[6] Enumerating default gateway for Zbtlink MAC OUI / ENDLESSDOORS exposure..." -ForegroundColor Yellow
$gw = (Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Select-Object -First 1).NextHop
if ($gw) {
    $arp = Get-NetNeighbor -IPAddress $gw | Select-Object -First 1
    # Zbtlink OUIs - extend with known Shenzhen Zhibotong prefixes
    $zbtOUI = @("00:0C:43","C8:3A:35","78:A3:51")
    $mac = $arp.LinkLayerAddress
    foreach ($oui in $zbtOUI) {
        if ($mac -like "*$($oui.Replace(':','-'))*") {
            $report += [PSCustomObject]@{ Check="Possible Zbtlink Device"; Path="GW: $gw"; Version="MAC: $mac"; Risk="HIGH - Potential CVE-2026-66747 / ENDLESSDOORS exposure" }
        }
    }
    # Probe for rctl management interface signature
    try {
        $banner = (Invoke-WebRequest -Uri "http://$gw" -TimeoutSec 3 -UseBasicParsing).Content
        if ($banner -match 'zbtlink|zhibotong|wiflyer|rctl') {
            $report += [PSCustomObject]@{ Check="Zbtlink Banner Match"; Path="http://$gw"; Version="Banner fingerprint"; Risk="HIGH - Quarantine device pending CVE-2026-66747 review" }
        }
    } catch {}
}

# --- Report ---
Write-Host "`n===== HUNT RESULTS =====" -ForegroundColor Cyan
if ($report.Count -eq 0) { Write-Host "No indicators found on this host." -ForegroundColor Green }
else {
    $report | Format-Table -AutoSize
    $report | Export-Csv -Path ".\SA_SupplyChain_Hunt_$(Get-Date -Format yyyyMMdd_HHmm).csv" -NoTypeInformation
    Write-Host "Results exported to CSV. Escalate CRITICAL/HIGH findings to IR immediately." -ForegroundColor Red
}

Response Priorities

Immediate (0–4 hours):

  • Block jiejie.net, www.icloud-cdn.net, and cdns3.51quickfox.cn at DNS, proxy, and firewall layers. Ingest all 138 OTX indicators into EDR blocklists and SIEM watchlists.
  • Inventory all QuickFox installations via software inventory/EDR. Any version between 3.0.51.0 and 3.59.5 must be treated as compromised: isolate the host, uninstall, and image if FDMTP staging activity is confirmed.
  • Enumerate the network edge for Zbtlink/Wiflyer-branded routers (MAC OUI, web banner, passive fingerprinting). Place confirmed devices behind a restrictive VLAN with no outbound internet except explicit allowlists — the implant cannot be patched out, only contained or replaced.

24 hours:

  • FDMTP's endpoint fingerprinting and implant staging imply data collection capability. For any host that ran a trojanized QuickFox build, force credential resets for all accounts that authenticated from that machine (domain, VPN, SSO, browser-stored), revoke active sessions/tokens, and review authentication logs for anomalous use since the install date.
  • Retro-hunt DNS and proxy logs back to August 2025 for C2 resolution — the campaign dwell time is long, and first-seen dates will define your exposure window for any disclosure obligations.
  • Audit any traffic traversing a confirmed ENDLESSDOORS router: assume full man-in-the-middle capability and review for intercepted sessions, especially if the device fronts remote workers or IoT/OT segments.

1 week:

  • Replace confirmed backdoored routers. Procurement should add Zbtlink/Zhibotong-manufactured devices and rebadged variants to a restricted-vendor list, and all future network hardware purchases should require firmware provenance attestation and SBOM review.
  • Implement application control policies that block unsigned DLL loads from user-writable application directories, directly countering the DLL sideloading technique used by FDMTP.
  • Deploy egress filtering and DNS monitoring for network infrastructure devices (routers, APs, IoT gateways) — these devices should have near-zero outbound destinations, making C2 beaconing trivially detectable if anyone is watching. Today, almost no one is watching; fix that.
  • Feed both campaigns into your third-party/vendor risk program: software installed by employees (consumer VPNs like QuickFox) and hardware purchased outside IT channels are both unmanaged supply chain surfaces.

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.