10/27/2026

Master Guardian: Pharma Spam Network Hiding as a Security Plugin

‍

‍

‍

‍

Between early and late October, Monarx observed files from this toolkit spread across numerous hosting accounts and over a thousand servers, reported by dozens of hosting partners. Activity jumped in late October, when a second layer of the toolkit appeared, and has grown every day since. Event counts are significantly larger than account counts because the plugin rebuilds itself every few minutes. Monarx automatically recognized and quarantined all the file events logged. Even when the plugin rewrote itself, we automatically eliminated the main control plugin alongside all the others.

What the attacker installs

The toolkit is a set of plugins that all list the same fake author, "SiteGuard Tools". Each one has a harmless-sounding description. Together they publish the spam, hide it, and keep it alive.

ComponentWhat it claimsWhat it actually does
Master Guardian (plugin)"Deploys and protects managed plugins"Keeps the rest of the toolkit running. It re-activates anything switched off, restores deleted files, and downloads fresh copies from a private GitHub repository if its own files are damaged. It hides its own update notices and turns on auto-update for itself.
Watch Guardian (plugin)"Watchdog and ClickFix protection"Reinstalls Master Guardian if it is removed and loads a script from hxxps://sverigegladtid[.]com/guard.js and other compromised domains. guard.js might appear clean but the operator can change that script at any time.
Defence Spam Protection (plugin)"Spam, block and scan"Permanently deletes any post that mentions casino or gambling words, and deletes test pages named ivermectin-page. It reports the site's address and spam count to a remote server on the first visit. Its scanner and settings switch are protected by a password that is the same on every site.
pono.php (hidden in wp-admin/network/)MaliciousThe publishing backdoor. It needs no login: whoever sends it a request can create a published post or page with any HTML. It then tells the operator the address of each new page.
Webpage Schema Markup (plugin)"Structured data for content pages"Adds fake product ratings, review counts, prices and manufacturer names to the spam pages so search engines show them like real pharmacy listings.
Content Tweaks (plugin)"Fixes sitemap.xml routing"Hides every post written by one fixed user from the WordPress admin, post counts, archives and dashboard. It adds five or six links to the spam pages in every page footer, positioned far off-screen. It forces a sitemap so search engines find the spam.
guardian-watch.php (mu-plugins)"guard ClickFix"It's a must-use plugin (a watchdog that WordPress always loads) whose job is keeping master-guardian installed. If the plugin is missing, damaged or modified, it deletes the folder and reinstalls it from the GitHub repo navishtah/master-guardian.
clickfix-guard.php (plugin)"ClickFix Guard"It presents itself as a plugin that blocks fake-CAPTCHA and ClickFix overlays. That is the trick where a page tells the victim to press Win+R, paste a command and hit Enter.
products.phpData tableA pharmacy product catalogue. The biggest categories are erectile dysfunction (111 entries), hypertension (74), antibiotics (60), depression (41) and type 2 diabetes (34).

The design is the point. If an owner deletes one plugin, another restores it. If the owner looks at their posts, the spam is not listed.

What the attacker is after

This is an SEO spam operation, search engines trust established websites far more than new pharmacy sites, so attackers borrow that trust by publishing their pages on hacked ones.

The code shows how the operation is run:

  • Pages are made to order. pono.php accepts a title, body, image and drug name. The plugin stores the drug and a target country with each post, and the schema plugin builds prices in that country's currency. If no job is sent, the script fetches one from boostrabcdn[.]com or any other compromised domain.
  • The operator keeps a list of live pages. After each post is created, the script sends its address back to an address the operator supplies, so they know what to submit to search engines.
  • Rivals are removed. Defence Spam deletes posts with casino and gambling words. Those are the topics other spam operators use on the same hacked sites, so the "anti-spam" feature clears the way for the pharma pages.
  • The owner is kept in the dark. Posts by one hidden user are removed from every admin list and count. The hidden footer links only matter to search engines.
  • The spam is dressed up as shopping results. The fake ratings, review counts and prices are the details search engines use for product listings.

Monarx can see the plugins and the pages' publishing mechanics. We do not see the page contents or where visitors end up, because the text comes from the operator's servers when each page is created.

Is this a known campaign?

We did not find a public report that names it. Three public reports describe the same family of problem:

  • Pharma spam on hacked sites is an old, steady business. Attackers breaking into legitimate sites to promote prescription drugs, because search engines rank trusted domains more readily than new shady pharmacies.
  • Fake plugins on hacked WordPress sites are not new either. Rapid7 reported a ClickFix campaign on more than 250 compromised WordPress sites in at least 12 countries, active since December 2025. How the attackers got in was not confirmed.

What looks different here:

  • The pages are published as normal posts on the victim's own domain, through a publishing backdoor, and not as redirects or loose HTML files.
  • The operator hides the posts from the owner by user ID, so they never appear in the admin.
  • The toolkit presents itself as security software, and rebuilds itself from a private GitHub repository when removed.
  • The "anti-spam" code deletes other spammers' posts.

Indicators of compromise

Addresses and domains are written with brackets so they cannot be clicked by accident. Attackers can change infrastructure at any time, so use these as a starting point for log review, not as a blocklist.

Files and folders

Path / IndicatorDetails
wp-content/plugins/master-guardian/Contains a bundle/ folder
wp-content/plugins/watch-guardian/, defence-spam/, webpage-schema-markup/, content-tweaks/
wp-content/mu-plugins/clickfix-guard.php, guardian-watch.php
wp-admin/network/pono.phpPublishing backdoor script
wp-content/uploads/sps-data/bad-list.txtSpam keyword blocklist file
Plugin author nameShown as "SiteGuard Tools"

In the database

Database field / EntityIndicator details
Posts and pagesAuthored by malicious users
Post meta fields_rx_drug, _rx_country, _rx_description
Options tableOption names beginning with guardian_ or sps_

Domains

DomainRole / Path
boostrabcdn[.]comSpam job feed (path: /wcs/json_data.txt)
sverigegladtid[.]comRemote script hosting (file: guard.js)
pedalritterinnen[.]atReceives telemetry report from sites (path: /wp-content/plugins/light/assets/assets.php; likely a compromised site)
github[.]comPrivate repository: navishtah/master-guardian (access token hardcoded in plugin)

IP addresses seen performing admin actions

IP addressLocation
31[.]43[.]163[.]83NL
45[.]227[.]254[.]5PA
185[.]92[.]26[.]176CA
178[.]89[.]133[.]117KZ
45[.]227[.]254[.]49PA
163[.]171[.]161[.]46GB
91[.]191[.]209[.]78BG
84[.]13[.]129[.]116SA
64[.]31[.]3[.]126US

File hashes (SHA-256)

FileSHA-256
master-guardian.phpa7ffb2663bb0c4b0f85b0e01734da9603d13f3834082d9d0c1cb584287c608f1
watch-guardian.phpd1b0fd0d62fd1b18319ce840c62454c7733dd688582cd43ba229e26a639566a2
watch-guardian.phpeb3d25bab97297e5698210567784f7448c4c3e5e1cb35b971622a6e969db2b89
defence-spam.phpbe0bfb3b1af7a2bcf858a84b189120b53955c46ec05d1c639c214cfd66d512f0
defence-spam.php86f78617b30e7beb32d3cb3c517dc104334505064410f525287f95e0839643f6
spam.php (Defence Spam payload)9dd79afd3643d35978b18f50b34b81153cddb417c50a3a4548d4018720efb87b
spam.php (Defence Spam payload)ec80d7c9b657d0964ee830c50a6a235be9e6c82004891aecee509fceabef27e1
pono.phpae2c6b9aa8a43d393ea9f88194b2d1943ff0c3ff6f88752bcc47672d16ed051c
pono.phpf694ef60c8c42d169ed276e6754381f4d861d27778ecef0c2cbbce91ade5828c
webpage-schema-markup.php9b854fc187c20b94eccf8a17157dceeeb07b1392570b93392775d92139c2ceff
clickfix-guard.php8fd8359b004332e9c2744bfdc819ed9b8ffaa06e7c21596dfc7bba08a4aca711
clickfix-guard.php79a6798f06d2108829fab8a836f4417f5071900683b606c80f285403c12db75a

Recommended actions for website owners

If any of the files above are on your site, treat it as fully compromised. Deactivating the plugins in the WordPress screen will not work, because they switch each other back on.

  • Check for the toolkit. Look in wp-content/plugins/ and wp-content/mu-plugins/ for the folders and files listed above, and check wp-admin/network/ for pono.php. Must-use plugins do not show in the normal plugin list, so check the folder itself.
  • Limit admin access while you clean. The plugins reinstall themselves when someone loads the admin area. Put the site in maintenance mode or restrict /wp-admin/ by IP address.
  • Delete the files from the server, all at once. Use SFTP, SSH or your host's file manager. Remove Master Guardian and Watch Guardian together, then the other plugins, the two mu-plugins and pono.php. Check again after ten minutes to confirm nothing came back.
  • Remove the spam content. Find posts and pages written by malicious admin users, and anything with _rx_drug meta. Delete them, along with the guardian_ and sps_ options.
  • Change every credential. Reset all administrator passwords, end all active sessions, and look for admin users you do not recognize. Also change hosting, SFTP, SSH and database passwords. The campaign relies on stolen admin logins.
  • Turn on two-factor login for every administrator account.
  • Remove what let them in. Delete file-manager plugins you do not need.
  • Clean up search results. Search Google for site:yourdomain.com plus drug names, remove the spam URLs in Search Console, and resubmit your real sitemap.
  • Review your logs for logins and plugin installs from the IP addresses above.

Recommended actions for hosting providers

  • Search your servers for the plugin folder names, pono.php, and the hashes above, including mu-plugins folders.
  • Alert on plugin installs and logins to many unrelated sites from a single IP address. Two addresses in this campaign did exactly that on hundreds of sites.
  • Block or watch outbound requests to the three domains above and to GitHub's API from web processes.
  • Do not rely on quarantine alone. Remove Master Guardian and Watch Guardian first, or the toolkit will rebuild itself.

Ready for next‑gen AI Server Security?

Start your Monarx journey in minutes