A routine WordPress plugin closure turned into a multi-month investigation after a security researcher noticed something unusual in the repository cleanup: the WordPress.org Plugin Review Team had deleted a single binary file from a closed captcha plugin rather than simply pulling the listing. That detail was enough to unravel a coordinated malware campaign spanning 42 plugins, 19 anonymous accounts, and 13 years of activity on WordPress.org.

The file in question was wp-math-captcha.dat, a zlib-compressed blob sitting inside wp-advanced-math-captcha, a plugin with roughly 6,000 active installs. Decompressing it revealed a PHP dropper branded with the name SiteGuarding — a website security company — complete with a comment block dated March 2020. The dropper wrote a remote-access backdoor called siteguarding_tools.php into the WordPress root directory, then silently reported the site’s URL to apitest.siteguarding.com to register the new infection before deleting itself.

A researcher pins a blank index card onto a wooden evidence board strung with red thread connecting other cards.

13 Years of WordPress Backdoors Traced to One Operator

The captcha plugin was not working alone. Its source code contained a hardcoded reference to a separate plugin, image-optimizer-x, as a forced-install target — a mechanism to push a second plugin onto sites already running the first. That second plugin, on December 16 2024, had grown a 981-line file embedding two RSA private keys and a file downloader pointed at api.cmsplughub.com. According to the researcher, a DNS lookup on that domain found it hosted on SiteGuarding’s own nameservers and IP address, on a server named server2.siteguarding.com. The researcher attributes all three accounts — @siteguarding, @lulub5592, and @dalielsam — to the same operator.

  • The captcha plugin’s dropper planted the identical backdoor, same MD5 hash, found across 15 plugins in the original 2013–2020 @siteguarding portfolio
  • The captcha plugin hardcoded the image optimizer as a forced-install target, linking the two anonymous accounts
  • The image optimizer’s backend domain ran on SiteGuarding’s own infrastructure, closing the attribution loop
  • Both burner accounts were closed by WordPress.org on the same day — April 7, 2026 — after a coordinated rollout 30 days apart the previous winter

The original @siteguarding account had published 27 plugins between 2013 and 2020, every one of which was closed by WordPress.org in a single sweep between May 4 and June 5, 2020. Analysis of those plugins found that 15 shipped the siteguarding_tools.php backdoor inline — including plugins marketed as security tools such as wp-admin-protection, wp-badbot-protection, and toxic-links-scanner. The remaining 12 phoned home to siteguarding.com on their own schedule without an inline payload, including the portfolio’s largest plugin, wp-antivirus-site-protection, which had over 4,000 active installs and had been calling home since 2014.

The researcher’s systematic sweeps of the closed-plugin corpus uncovered six additional burner plugins beyond the initial two. Three surfaced because WordPress.org had force-pushed remediation commits at the time of closure — a step the team typically takes after confirming malware. One of those, wp-plugin-management, included an admin notice that named all three command-and-control domains verbatim and described the attack in plain language to affected site owners. Three more emerged from a second sweep that decoded every non-PHP data file in the closed-plugin archive, catching payloads disguised under .dat, .gzs, and .bin extensions.

The later-generation plugins introduced a persistence technique absent from the 2013 portfolio: patching wp-config.php directly with an include_once statement so the payload loads before WordPress boots, surviving both plugin deactivation and deletion. One plugin, cls-lcp-issues-fix, also downloaded a fresh payload encoded with ionCube — a commercial PHP obfuscator — from SiteGuarding’s servers on each run, allowing the operator to swap the live malware server-side at any time without touching the plugin itself.

In total the investigation attributed 42 plugins across 19 WordPress.org accounts to a single operator running consistent infrastructure from 2013 through at least early 2026. Sites that installed any of these plugins between those dates — particularly anything branded as a security, antivirus, or optimization tool from the accounts named — should audit their WordPress root directories and wp-config.php for the presence of siteguarding_tools.php or unexpected include_once injections.