P.K. SHARMA

Cyber security intelligence, AI governance, practitioner analysis

Threat actors backdoor Linux servers with trojanized Control Web Panel binary

Threat actors have compromised Linux web hosting infrastructure with CWPdoor, an invisible passive backdoor compiled into the Control Web Panel web server binary that suppresses access logging and responds to cryptographically signed headers.

By · LinkedIn · · 5 min read

Key facts

Discovery timeline and 340,000-server attack surface

On Thursday 5 November 2026, cybersecurity threat research team QiAnXin XLab and BleepingComputer revealed the discovery of CWPdoor, a highly covert Linux backdoor embedded directly into the dedicated web server of Control Web Panel (CWP). Formerly known as CentOS Web Panel, CWP is an open-source graphical server management interface used by hosting providers to administer Apache, Nginx, PHP, email, DNS, and database services.

Telemetry from QiAnXin's Hunter platform revealed that over 340,000 CWP servers were directly accessible from the public internet during October 2026. The threat actors initially deployed a staging script named cwpsrv_update.sh, first captured by threat intelligence systems on 29 June 2026. The script fetches precompiled replacement binaries from a remote server (136.0.141.71) targeting cwpsrv versions 1.15.10 and 1.24.0. The installer overwrites /usr/local/cwpsrv/bin/cwpsrv and uses timestamp-cloning utilities (touch -r) so that file metadata appears unaltered.

CWPdoor passive backdoor triggering and execution lifecycle.

Chronological development and detection timeline of the CWPdoor campaign

DateCampaign EventTechnical ObservationAnalytical Significance
29 June 2026Delivery Script Capturecwpsrv_update.sh retrieved from 136.0.141.71First sensor detection of automated binary replacement
30 September 2026In-the-Wild Victim Sampleevidencia.tgz uploaded to VirusTotal from Brazil93 days after initial script capture; zero AV detection (derived)
5 November 2026Public Vulnerability ReportFull technical analysis published by XLab and BleepingComputer129 days elapsed across investigation lifecycle (derived)

The campaign reached active in-the-wild exploitation on 30 September 2026, when an incident response archive (evidencia.tgz) was uploaded to VirusTotal from Brazil. The archive contained both an Ebury (Windigo) SSH credential-stealing module and a trojanized cwpsrv binary. While antivirus engines flagged Ebury, the detection rate for the trojanized cwpsrv binary was exactly zero percent.

Passive triggering and cryptographic header verification

CWPdoor avoids detection by operating without persistent outbound socket connections or background polling loops. The trojanized binary embeds malicious execution logic directly into the Nginx source code that powers cwpsrv. During routine web traffic, the server behaves identically to a legitimate management interface, answering administrative requests without anomaly.

Backdoor routines activate only when an inbound HTTP or HTTPS request contains three specific request headers: X-Ngx-Integrity-Time, X-Ngx-Integrity-Sig, and X-Ngx-Integrity-Data. The function ngx_http_integrity_check inspects these headers at the entry point of ngx_http_process_request before standard URL routing occurs.

Triad header cryptographic validation parameters

HTTP Header FieldCryptographic SchemeOperational PurposeDefensive Evasion Impact
X-Ngx-Integrity-TimeUnix Epoch TimestampReplay protection window (±300 seconds, derived)Prevents packet replay attacks across network captures
X-Ngx-Integrity-SigRSA-2048 Digital SignatureVerifies authenticity of concatenated Time:Data stringRestricts trigger capability strictly to private key holder
X-Ngx-Integrity-DataAES-256-CBC CiphertextBase64-encoded command string (16-byte IV prefixed)Obfuscates shell commands inside encrypted ciphertext

The 2048-bit RSA public key embedded in the binary is obfuscated using single-byte XOR key 0x55 (85 decimal, derived). When verification succeeds, the master process derives an AES key from the SHA-256 digest of the RSA public key string, decrypts the command payload, and forwards it across a dedicated local Unix domain socket named ngx_http_integrity_helper to a background helper child process for execution.

In-memory module context manipulation for log evasion

Beyond passive triggering, CWPdoor implements an in-memory defense mechanism that neutralizes forensic auditing. In standard Nginx architectures, every completed HTTP transaction triggers the ngx_http_log_handler function to write client IP addresses, timestamps, request paths, and HTTP status codes into access.log.

Nginx in-memory module context manipulation for access log suppression.

During server initialization, the function ngx_http_integrity_init scans the global ngx_modules array to locate and cache the specific index assigned to the HTTP logging module. When a legitimate client visits the server, logging proceeds normally. However, when an incoming request matches the backdoor trigger, CWPdoor tampers with that request's internal module context array, replacing the logging module pointer with a NULL or dummy reference.

When Nginx reaches the logging execution phase, it encounters the invalid context pointer and silently bypasses log generation. The command execution result is returned to the attacker as an encrypted binary blob inside an HTTP 200 response with the header Content-Type: application/octet-stream, leaving zero entries in /usr/local/cwpsrv/logs/access.log.

Detection indicators and server triage protocol

Because CWPdoor generates no external network connections, leaves zero access log entries, and mimics legitimate timestamps via touch -r, traditional signature-based monitoring and file timestamp audits are insufficient. System administrators must inspect active operating system state directly.

Control Web Panel server inspection and triage matrix.

Recommended administrative commands for CWPdoor detection and remediation

Audit PhaseInspection CommandExpected Clean OutputCompromise Indicator
Socket Auditss -axp | grep integrityZero results returnedActive socket: ngx_http_integrity_helper
Process Auditps aux | grep cwpsrvOnly master and legitimate worker poolUnparented or anomalous helper child process
Binary Stringsstrings /usr/local/cwpsrv/bin/cwpsrv | grep X-Ngx-IntegrityZero matches in official releaseStrings matching X-Ngx-Integrity headers
Binary Hashmd5sum /usr/local/cwpsrv/bin/cwpsrvOfficial vendor package checksumMatches 965aea67... or d3f4e951...

If an infection is identified, administrators should immediately restore uncompromised binaries from legitimate pre-update backups (such as cwpsrv.prev-*), reinstall Control Web Panel from official vendor repositories, and perform full credential rotation across all Linux root accounts, web panel users, database passwords, and SSH authorized keys.

Sources

  1. PrimaryCWPdoor: The Invisible Backdoor Living Inside Control Web Panel, 5 November 2026: Technical report by QiAnXin XLab detailing passive execution, header verification, and in-memory log evasionQiAnXin XLabaccessed 2026-11-05
  2. PrimaryHackers backdoor Linux servers using trojanized CWP web server, 5 November 2026: Security reporting by Bill Toulas on CWPdoor distribution, Hunter telemetry, and victim infectionsBleepingComputeraccessed 2026-11-05

Share this briefing

Know someone who owns this problem? Send it to them.

Related briefings

The briefing, in your inbox

Practitioner analysis of cyber and AI security news. No vendor noise.

How often

Every new briefing in one email, at 7am, or at 7am, 12:30pm and 6pm. Nothing is sent when nothing is new. Unsubscribe any time.