Back to Intelligence

BITTER PapRAT Cyberespionage + BADBOX Supply Chain Compromise: OTX Pulse Analysis — Enterprise Detection Pack

SA
Security Arsenal Team
November 3, 2026
11 min read

Two significant threat intelligence pulses published to AlienVault OTX on 2026-11-03 reveal parallel campaigns targeting fundamentally different attack surfaces, yet both demonstrate sophisticated adversary tradecraft requiring immediate enterprise attention.

Campaign 1: BITTER (HAZY TIGER) — PapRAT Cyberespionage

The BITTER advanced persistent threat group, also tracked as HAZY TIGER, has expanded its operational arsenal with a new remote access trojan designated PapRAT. This campaign represents a targeted cyberespionage operation against South Asian organizations, with confirmed targeting of Government and Energy sector entities. The campaign leverages three distinct infection chains: (1) malicious LNK files exploiting the legitimate Windows ftp.exe binary, (2) VHDX virtual disk images containing MSI installers, and (3) URL shortcut files combined with WebDAV for payload delivery. The RAT itself demonstrates notable evolution with a Rust implementation variant, complicating traditional signature-based detection. Alongside PapRAT, operators continue deploying the previously documented WmRAT malware family, suggesting parallel operational infrastructure.

Campaign 2: BADBOX — Massive Supply Chain Compromise

A sprawling supply chain operation has been uncovered affecting MECOOL Android set-top boxes manufactured by Videostrong Technology Co., Ltd. Over 1.3 million devices shipped with the x.cpe backdoor pre-installed at the firmware level, granting operators system-level access through MQTT-based command and control infrastructure. The compromised devices, distributed across the United States, Brazil, China, Germany, Malaysia, and Mexico, function as nodes in a residential proxy network and ad fraud ecosystem. Post-compromise payloads include AdMoyu, Appsalt, APSolo, LinkFog, Gaganode, Nexus, Kimwolf, Honeygain, TitanNet, and Traffmonetizer — a mixture of proxy SDKs, traffic monetization tools, and ad fraud modules.


Threat Actor / Malware Profile

BITTER / HAZY TIGER — PapRAT

Attribution: BITTER is a suspected South Asian state-sponsored threat actor with operational history dating to at least 2013. The group primarily targets government, defense, and energy sector entities in Pakistan, China, Bangladesh, and Saudi Arabia.

PapRAT Technical Profile:

AttributeDetail
TypeRemote Access Trojan
ImplementationPowerShell scripts; Rust-compiled variant identified
DistributionLNK files, VHDX disk images, URL shortcuts with WebDAV
C2 ProtocolHTTP/HTTPS
PersistenceRegistry Run keys, scheduled tasks
Target SectorsGovernment, Energy

Infection Chain Analysis:

  1. LNK + ftp.exe Chain: Malicious LNK files invoke the legitimate Windows ftp.exe binary with attacker-controlled arguments. This Living-off-the-Land (LotL) technique abuses a signed Microsoft binary to download and execute payloads, evading application whitelisting.

  2. VHDX + MSI Chain: Virtual hard disk images containing malicious MSI installers are delivered via phishing. When mounted, the VHDX bypasses Mark-of-the-Web (MOTW) protections that would normally flag downloaded executables.

  3. URL + WebDAV Chain: URL shortcut files (.url) point to WebDAV-hosted payloads. WebDAV traffic often bypasses proxy inspection due to its legitimate use in enterprise environments.

Anti-Analysis Techniques:

  • Rust implementation complicates reverse engineering and signature generation
  • PowerShell-based components execute in-memory
  • Legitimate binary abuse (ftp.exe) evades behavioral detection focused on unsigned executables

BADBOX / x.cpe Backdoor

Attribution: The BADBOX operation involves compromised firmware on Android devices manufactured by Videostrong Technology Co., Ltd. Whether this represents intentional manufacturer involvement or supply chain infiltration remains under investigation.

x.cpe Technical Profile:

AttributeDetail
TypeFirmware-level backdoor
DistributionPre-installed on MECOOL Android set-top boxes
C2 ProtocolMQTT (Message Queuing Telemetry Transport)
Access LevelSystem/root
Affected Devices1.3+ million globally

Payload Ecosystem:

PayloadFunction
Honeygain, TraffmonetizerResidential proxy SDKs — sell victim bandwidth
AdMoyu, Appsalt, APSoloAd fraud modules — generate fraudulent ad clicks
Gaganode, TitanNetP2P bandwidth sharing / proxy networks
KimwolfAdditional proxy/monetization module
LinkFog, NexusSupporting infrastructure components

Operational Impact: Infected devices function as residential proxy nodes, enabling attackers to route malicious traffic through victim IP addresses. This obfuscates attack origins and enables ad fraud at scale.


IOC Analysis

BITTER PapRAT Indicators

The BITTER pulse contains 30 indicators comprising:

C2 Domains (6 identified):

  • techtalkhelp.com
  • netmansrvdns.com
  • rivingtonclarks.com
  • felixfuturenext.com
  • goodnfortunes.com
  • rappellingaart.com

These domains exhibit patterns consistent with attacker-registered infrastructure: generic naming conventions suggesting legitimate tech support or business services, likely registered through privacy-protected registrars.

File Hashes (24 SHA256): Full payload hashes enabling retrospective analysis and proactive blocking.

BADBOX Indicators

The BADBOX pulse contains 400 indicators including:

  • IPv4 Addresses: C2 and infrastructure IPs (e.g., 219.134.163.210)
  • Hostnames: Payload delivery and C2 endpoints (e.g., api.package.coreservice.io, bmw.bestipip.com)
  • File Hashes: APK and payload hashes for forensic identification

SOC Operationalization

IOC TypeActionTooling
DomainsBlock at DNS resolver, add to proxy blocklistPi-hole, Cisco Umbrella, Palo Alto DNS Security
IPsBlock at firewall, add to SIEM watchlistpfSense, FortiGate, CrowdStrike Falcon
File HashesAdd to EDR blocklist, scan historical executionsMicrosoft Defender, SentinelOne, VirusTotal Enterprise
MQTT TrafficAlert on non-standard MQTT ports/destinationsZeek, Suricata, network segmentation

VirusTotal Enterprise: Upload file hashes for retro-hunt across historical submissions.

Maltego: Pivot on C2 domains to identify related infrastructure via passive DNS and certificate transparency logs.


Detection Engineering

YAML
---
title: BITTER PapRAT - LNK File Invoking FTP.exe
id: 8f3e2a1c-4b5d-4e6f-9a7b-1c2d3e4f5a6b
status: experimental
description: Detects malicious LNK files invoking Windows ftp.exe, a known BITTER PapRAT infection vector
author: Security Arsenal Threat Intelligence
date: 2026/11/03
references:
    - https://www.fortinet.com/blog/threat-research/bitter-expands-its-arsenal-with-paprat
logsource:
    category: process_creation
    product: windows
detection:
    selection_parent:
        ParentImage|endswith: '\explorer.exe'
    selection_image:
        Image|endswith: '\ftp.exe'
    selection_cmdline:
        CommandLine|contains:
            - '-s:'
            - '-A'
    condition: selection_parent and selection_image and selection_cmdline
falsepositives:
    - Legitimate FTP automation scripts (rare via Explorer)
level: high
tags:
    - attack.execution
    - attack.t1218
    - attack.t1218.011

---
title: BITTER PapRAT - VHDX Mount Followed By MSI Execution
id: 9a4f3b2d-5c6e-5f7a-8b9c-2d3e4f5a6b7c
status: experimental
description: Detects VHDX file mount followed by MSI installer execution, a BITTER PapRAT delivery method
author: Security Arsenal Threat Intelligence
date: 2026/11/03
references:
    - https://www.fortinet.com/blog/threat-research/bitter-expands-its-arsenal-with-paprat
logsource:
    category: process_creation
    product: windows
detection:
    selection_msiexec:
        Image|endswith: '\msiexec.exe'
    selection_vhdx_path:
        CommandLine|contains:
            - '.vhdx'
            - 'vhd'
    timeframe: 5m
    condition: selection_msiexec and selection_vhdx_path
falsepositives:
    - IT administrators deploying software from VHDX images
level: high
tags:
    - attack.execution
    - attack.t1204
    - attack.t1204.002

---
title: BADBOX - Suspicious MQTT C2 Communication
id: 1b5c4d3e-6f7a-6b8c-9d0e-3f4a5b6c7d8e
status: experimental
description: Detects MQTT connections to suspicious external IPs, potential BADBOX x.cpe backdoor C2
author: Security Arsenal Threat Intelligence
date: 2026/11/03
references:
    - https://synthient.com/blog/the-internals-of-a-badbox-operation
logsource:
    category: network_connection
    product: windows
detection:
    selection_mqtt_port:
        DestinationPort:
            - 1883
            - 8883
    selection_external:
        DestinationIp|cidr:
            - '0.0.0.0/0'
    filter_internal:
        DestinationIp|cidr:
            - '10.0.0.0/8'
            - '172.16.0.0/12'
            - '192.168.0.0/16'
    filter_known:
        DestinationHostname|contains:
            - 'amazonaws.com'
            - 'azure.com'
            - 'googlecloud.com'
    condition: selection_mqtt_port and selection_external and not filter_internal and not filter_known
falsepositives:
    - Legitimate IoT device telemetry
    - Development/testing MQTT connections
level: medium
tags:
    - attack.command_and_control
    - attack.t1071
KQL — Microsoft Sentinel / Defender
// BITTER PapRAT + BADBOX Hunt Query
// Hunt for infection artifacts and C2 communication

let bitter_domains = dynamic([
    "techtalkhelp.com",
    "netmansrvdns.com",
    "rivingtonclarks.com",
    "felixfuturenext.com",
    "goodnfortunes.com",
    "rappellingaart.com"
]);
let badbox_ips = dynamic([
    "219.134.163.210"
]);
let badbox_hostnames = dynamic([
    "api.package.coreservice.io",
    "bmw.bestipip.com"
]);

// Union all detection logic
union isfuzzy=true
    // BITTER: FTP.exe spawned from LNK/Explorer
    (DeviceProcessEvents
    | where TimeGenerated > ago(7d)
    | where FileName =~ "ftp.exe"
    | where InitiatingProcessFileName =~ "explorer.exe"
    | where ProcessCommandLine has_any ("-s:", "-A")
    | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, DetectionType="BITTER_FTP_LOLBIN"),
    
    // BITTER: MSI execution with VHDX reference
    (DeviceProcessEvents
    | where TimeGenerated > ago(7d)
    | where FileName =~ "msiexec.exe"
    | where ProcessCommandLine has_any (".vhdx", ".vhd")
    | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, DetectionType="BITTER_VHDX_MSI"),
    
    // BITTER: Network connections to C2 domains
    (DeviceNetworkEvents
    | where TimeGenerated > ago(7d)
    | where RemoteUrl has_any (bitter_domains)
    | project TimeGenerated, DeviceName, RemoteUrl, RemoteIP, InitiatingProcessFileName, DetectionType="BITTER_C2_DOMAIN"),
    
    // BADBOX: Connections to known bad IPs
    (DeviceNetworkEvents
    | where TimeGenerated > ago(7d)
    | where RemoteIP in (badbox_ips)
    | project TimeGenerated, DeviceName, RemoteIP, RemotePort, InitiatingProcessFileName, DetectionType="BADBOX_C2_IP"),
    
    // BADBOX: Connections to known bad hostnames
    (DeviceNetworkEvents
    | where TimeGenerated > ago(7d)
    | where RemoteUrl has_any (badbox_hostnames)
    | project TimeGenerated, DeviceName, RemoteUrl, RemoteIP, InitiatingProcessFileName, DetectionType="BADBOX_C2_HOSTNAME"),
    
    // BADBOX: MQTT traffic to external IPs
    (DeviceNetworkEvents
    | where TimeGenerated > ago(7d)
    | where RemotePort in (1883, 8883)
    | where not(RemoteIP startswith "10.")
    | where not(RemoteIP startswith "192.168.")
    | where not(RemoteIP startswith "172.")
    | project TimeGenerated, DeviceName, RemoteIP, RemotePort, InitiatingProcessFileName, DetectionType="BADBOX_MQTT_EXTERNAL")

| sort by TimeGenerated desc
PowerShell
# BITTER PapRAT + BADBOX IOC Hunt Script
# Checks for registry persistence, suspicious files, and network connections
# Requires: Administrative privileges, PowerShell 5.1+

Write-Host "=== BITTER PapRAT + BADBOX IOC Hunt ===" -ForegroundColor Cyan
Write-Host "Scan started: $(Get-Date)" -ForegroundColor Gray

$findings = @()

# BITTER C2 Domains
$bitterDomains = @(
    "techtalkhelp.com",
    "netmansrvdns.com",
    "rivingtonclarks.com",
    "felixfuturenext.com",
    "goodnfortunes.com",
    "rappellingaart.com"
)

# BADBOX Infrastructure
$badboxIPs = @("219.134.163.210")
$badboxHosts = @("api.package.coreservice.io", "bmw.bestipip.com")

# Known malicious hashes
$maliciousHashes = @(
    "a3081df333ca7f18bd90d10a45125ab5011dcf9d2806feae2935f09cab07da4c",
    "ccefbdec2718d864d9d33c743aabfcef88a8d7904d1c598bfcf15cf5f3591c88"
)

# Check 1: Registry Run Keys for suspicious entries
Write-Host "`n[*] Checking Registry Run Keys..." -ForegroundColor Yellow
$runKeys = @(
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
    "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
    "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run"
)

foreach ($key in $runKeys) {
    if (Test-Path $key) {
        $entries = Get-ItemProperty -Path $key -ErrorAction SilentlyContinue
        $entries.PSObject.Properties | ForEach-Object {
            $value = $_.Value
            if ($value -match "powershell|ftp\.exe|msiexec|\.vhdx|\.lnk" -and $value -notmatch "Windows|Microsoft|Defender") {
                $findings += [PSCustomObject]@{
                    Type = "Registry Persistence"
                    Location = "$key\$($_.Name)"
                    Value = $value
                    Severity = "HIGH"
                }
                Write-Host "  [!] Suspicious Run Key: $($_.Name) = $value" -ForegroundColor Red
            }
        }
    }
}

# Check 2: Scheduled Tasks for suspicious entries
Write-Host "`n[*] Checking Scheduled Tasks..." -ForegroundColor Yellow
$tasks = Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object {
    $_.TaskPath -notlike "\Microsoft*" -and 
    ($_.Actions.Execute -match "powershell|ftp|msiexec" -or $_.Actions.Arguments -match "-enc|-w hidden|iex")
}
foreach ($task in $tasks) {
    $findings += [PSCustomObject]@{
        Type = "Scheduled Task"
        Location = $task.TaskPath + $task.TaskName
        Value = "$($task.Actions.Execute) $($task.Actions.Arguments)"
        Severity = "HIGH"
    }
    Write-Host "  [!] Suspicious Task: $($task.TaskName)" -ForegroundColor Red
}

# Check 3: Active network connections to C2 infrastructure
Write-Host "`n[*] Checking Active Network Connections..." -ForegroundColor Yellow
$connections = Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue
foreach ($conn in $connections) {
    try {
        $resolved = [System.Net.Dns]::GetHostEntry($conn.RemoteAddress).HostName
    } catch {
        $resolved = $null
    }
    
    # Check BADBOX IPs
    if ($badboxIPs -contains $conn.RemoteAddress) {
        $findings += [PSCustomObject]@{
            Type = "C2 Connection"
            Location = $conn.RemoteAddress
            Value = "BADBOX C2 - Port $($conn.RemotePort)"
            Severity = "CRITICAL"
        }
        Write-Host "  [!!!] BADBOX C2 Connection: $($conn.RemoteAddress):$($conn.RemotePort)" -ForegroundColor Red
    }
    
    # Check MQTT ports to external IPs
    if (($conn.RemotePort -eq 1883 -or $conn.RemotePort -eq 8883) -and 
        $conn.RemoteAddress -notmatch "^(10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.)") {
        $findings += [PSCustomObject]@{
            Type = "MQTT External"
            Location = "$($conn.RemoteAddress):$($conn.RemotePort)"
            Value = "Potential BADBOX x.cpe C2"
            Severity = "HIGH"
        }
        Write-Host "  [!] External MQTT: $($conn.RemoteAddress):$($conn.RemotePort)" -ForegroundColor Red
    }
}

# Check 4: DNS cache for BITTER domains
Write-Host "`n[*] Checking DNS Cache for BITTER C2..." -ForegroundColor Yellow
$dnsCache = Get-DnsClientCache -ErrorAction SilentlyContinue
foreach ($entry in $dnsCache) {
    foreach ($domain in $bitterDomains) {
        if ($entry.Name -like "*$domain*") {
            $findings += [PSCustomObject]@{
                Type = "DNS Resolution"
                Location = $entry.Name
                Value = "BITTER C2 Domain Resolved"
                Severity = "CRITICAL"
            }
            Write-Host "  [!!!] BITTER C2 in DNS Cache: $($entry.Name)" -ForegroundColor Red
        }
    }
}

# Check 5: Recent LNK files in suspicious locations
Write-Host "`n[*] Checking for Recent LNK Files..." -ForegroundColor Yellow
$lnkPaths = @("$env:TEMP", "$env:APPDATA", "$env:USERPROFILE\Downloads")
foreach ($path in $lnkPaths) {
    if (Test-Path $path) {
        Get-ChildItem -Path $path -Filter "*.lnk" -ErrorAction SilentlyContinue | 
        Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } | 
        ForEach-Object {
            $findings += [PSCustomObject]@{
                Type = "Recent LNK File"
                Location = $_.FullName
                Value = "Modified: $($_.LastWriteTime)"
                Severity = "MEDIUM"
            }
            Write-Host "  [?] Recent LNK: $($_.FullName)" -ForegroundColor Yellow
        }
    }
}

# Summary
Write-Host "`n=== HUNT COMPLETE ===" -ForegroundColor Cyan
Write-Host "Total findings: $($findings.Count)" -ForegroundColor $(if ($findings.Count -gt 0) { "Red" } else { "Green" })

if ($findings.Count -gt 0) {
    Write-Host "`nFindings exported to: .\ioc_hunt_findings_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -ForegroundColor Yellow
    $findings | Export-Csv -Path ".\ioc_hunt_findings_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
}

$findings | Format-Table -AutoSize

Response Priorities

Immediate (0-4 Hours)

ActionRationale
Block BITTER C2 domains at DNS resolverPrevents callback for any active infections
Block BADBOX IPs and hostnames at firewallCuts C2 for x.cpe backdoor
Deploy Sigma rules to SIEMEnables detection of infection attempts
Execute IOC hunt script on critical systemsIdentifies existing compromises
Audit MQTT traffic to external IPsBADBOX uses MQTT for C2

24 Hours

ActionRationale
Review authentication logs for South Asian-facing infrastructureBITTER targets government/energy; verify no credential access
Inventory Android/IoT devices for MECOOL productsIdentify BADBOX exposure
Hunt for ftp.exe execution anomaliesLNK-based infection chain indicator
Scan for VHDX files in email gatewaysSecond infection vector
Review PowerShell logging for encoded commandsPapRAT uses PowerShell components

1 Week

ActionRationale
Implement LNK file execution restrictionsGPO/AppLocker to prevent LNK abuse
Disable or restrict WebDAV clientBlocks URL+WebDAV infection chain
Segment IoT devices on isolated VLANContains BADBOX-compromised devices
Deploy network-based MQTT inspectionDetect x.cpe C2 patterns
Establish supply chain verification for hardwarePrevent future BADBOX-type compromises

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.