Audit #34 Suspicious
Show full summary
Verdict: SUSPICIOUS. Speedy Go v2.1.0 (released 2026-05-04) is a hostile-shape release pushed to the wp.org slug under the legitimate author's account. The changelog literally advertises "Bypassed all API key and license verification requirements. The plugin now functions as a full version," the class-license-verifier.php file is gutted to return true for every method, the canonical vendor API constant CNC_SG_API_URL = 'https://speedygo.io' is removed, and the telemetry endpoint is rerouted from a Hostinger staging URL to a 24-year-old aged domain (wordpress-plugins.pro) whose ownership we cannot tie to the named author. The author of record (codeandcore, Code and Core Tech LLP, India) has been the consistent committer since the plugin's first release in October 2025, but the legitimate vendor product speedygo.io is still actively selling Pro licenses — making the "we removed all licensing" narrative internally inconsistent. Either the wp.org SVN credentials were compromised and an attacker pushed a cracked + telemetry-rerouted build, or the author intentionally undercut their own paid SaaS in a way that mimics every cracked-release fingerprint. Until codeandcore confirms in their own communication channel that v2.1.0 was their intentional release, we do not consider it safe.
No active malware payload was found. A full file-by-file review of v2.1.0 came up clean on every supply-chain primitive: no eval of HTTP response, no Plugin Update Checker hijack, no $_FILES + include chain, no writes to wp-config.php or .htaccess that execute PHP, no obfuscation, no time-bombs, no magic-header backdoors. The diff is overwhelmingly subtractive — 2,741 lines deleted, 103 added — there is simply no new code in which to hide a backdoor. The single-line URL swap in includes/telemetry.php (red-fly-431376.hostingersite.com/receiver.php → wordpress-plugins.pro/receiver.php) is fire-and-forget; the response body is never retrieved, decrypted, or executed.
Why we still mark it suspicious. The shape matches the early-stage of a supply-chain attack: (1) push a "trust-establishing" release that gives existing free users a perceived upgrade ("now everything's free!"), (2) redirect telemetry to attacker-controlled infrastructure to build an install inventory, (3) follow up with a future weaponized update on top of the expanded user base. We have seen this exact playbook before (audit #12 — scroll-top / Benjamin / @milkitall — followed the same telemetry-first, weaponize-second pattern). Without vendor confirmation that codeandcore intentionally released v2.1.0 with this content, the conservative posture is to flag and wait.
What to do as a site admin running speedy-go. Until a verdict update lands here: do NOT update to v2.1.0. If you've already updated, you can either roll back to v2.0.3 (download from the wp.org "Advanced View" page) or remove the plugin entirely. The plugin's caching/minification features can be replaced by any of several alternatives (W3 Total Cache, WP Super Cache, LiteSpeed Cache) that are not under suspicion. There is no evidence of code execution against your site — the worst case is that your site URL + WP version + theme info has been added to the wordpress-plugins.pro install inventory, which is metadata you've likely already exposed publicly via your site's HTML headers.
Not yet confirmed malicious. Site owners should treat with caution; plugin author should review the cleanup steps.
If you run speedy-go on your site
Verify your install matches the wp.org canonical version:
wp plugin verify-checksums speedy-go
A patched build isn't yet published for this audit. Check the security advisories index or remove the plugin until one is available.
Plugins under the same committer's SVN access
codeandcore holds push access to 6 plugins totalling 350 active installs. Each non-target plugin scans clean today but represents a one-commit hijack opportunity.
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 5 earlier releases before the incident
-
1.0.0 -
1.0.1 -
2.0.0 -
2.0.1 -
2.0.2
-
-
2.0.3Last clean Last clean release before incident -
2.1.0PRT cleanup PRT cleanup release — incident closed -
2.1.1Current Current release
Timeline
- 2024-04-24 —
codeandcorewp.org account created (display name "Code and Core", India, employer "Code and core Tech LLP") - 2025-10-29 — Speedy Go v1.0.0 published.
plugin-masterinitial commit; immediately followed bycodeandcorefirst commit ("Initial release") - 2026-02-24 — v1.0.1 ("premium Telemetry redesign and critical branding refactored for better compliance and security")
- 2026-03-03 → 2026-03-16 — v2.0.0 → v2.0.3 (incremental updates)
- 2026-05-04 15:21:41 UTC — v2.1.0 ("Major update: Offline activation enabled")
All 11 wp.org SVN commits across the plugin's lifetime have been by the same author (codeandcore). The Author URI in the plugin header (https://codeandcore.com) is unchanged across all releases.
What v2.1.0 changed
Diff stats: 103 insertions, 2,741 deletions across 28 files.
Removed (deletions)
assets/css/admin-bar.css,admin-debug.css,dashboard-widget.css,notices.css,popup-modal.css,select2.min.css— premium admin UI stylesassets/images/speedtest-pro-banner.png,webp-pro-banner.png— pro-tier upgrade bannersassets/js/admin-bar-progress.js,admin-debug.js,chart.js,dashboard-widget.js,popup-modal.js,select2.min.js— premium admin UI behaviorsincludes/admin-connection.php— license-key entry / connection page (127 lines)includes/admin-pagespeed.php— PageSpeed dashboard (71 lines)includes/admin-webp-settings.php— WebP conversion settings (67 lines)includes/api-key-api.php— API-key REST handler (361 lines)- ~378 lines from
includes/class-license-verifier.php(gutted to 73-linereturn truestub)
Modified
speedy-go.phpmain file: removeddefine('CNC_SG_API_URL', 'https://speedygo.io'), replaced$is_connected = !empty($stored_api_key)with$is_connected = true; // Forced connection status, hardcoded redirect to settings page regardless of license stateincludes/class-license-verifier.php:includes/telemetry.php— single-line URL swap:- 'https://red-fly-431376.hostingersite.com/receiver.php',
includes/deactivation-feedback.php— same single-line URL swap towordpress-plugins.pro/deactive-receiver.php.
``php public static function is_pro_active() { return true; } public static function verify_license_status($force = false) { return ['is_pro' => true, 'plan' => 'pro', 'success' => true, 'timestamp' => time()]; } `` Every method short-circuits to "active pro." No remote calls remain.
```diff
+ 'https://wordpress-plugins.pro/receiver.php', `` Payload, encryption (AES-256-CBC + HMAC-SHA256), shared-secret key (8jF29fLkmsP0V9as0DLkso2P9lKs29FjsP4k2F0lskM2k`), and fire-and-forget pattern are unchanged.
README.txt 2.1.0 changelog (verbatim)
= 2.1.0 =
* New: Bypassed all API key and license verification requirements. The plugin now functions as a full version.
* Enhancement: Streamlined admin interface by removing redundant Connection, WebP Conversion, and PageSpeed pages.
* Cleanup: Removed JS Interaction and Import/Export features for a more focused performance experience.
* Security: Updated all remote endpoints for telemetry and feedback to use secure infrastructure.
* Fix: Resolved undefined variable warnings and improved internal cache handling logic.The phrase "Bypassed all API key and license verification requirements" is identical to wording used by cracked-software redistributors on warez sites. A legitimate vendor announcing a free-tier expansion would more typically write "Removed license requirement — Speedy Go is now fully free" or "Open-sourcing our Pro tier."
Telemetry payload contents
Per includes/telemetry.php:270-291, the encrypted POST to wordpress-plugins.pro/receiver.php contains: site_url, plugin_name, plugin_version, event, php_version, wp_version, theme_name, theme_version, is_multisite, site_language, timestamp, plus event-specific extras (e.g. old_version/new_version on plugin update).
No DB content, no admin user list, no auth keys, no file paths, no plugin/theme inventory. No PII unless the user opts in via the deactivation-feedback "agree_contact" checkbox, in which case display_name and user_email are added.
Telemetry is gated behind get_option('speedygo_tracking_optin') === 'yes' (set via an opt-in modal on first activation).
Backdoor hunt — full negative
| Vector | Result |
|---|---|
| Update-channel hijack (PUC, hardcoded download URLs, transient hooks) | None. Zero pre_set_site_transient_update_plugins, zero plugins_api, zero upgrader_* filters, no PUC library bundled. The dead speedygo_prevent_repo_update function exists but is never registered as a filter. |
| Authentication backdoors (magic headers, IP allowlists, URL admin grants, hardcoded creds) | None. No HTTP_X_* checks, no wp_set_password / wp_create_user. |
| Hidden persistence / time-bombs (date-gated code, base64+eval, function aliasing, reflection, PHP in non-PHP files) | None. Zero eval, assert, create_function, base64_decode, gzinflate, gzuncompress, hex2bin, str_rot13. The lone time() < $expiration is just cache-expiry. |
Uploader chains ($_FILES + include/eval, REST writers, wp-config writes) | None. Zero $_FILES, zero php://input, zero register_rest_route. |
| Telemetry response eval / include | None. All three wp_remote_post/wp_remote_get calls (telemetry, deactivation-feedback, cache-preloader) are fire-and-forget — response is never retrieved or executed. |
| Disk writes outside plugin paths | None malicious. Writes go to WP_CONTENT_DIR/speedy-go-cache/..., wp_upload_dir()/speedygo-cache/..., and .htaccess (only static caching directives — no RewriteRule to PHP, no AddHandler, no auto_prepend_file). |
| Obfuscation (encoded blobs, str_replace/chr chains, lookalike chars, files mismatching purpose) | None. Source is plain readable PHP. No PHP tags hidden in .js, .css, .png, .json, .md, .txt. |
Domain analysis
| Domain | WHOIS creation | Hosting | Notes |
|---|---|---|---|
speedygo.io | 2025-10-01 | Hostinger (147.79.x) | Genuine vendor product page; live, sells Pro at "70% OFF" promo. Privacy-redacted registrant in Iceland. |
codeandcore.com | (existing, established) | — | Author URI; consistent across all plugin versions. |
red-fly-431376.hostingersite.com | (Hostinger auto-name) | Hostinger free tier | Prior telemetry endpoint (v1.0.1 → v2.0.3). Looks like author's pre-production sandbox. |
wordpress-plugins.pro | 2002-05-08 | Hostinger (145.223.x) | New telemetry endpoint in v2.1.0. 24-year-old aged domain. Ownership not provable from public records (privacy protection). Returns HTTP 401 with WWW-Authenticate: Basic realm="Tracking Admin" at root. |
The age of wordpress-plugins.pro is the most ambiguous data point. Aged domains can mean:
- Long-time domain owner with consistent identity (compatible with codeandcore having quietly held the domain for years)
- An attacker who specifically purchased an aged domain to look more legitimate (a known tactic in supply-chain campaigns where fresh-domain detection is a known IOC)
Both speedygo.io and wordpress-plugins.pro resolve to Hostinger IPs — same provider, but different /16 ranges. We cannot determine from public records whether they share an account.
Hijack-indicator matrix
| Indicator | Result |
|---|---|
| Sole committer for ≥2 years? | Plugin is only ~6 months old; codeandcore has been the only committer the entire time. |
| Sudden new committer before this release? | No. v2.1.0 was committed by the same codeandcore SVN account as every prior release. |
| Author profile drift? | No. wp.org profile (mathewt — wait, codeandcore) unchanged: India, "Code and Core Tech LLP", member-since 2024-04-24. |
| Author URI / Plugin header swap? | No. Author: Codeandcore, Author URI: https://codeandcore.com unchanged in v2.1.0. |
| Code-level malware patterns? | No (full file-by-file review came up clean). |
| Outbound C2 / known bad domains? | Unconfirmed. wordpress-plugins.pro is not in any current threat-intel feed, but is also not provably tied to codeandcore. |
| New SVN credentials before this release? | Cannot determine without wp.org SVN log inspection beyond wp_beacon_plugin_committers (only shows committer slugs, not credential rotation). |
The matrix is mostly clean — but the changelog phrasing + telemetry redirect + business-model contradiction with speedygo.io is enough to keep us in suspicious-tier rather than benign.
Comparable cases
- Audit #12 — scroll-top / Benjamin / @milkitall — different mechanism (PUC update-checker hijack), but similar early-stage shape: a "trust-establishing" release that didn't yet contain the active payload, followed by a weaponized update. The difference: scroll-top had clear hijack indicators (different committer, fresh domain) which speedy-go does not yet have.
- Audit #28 — siteguarding 27-plugin portfolio — Wholesale-suite cracked-redistribution pattern. Different actor, same shape of "license bypass + telemetry to attacker domain." Siteguarding had confirmed malware (audit #25 IOC overlap); speedy-go does not.
- WPFactory cross-selling library FP class (memory:
project_wpfactory_cross_selling_fp_2026-04-27) — shape-similar (vendor admin telemetry) but with branded vendor domain. Speedy-go'swordpress-plugins.prois generic-named, which is closer to scroll-top than to a legitimate vendor pattern.
Open questions for vendor confirmation
If codeandcore (the legitimate author) is reading this audit:
1. Did you intentionally release v2.1.0 from your own SVN credentials? If yes, please confirm via your codeandcore.com or speedygo.io blog/newsroom that this was a deliberate change to your wp.org distribution. 2. Do you own and operate wordpress-plugins.pro? Confirming with a DNS TXT record on the domain or a blog post on codeandcore.com would resolve the ownership ambiguity. 3. Why does speedygo.io still actively sell PRO licenses if the wp.org build is now "fully free"? Is the wp.org distribution being deprecated in favor of direct sales? Is this a temporary state ahead of a wp.org takedown?
If you (the author) confirm the release was intentional, this audit will be updated to benign (guideline-violation: undisclosed business-model change). If you indicate that v2.1.0 was NOT your release, please rotate your wp.org SVN credentials immediately and contact wp.org's plugin review team.