340,000+
Control Web Panel instances exposed to the public internet over the past month, per XLab's internet-wide scan -- each a potential CWPdoor target once an attacker obtains root access on the host
0 / 63
Antivirus detection rate for the trojanized cwpsrv binary at time of disclosure -- every engine on VirusTotal returned a clean result, defeating signature-based endpoint protection entirely
2,000+
Linux servers confirmed compromised by CWPdoor in XLab's November 2026 disclosure -- a figure that likely undercounts active infections due to the backdoor's log-suppression design
5 min
RSA signature timestamp validity window for CWPdoor command activation -- trigger requests outside this window are silently rejected, preventing replay attacks against captured activation packets

Reach 50,000+ security professionals

Sponsor a newsletter slot and put your brand in front of CISOs, engineers, and IT decision-makers.

Summarize with:

CWPdoor backdoors Linux servers by replacing the cwpsrv web server binary in Control Web Panel installations with a fully recompiled version confirmed on more than 2,000 servers and undetected by all 63 antivirus engines tested on VirusTotal. XLab researchers at QiAnXin disclosed the campaign in November 2026 after identifying a trojanized installer on VirusTotal and tracing it to a download server at 136.0.141.71 hosting backdoored builds for two specific CWP versions.

The attack begins with a shell script named cwpsrv_update.sh that masquerades as a routine CWP update. Executing as root, the script connects to 136.0.141.71, downloads a recompiled cwpsrv binary matching the target's installed version (1.15.10 or 1.24.0), replaces the legitimate binary at /usr/local/cwpsrv/bin/cwpsrv, and uses the touch command to restore the original file timestamps. After replacement, the binary serves legitimate web panel traffic while simultaneously monitoring every incoming HTTP request for a header named X-Ngx-Integrity. When the header carries a valid RSA signature and a timestamp within a five-minute window, the backdoor decrypts and executes the embedded command -- and suppresses the triggering request from the server's access log entirely.

This matters now because CWP is widely deployed across shared hosting environments, VPS platforms, and web hosting providers. XLab's internet-wide scan found more than 340,000 CWP instances publicly exposed over the past month. The attack requires root access to install, arriving as persistence after initial compromise rather than as the initial exploit itself. If you operate Control Web Panel, treating binary integrity verification as a mandatory security check today -- not a future audit item -- is the single most effective action you can take. A host-based md5sum check takes under two minutes and definitively confirms or clears infection.

How CWPdoor Replaces the cwpsrv Web Server Binary

The installation flow begins with cwpsrv_update.sh executing as root on the target. The script reads the installed CWP version string and immediately exits if the version does not match 1.15.10 or 1.24.0 -- the two builds for which the attacker prepared a recompiled backdoored binary. For matching versions, the script downloads the backdoored binary from 136.0.141.71 using curl or wget, writes it to /usr/local/cwpsrv/bin/cwpsrv, then executes a touch command that restores the original file's access time and modification time to their pre-replacement values. File system integrity checkers comparing timestamps will find no anomaly.

The cwpsrv binary serves a dual purpose after replacement. It handles legitimate web panel traffic identically to the unmodified build while simultaneously scanning every incoming HTTP request for a custom header. The trigger mechanism uses RSA asymmetric cryptography: the attacker signs a command payload with a private key, embeds the signature in an X-Ngx-Integrity header, and sends the request to the server. The backdoor verifies the RSA signature and checks that the timestamp in the header falls within a five-minute window of current server time. Both checks must pass before the payload decrypts. This design prevents replay attacks -- a captured trigger request cannot be reused more than five minutes later -- and ensures that only the operator holding the private signing key can issue commands.

The final evasion layer sits in cwpsrv's logging module. CWPdoor intercepts the logging call that would normally write the triggering request to the web server's access log and suppresses the entry before it reaches disk. From an access log perspective, the trigger request never arrived. The combined effect -- unchanged timestamps, zero AV signatures, and suppressed logs -- means that standard defensive telemetry provides no alert.

Attack Chain: From Root Access to Silent Persistence

CWPdoor installs as a persistence mechanism after initial compromise, not as the initial exploit. The attacker first needs root access through a separate vulnerability or credential compromise. Once that foothold is established, the attack chain proceeds through five stages that collectively result in a deniable, persistent backdoor that survives server reboots and CWP service restarts.

The binary replacement technique maps directly to MITRE ATT&CK T1195.002 (Supply Chain Compromise: Compromise Software Supply Chain) and T1036.005 (Masquerading: Match Legitimate Name or Location). The timestamp restoration aligns with T1070.006 (Indicator Removal: Timestomp). Command decryption maps to T1140 (Deobfuscate/Decode Files or Information) and execution through the trigger aligns with T1059.004 (Command and Scripting Interpreter: Unix Shell) and T1562.006 (Impair Defenses: Indicator Blocking).

The sophistication of the RSA signing requirement is notable. Most opportunistic Linux backdoors use simple authentication mechanisms -- hardcoded passwords, plaintext keys stored in the binary, or no authentication at all. CWPdoor's RSA-with-timestamp design requires the attacker to hold a private signing key and generate fresh signatures per command, adding operational security at the cost of deployment complexity. This pattern is consistent with an operator who expected their infrastructure to remain active for an extended period and needed to protect already-deployed backdoors from hijacking by other threat actors.

1

Obtain root access

T1078

Attacker gains root on the target Linux server via a separate vulnerability, brute-forced SSH credentials, compromised CWP admin account, or exploited web application. CWPdoor itself is not the initial access vector.

2

Deploy installer script

T1105

Attacker places and executes cwpsrv_update.sh as root. The script connects to 136.0.141.71 and downloads the version-matched trojanized cwpsrv binary using curl or wget.

3

Replace cwpsrv binary

T1195.002

Installer overwrites /usr/local/cwpsrv/bin/cwpsrv with the backdoored build. The binary continues serving legitimate CWP web panel traffic with no visible behavioral change.

4

Restore file timestamps

T1070.006

Installer uses the touch command to restore the original atime and mtime of the replaced binary, defeating file-age-based change detection and timestamp-aware integrity monitoring.

5

Activate backdoor with signed header

T1140

Attacker sends HTTP request containing X-Ngx-Integrity header with RSA-signed payload and current timestamp. Backdoor validates signature and 5-minute window before decrypting the command.

6

Execute command, suppress log entry

T1562.006

Backdoor executes the decrypted command as root and intercepts the web server logging call, preventing the triggering request from appearing in cwpsrv's access log.

Free daily briefing

Briefings like this, every morning before 9am.

Threat intel, active CVEs, and campaign alerts, distilled for practitioners. 50,000+ subscribers. No noise.

Scope: 340,000 Exposed Linux Servers

Control Web Panel is deployed predominantly on CentOS, Rocky Linux, AlmaLinux, and similar RHEL-derivative distributions. It is a full-featured hosting control panel managing web servers, email, DNS, databases, and system users from a single interface. Because of this breadth of system access, cwpsrv runs with root privileges on most deployments.

XLab's internet-facing scan identified more than 340,000 CWP instances publicly reachable over a 30-day measurement period. Confirmed compromises stand at over 2,000 servers, but XLab notes that the log-suppression design makes passive identification difficult: standard log review will not surface CWPdoor activity, and the zero antivirus detection rate means endpoint protection products provide no independent signal. The true infection count is unknown.

The same VirusTotal archive that contained the CWPdoor installer also contained a sample of Ebury, an SSH credential stealer linked to a financially motivated criminal group that has targeted Linux hosting infrastructure since 2009. The co-presence suggests possible operational overlap between CWPdoor operators and Ebury's operators, though XLab explicitly notes this connection is unconfirmed. If CWPdoor is confirmed on a server, check for Ebury indicators simultaneously.

The campaign's target selection -- specifically two of the most common CWP production versions -- and the RSA-signed command protocol indicate a threat actor with operational security sophistication beyond opportunistic mass exploitation. Version-specific recompiled binaries require preparation and testing against those exact builds. The operators chose not to use a generic binary dropper or a simple shell listener, trading easy deployment for resistance to analysis and hijacking.

Indicators of Compromise and CWPdoor Infrastructure

The CWPdoor campaign's confirmed indicators are specific but not exhaustive. Because the attackers recompile the binary, additional samples with different hashes may exist beyond XLab's published values. Hash matching confirms known samples; a negative hash result does not confirm a clean binary. Behavioral indicators -- the Unix socket and HTTP header pattern -- are more reliable detection signals than hashes alone.

Block 136.0.141.71 at your perimeter firewall to prevent download of new backdoored binaries. This does not affect already-deployed backdoors but stops fresh installations on newly compromised hosts. Any outbound connections from cwpsrv to external IP addresses warrant investigation, as legitimate cwpsrv does not make outbound connections during normal operation.

The ngx_http_integrity_helper Unix socket is the most decisive host-based indicator. Run ss -xlp | grep ngx_http_integrity_helper on any CWP server: a non-empty result confirms an active CWPdoor infection regardless of binary hash. The X-Ngx-Integrity HTTP header pattern is the network-layer trigger; WAF rules blocking requests containing this header prevent remote command execution through an already-installed backdoor and provide detection telemetry for identifying servers under attack.

Subscribe to unlock Indicators of Compromise

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Sigma Detection Rules for CWPdoor

Two rules cover CWPdoor's most observable behaviors: file replacement at the cwpsrv binary path and presence of the X-Ngx-Integrity activation header in HTTP traffic. Both carry experimental status -- validate log source availability in your environment before enabling automated blocking.

Subscribe to unlock Sigma Detection Rules

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Subscribe to unlock Sigma Hunt Queries

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Subscribe to unlock WAF Detection Rules

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Remediation: Verify Binary Integrity and Block Lateral Access

The first action is verifying whether the cwpsrv binary has been replaced, which takes under two minutes on any system with md5sum installed. All further remediation depends on this result. If the hash matches a known backdoored build, treat the entire server as compromised -- not just the CWP service -- because the backdoor's root-level execution means every credential and file on the system must be treated as potentially accessed.

A "can't patch today" note: if the server cannot be taken offline for a full rebuild, the minimum interim steps are to verify and replace the binary, block 136.0.141.71 at the upstream firewall, and immediately rotate all credentials. These steps reduce ongoing risk but are not a substitute for a full rebuild from known-good media.

Most urgent if you operate CWP versions 1.15.10 or 1.24.0 on internet-exposed Linux servers, run shared hosting environments where multiple tenants' data is at risk, or manage VPS fleets where cwpsrv runs with root privileges on hundreds of hosts.

Subscribe to unlock Remediation & Mitigation steps

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

If You Are Already Compromised

These steps apply if the binary hash check or socket check confirms CWPdoor is active on your server. CWPdoor operates at root level, so the response must treat the entire system as compromised, not only the CWP service.

Subscribe to unlock Incident Response guidance

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Why CWPdoor Matters for Shared Hosting and VPS Operators

Hosting providers managing hundreds or thousands of tenant servers face a specific challenge with CWPdoor: the attack operates entirely within a process that must run with root privileges for legitimate reasons. Standard privilege separation techniques do not apply because CWP's architecture requires root access to provision web server configurations, manage system users, and handle DNS changes. The process you cannot sandbox is the one that is backdoored.

The scale of CWP's public exposure -- 340,000+ internet-facing instances -- reflects how common it is in the budget and mid-market hosting segment. Many of these deployments run on under-resourced VPS instances where endpoint detection agents, file integrity monitoring, and centralized log aggregation are absent. Attackers who compromise such servers through credential stuffing, known vulnerabilities in upstream software, or phishing for server credentials gain access to environments where the only barrier between initial access and persistent backdoor installation is the absence of the installer script.

The connection to Ebury is significant for hosting operators specifically. Ebury's operators have targeted Linux hosting providers since at least 2014, using SSH credential harvesting to pivot from compromised server to compromised server within shared infrastructure. If CWPdoor's operators are related to Ebury's, the exposure surface extends beyond the CWP panel to every SSH key and credential on a compromised server and potentially to other servers in the same hosting environment.

For comparison, the GhostAction supply chain campaign followed a similar pattern of attacker-controlled update mechanisms used to compromise developer infrastructure at scale. The common thread is that software update paths represent trusted execution contexts that bypass most security controls -- binary signing and integrity verification at update time are the only reliable defenses.

The bottom line

CWPdoor proves that production Linux servers require active binary integrity verification, not passive antivirus scanning. The trojanized cwpsrv binary deceived every antivirus engine, restored file timestamps to defeat age-based checks, and suppressed activation log entries -- defeating three common Linux detection methods simultaneously. With more than 340,000 exposed CWP instances and 2,000 confirmed compromises, the campaign is active now. Verify your cwpsrv binary hash today, block 136.0.141.71 at your perimeter, and deploy WAF rules against the X-Ngx-Integrity trigger header before attackers use an already-installed backdoor to rotate back into compromised infrastructure.

This analysis is generic. create a free account to score threats like this against your own stack.

Frequently asked questions

What is CWPdoor malware?

CWPdoor is a Linux backdoor that replaces the cwpsrv web server binary in Control Web Panel (CWP) installations with a recompiled version containing hidden backdoor code. The trojanized binary operates identically to the legitimate cwpsrv in all visible respects -- serving web panel traffic, maintaining normal process behavior -- while simultaneously scanning every incoming HTTP request for a custom X-Ngx-Integrity activation header. When a valid trigger arrives, it executes hidden attacker commands without recording any trace in the web server's access logs. XLab researchers at QiAnXin disclosed the campaign in November 2026 after finding the installer on VirusTotal.

Which Control Web Panel versions are affected by CWPdoor?

XLab's research identifies the CWPdoor installer as targeting two specific CWP versions: 1.15.10 and 1.24.0. The installer script verifies the installed version before downloading the matching backdoored binary and exits without action if the version does not match. CWP installations on other versions may not be susceptible to this specific installer, but the technique of replacing a privileged binary with a trojanized version is not version-dependent. Any CWP installation where an attacker obtains root access is a viable target for a manually placed backdoor.

How does CWPdoor avoid antivirus detection?

CWPdoor evades antivirus detection through three mechanisms. First, the backdoor is embedded in a fully recompiled cwpsrv binary -- not patched or appended -- so its code layout does not match any known malware signature. Second, the installer restores the original file timestamps after replacing the binary, defeating time-based change detection. Third, the backdoor suppresses its own activation log entries by interfering with the logging module before the triggering request reaches disk. At disclosure, 63 tested antivirus engines returned zero detections. Hash-based scanning alone will also miss recompiled variants carrying different checksums.

How do I know if my Control Web Panel server has CWPdoor installed?

Three checks confirm infection. First, run md5sum /usr/local/cwpsrv/bin/cwpsrv and compare the output to XLab's published hashes: 965aea67fb40de1bab5169ada993349f (v1.15.10) or d3f4e95113d49ab3991b45e457bda75b (v1.24.0). A match confirms a known backdoored build. Second, run ss -xlp | grep ngx_http_integrity_helper -- any output confirms the Unix socket used by CWPdoor is active. Third, verify the binary against the official CWP package using rpm -V or the package manager equivalent for your distribution. A mismatch on any of these checks warrants treating the server as compromised.

What credentials and data can CWPdoor attackers access?

CWPdoor gives attackers root-level command execution on the compromised Linux server. From that position they can read every file on the system, dump database credentials from application configuration files, harvest SSH private keys and authorized_keys files, extract CWP admin passwords, read cloud provider credential files and environment variables, and capture data processed by any service running on the server. Because cwpsrv runs as root on most CWP installations, there is no privilege boundary that limits what the backdoor can reach.

How do I remove CWPdoor from an infected server?

Complete removal requires rebuilding the server from a known-good image because root-level compromise means every file on the system must be treated as potentially modified. If immediate rebuild is not possible: stop the cwpsrv service, reinstall the binary from the official CWP repository and verify the replacement hash matches the vendor-published checksum, restart the service, block 136.0.141.71 at your perimeter firewall, and rotate all credentials accessible from the server including SSH keys, database passwords, CWP admin credentials, API tokens, and cloud provider keys. Document this as a temporary measure, not a final remediation.

What is the connection between CWPdoor and the Ebury SSH backdoor?

A VirusTotal upload on September 30, 2026 contained both the CWPdoor installer and a sample of Ebury, an SSH credential stealer that has targeted Linux hosting infrastructure since 2009. The co-presence suggests possible operational overlap between the two threat actors, but XLab explicitly notes the relationship remains unconfirmed. Treat both as potentially present on any server where either is found. If CWPdoor is confirmed, also check for unauthorized additions to ~/.ssh/authorized_keys and signs of SSH credential harvesting consistent with Ebury's known TTPs.

Can a WAF in front of my CWP server block CWPdoor activation?

Yes, with caveats. A WAF configured to block or alert on HTTP requests containing the X-Ngx-Integrity header will prevent attackers from triggering CWPdoor remotely. All major WAF platforms support matching on custom HTTP headers. Deploy WAF rules in log-only mode first to verify no legitimate traffic carries this header, then switch to block mode. Blocking the trigger header does not remove an existing infection -- it only prevents command execution through the backdoor while remediation proceeds. Use WAF rules as a containment measure, not as a substitute for binary verification and server rebuild.

Sources & references

  1. XLab (QiAnXin): CWPdoor -- Linux Backdoor in Control Web Panel cwpsrv
  2. The Hacker News: Hackers Hide Linux Backdoor in Control Web Panel Server
  3. ThreatDefence: CWPdoor CWP Backdoor Detection, Hunting and IOCs
  4. BleepingComputer: Hackers backdoor Linux servers using trojanized CWP web server
  5. ESET: Ebury is alive but unseen (SSH credential stealer co-found with CWPdoor)
Summarize with:

Free resources

25
Free download

Critical CVE Reference Card 2025–2026

25 actively exploited vulnerabilities with CVSS scores, exploit status, and patch availability. Print it, pin it, share it with your SOC team.

No spam. Unsubscribe anytime.

Free download

Ransomware Incident Response Playbook

Step-by-step 24-hour IR checklist covering detection, containment, eradication, and recovery. Built for SOC teams, IR leads, and CISOs.

No spam. Unsubscribe anytime.

Follow Decryption Digest

Daily briefings + Google Top Stories in one step.

Enter your email and we'll subscribe you to the daily briefing and add Decryption Digest to your Google Search feed at the same time.

Free. Unsubscribe anytime. Google popup confirms the Top Stories add.

Eric Bang
Author

Founder & Cybersecurity Evangelist, Decryption Digest

Cybersecurity professional with expertise in threat intelligence, vulnerability research, and enterprise security. Covers zero-days, ransomware, and nation-state operations for 50,000+ security professionals every morning.

Daily Briefing

Get briefings like this every morning

Actionable threat intelligence for working practitioners. Free. No spam. Trusted by 50,000+ SOC analysts, CISOs, and security engineers.

Unsubscribe anytime.

Mythos Brief

Anthropic's AI finds zero-days your scanners miss.