Audit #14 Cleaned
Show full summary
Confirmed malicious supply-chain compromise. Between 2024-04-05 and 2024-06-22 the WarfarePlugins wp.org committer account was used to push six tagged releases (4.4.6.4, 4.4.6.5, 4.4.6.6, 4.4.6.8, 4.4.6.9, 4.4.7.1) containing two distinct backdoors. The wp.org Plugin Review Team detected the compromise on or before 2024-06-24, deleted all six malicious tags from public SVN (only baselines 4.4.6.3 and 4.4.7.2 remain in tags/ today), forced the cleanup release 4.4.7.2, and published an advisory on the plugin's support forum. The plugin returned to legitimate maintainer control; current trunk (v4.5.6 as of 2025-03-18) is clean.
This audit is retrospective — the compromise has been remediated for ~22 months. Purpose: extract IOCs into the catalog so any historical or future re-emergence on other plugins is detected automatically.
Two backdoor mechanisms in social-warfare.php:
1. PHP-side persistence (my_admin_init_function) — runs on admin_init, gated by a my_admin_init_function_run option flag so it only fires once per site. Reads wp-config.php to extract DB credentials + table prefix, opens a direct mysqli connection bypassing WordPress, and inserts a backdoor admin user. Username string evolved across iterations: Options (4.4.6.4) → PluginAUTH (4.4.7.1). Phones home to attacker C2 with admin URL + created username.
2. JS-side keylogger (add_footer_script) — attached to wp_footer, emits a <script> that:
- Loads
https://94.156.79.8/sc-top.js(raw IP, no DNS) - Generates a 10-char random UID, persists in cookie
xcnmo-offsetgxc; path=/ - Listens to all
inputevents, sending(uid, field-name, base64(value))tohttps://hostpdf.co/pinche.phpon every keystroke into a non-button input - Captures admin credentials (
wp-adminlogin forms), customer payment details (WooCommerce checkout), anything typed into a form field on any page of the compromised site
Multi-CMS recon component. The PHP backdoor goes beyond WordPress — it walks the parent filesystem looking for $config['encryption_key'] (PrestaShop), prestashop, drupal, Symfony\Component markers and reports each found install to https://94.156.79.8/CMSUsers. Indicates the operator targets shared/multi-app hosting environments and treats any compromise as a beachhead for fleet-wide enumeration.
Operator OPSEC indicators. The malicious commit also added:
assets/images/admin-options-page/Thumbs.db— Windows Explorer thumbnail cache file (committed by accident)- CRLF line endings on
assets/js/admin.jsandlib/options/SWP_Option_Abstract.php(otherwise byte-identical to baseline) — the attacker re-saved these files in a Windows editor while making their changes
The Thumbs.db artifact + CRLF re-saves are inadvertent indicators that the attacker edited the trunk on a Windows workstation. Not actionable as detection on their own but worth catalogued as a corroborating signal class.
The plugin has been remediated. This audit is retained as a public record of the incident and the IOCs.
If you run social-warfare on your site
Verify your install matches the wp.org canonical version:
wp plugin verify-checksums social-warfare
A patched build isn't yet published for this audit. Check the security advisories index or remove the plugin until one is available.
Or remove the plugin entirely:
wp plugin deactivate social-warfare
wp plugin delete social-warfare
Plugins under the same committer's SVN access
warfareplugins holds push access to 1 plugin totalling 20k+ active installs.
IOCs extracted (17)
| Kind | Value | Confidence |
|---|---|---|
| changelog_phrase | 2024.06.22 MASTER |
medium |
| code_pattern | $username = 'Options' |
medium |
| code_pattern | add_footer_script |
medium |
| code_pattern | my_admin_init_function |
high |
| code_pattern | my_admin_init_function_run |
high |
| code_pattern | PluginAUTH |
high |
| code_pattern | xcnmo-offsetgxc |
high |
| domain | hostpdf.co |
high |
| filename | assets/images/admin-options-page/Thumbs.db |
medium |
| filename | lib/utilities/.idea |
medium |
| ip | 94.156.79.8 |
high |
| url | https://94.156.79.8/sc-top.js |
high |
| url | https://hostpdf.co/pinche.php |
high |
| url_path | /AddSites |
high |
| url_path | /CMSUsers |
high |
| url_path | /pinche.php |
high |
| url_path | /sc-top.js |
medium |
Plugin version history
Every release on wp.org for this plugin, color-coded by relationship to the incident. The compromise window shows where the wp.org Plugin Review Team deleted the malicious tags from SVN — those versions cannot be re-downloaded today.
-
Clean 60 earlier releases before the incident
-
1.4.8 -
2.0.4 -
2.2.2 -
2.2.3 -
2.2.4 -
2.2.5 -
2.2.6 -
2.2.7 -
2.2.8 -
2.2.9 -
2.2.10 -
2.2.11 -
2.3.0 -
2.3.1 -
2.3.2 -
2.3.3 -
2.3.5 -
3.0.0 -
3.0.1 -
2.3.4 -
3.0.5 -
3.0.6 -
3.0.8 -
3.0.9 -
3.1.0 -
3.1.1 -
3.2.0 -
3.2.1 -
3.2.2 -
3.3.0 -
3.3.1 -
3.3.2 -
3.3.3 -
3.4.0 -
3.4.1 -
3.4.2 -
3.5.0 -
3.5.1 -
3.5.2 -
3.5.3 -
3.5.4 -
3.6.0 -
3.6.1 -
4.0.0 -
4.0.1 -
4.0.2 -
4.1.0 -
4.2.0 -
4.2.1 -
4.3.0 -
4.4.0 -
4.4.1 -
4.4.2 -
4.4.3 -
4.4.4 -
4.4.5 -
4.4.5.1 -
4.4.6 -
4.4.6.1 -
4.4.6.2
-
-
4.4.6.3Last clean Last clean release before incident -
4.4.7.2PRT cleanup PRT cleanup release — incident closed -
4.4.7.3Clean Clean (post-cleanup) -
4.4.8Clean Clean (post-cleanup) -
4.5.0Clean Clean (post-cleanup) -
4.5.1Clean Clean (post-cleanup) -
4.5.2Clean Clean (post-cleanup) -
4.5.3Clean Clean (post-cleanup) -
4.5.4Clean Clean (post-cleanup) -
4.5.5Clean Clean (post-cleanup) -
4.5.6Current Current release
Audit #14 — social-warfare
- Plugin: social-warfare (Social Sharing Plugin – Social Warfare)
- Active installs: 20,000 (was 50,000+ pre-incident, 80,000+ at all-time peak)
- Event: #1355
prt_forum_advisory· high · 2026-04-27 - Source incident: PRT advisory thread 2024-06-24, "A Security Message from the Plugin Review Team"
- Baseline version:
4.4.6.3(last clean — released 2024-04-04) - Compromise window head:
4.4.7.1(last malicious — released 2024-06-22) - First clean cleanup:
4.4.7.2(released 2024-06-24, same day as PRT advisory) - Working dir:
/tmp/wpbeacon-audits/audit-14
Summary
Confirmed malicious supply-chain compromise. Between 2024-04-05 and 2024-06-22 the WarfarePlugins wp.org committer account was used to push six tagged releases (4.4.6.4, 4.4.6.5, 4.4.6.6, 4.4.6.8, 4.4.6.9, 4.4.7.1) containing two distinct backdoors. The wp.org Plugin Review Team detected the compromise on or before 2024-06-24, deleted all six malicious tags from public SVN (only baselines 4.4.6.3 and 4.4.7.2 remain in tags/ today), forced the cleanup release 4.4.7.2, and published an advisory on the plugin's support forum. The plugin returned to legitimate maintainer control; current trunk (v4.5.6 as of 2025-03-18) is clean.
This audit is retrospective — the compromise has been remediated for ~22 months. Purpose: extract IOCs into the catalog so any historical or future re-emergence on other plugins is detected automatically.
Two backdoor mechanisms in social-warfare.php:
1. PHP-side persistence (my_admin_init_function) — runs on admin_init, gated by a my_admin_init_function_run option flag so it only fires once per site. Reads wp-config.php to extract DB credentials + table prefix, opens a direct mysqli connection bypassing WordPress, and inserts a backdoor admin user. Username string evolved across iterations: Options (4.4.6.4) → PluginAUTH (4.4.7.1). Phones home to attacker C2 with admin URL + created username.
2. JS-side keylogger (add_footer_script) — attached to wp_footer, emits a <script> that:
- Loads
https://94.156.79.8/sc-top.js(raw IP, no DNS) - Generates a 10-char random UID, persists in cookie
xcnmo-offsetgxc; path=/ - Listens to all
inputevents, sending(uid, field-name, base64(value))tohttps://hostpdf.co/pinche.phpon every keystroke into a non-button input - Captures admin credentials (
wp-adminlogin forms), customer payment details (WooCommerce checkout), anything typed into a form field on any page of the compromised site
Multi-CMS recon component. The PHP backdoor goes beyond WordPress — it walks the parent filesystem looking for $config['encryption_key'] (PrestaShop), prestashop, drupal, Symfony\Component markers and reports each found install to https://94.156.79.8/CMSUsers. Indicates the operator targets shared/multi-app hosting environments and treats any compromise as a beachhead for fleet-wide enumeration.
Operator OPSEC indicators. The malicious commit also added:
assets/images/admin-options-page/Thumbs.db— Windows Explorer thumbnail cache file (committed by accident)- CRLF line endings on
assets/js/admin.jsandlib/options/SWP_Option_Abstract.php(otherwise byte-identical to baseline) — the attacker re-saved these files in a Windows editor while making their changes
The Thumbs.db artifact + CRLF re-saves are inadvertent indicators that the attacker edited the trunk on a Windows workstation. Not actionable as detection on their own but worth catalogued as a corroborating signal class.
Exposure
At the time of compromise the plugin had ~80,000+ active installs. ~20,000 today suggests significant churn after the incident. Every site that auto-updated during the 2024-04-05 → 2024-06-22 window:
- Has (or had) backdoor admin user
OptionsorPluginAUTHinwp_users - Has (or had)
my_admin_init_function_run = yesinwp_options - Was registered with the operator's C2 at
94.156.79.8/AddSites - Had the JS keylogger active on every page until updated to 4.4.7.2+
Verdict
malicious
Added files (3)
SECURITY.md— added by legitimate maintainer in the cleanup releaseassets/images/admin-options-page/Thumbs.db— attacker dev-environment artifactlib/utilities/.idea— JetBrains project metadata, also attacker dev-environment artifact
IOCs to extract
- kind: ip, value: 94.156.79.8, confidence: high
- kind: domain, value: hostpdf.co, confidence: high
- kind: url, value: https://94.156.79.8/sc-top.js, confidence: high
- kind: url, value: https://94.156.79.8/AddSites, confidence: high
- kind: url, value: https://94.156.79.8/FCS, confidence: high
- kind: url, value: https://94.156.79.8/CMSUsers, confidence: high
- kind: url, value: https://hostpdf.co/pinche.php, confidence: high
- kind: url_path, value: /sc-top.js, confidence: medium
- kind: url_path, value: /AddSites, confidence: high
- kind: url_path, value: /CMSUsers, confidence: high
- kind: url_path, value: /pinche.php, confidence: high
- kind: code_pattern, value: xcnmo-offsetgxc, confidence: high
- kind: code_pattern, value: my_admin_init_function, confidence: high
- kind: code_pattern, value: my_admin_init_function_run, confidence: high
- kind: code_pattern, value: PluginAUTH, confidence: high
- kind: code_pattern, value: $username = 'Options', confidence: medium
- kind: code_pattern, value: add_footer_script, confidence: medium
- kind: filename, value: assets/images/admin-options-page/Thumbs.db, confidence: medium
- kind: filename, value: lib/utilities/.idea, confidence: medium
- kind: changelog_phrase, value: 2024.04.05 MASTER, confidence: medium
- kind: changelog_phrase, value: 2024.06.22 MASTER, confidence: medium
Notes
- All malicious code paths were committed under the legitimate
WarfarePluginsSVN account — i.e., the wp.org credentials for the official maintainer were compromised, NOT a takeover-by-acquisition. This places the incident in the same class as the broader June 2024 wp.org credential-stuffing wave (forminator, wpcode-lite, social-warfare, blogvault, others). Thecompromised_committer_burstrule is the structural detector for this class. - The two iterations of the payload (2024-04-05 vs 2024-06-22 SWP_DEV_VERSION strings, Options→PluginAUTH username swap, refactored echo→silent error handling) suggest the operator iterated the backdoor based on observation of which sites were getting cleaned up. This is sustained presence, not a smash-and-grab.
- The same C2 infrastructure (
94.156.79.8) was reportedly used in attacks on other plugins during the same wave. Cross-checking other 2024 PRT advisories against this IP could surface additional plugins that haven't been publicly attributed yet.