← All audits

Audit #36 Suspicious

Country Caching For WP Super Cache · 200 installs · baseline → head 0.8.0 · by beacon-scan-skill · closed 1mo ago

Show full summary

What's flagged. The plugin wires the Yahnis Elsts Plugin Update Checker (PUC) into a literal-placeholder URL that the author never replaced before publishing:

cc_wpsc_init.php:17-18
$myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
    'http://blog.XXXXXXXX.com/meta_ccwpsc.json',
    __FILE__,
    'country-caching-extension-for-wp-super-cache'
);

The string XXXXXXXX is a copy-paste template the author intended to replace with their real domain. They didn't. The placeholder shipped to wordpress.org in 0.8.0 (last release, 2021-03-24).

Why this is dormant supply-chain risk. The parent domain xxxxxxxx.com is registered (since 2000-08-09, registrar DomainCostClub.com / Global Domains International, last changed 2025-08-05). blog.xxxxxxxx.com resolves to the parking provider's IP. Today the URL times out; nothing useful served. But the registered owner can at any moment:

1. Configure the blog. subdomain 2. Serve a properly-formatted meta_ccwpsc.json indicating a new version + zip URL 3. Trigger automatic plugin updates on every site running this plugin (~200 installs) 4. Plugin code installs run with full author privileges

This is the classic PUC supply-chain vector that was used in the 2021 anadnet/quick-pagepost-redirect-plugin compromise (audit #12 lineage), only the destination has not yet been activated.

create_function() finding is incidental — historical PHP 5 RCE primitive removed in PHP 8. Plugin is unmaintained and would crash on PHP 8 anyway. Not the dominant concern.

Exposure. Currently 200 active installs. Plugin is live on wordpress.org despite 5-year inactivity.

⚠️
Pattern detected — pending vendor response or further evidence.

Not yet confirmed malicious. Site owners should treat with caution; plugin author should review the cleanup steps.

If you run country-caching-extension-for-wp-super-cache on your site

Verify your install matches the wp.org canonical version:

wp plugin verify-checksums country-caching-extension-for-wp-super-cache

A patched build isn't yet published for this audit. Check the security advisories index or remove the plugin until one is available.

If you're the plugin author

Cleanup steps to clear this label have not yet been documented for this audit. Contact the investigator listed above.

The label clears automatically on the next wp beacon scan-deltas once the cleanup conditions above are met.

Plugins under the same committer's SVN access

wrigs1 holds push access to 5 plugins totalling 410 active installs. Each non-target plugin scans clean today but represents a one-commit hijack opportunity.

Category Country Aware WordPress — clean code, same SVN account (latent risk)
200
Country Caching Extension — clean code, same SVN account (latent risk)
10
British Embassy Finder — clean code, same SVN account (latent risk)
Travel Advice by Country Widget — closed by wp.org

IOCs extracted (3)

Kind Value Confidence
code_pattern blog.XXXXXXXX.com medium
code_pattern puc_placeholder_url_with_registered_parent medium
url http://blog.XXXXXXXX.com/meta_ccwpsc.json medium

Audit #36 — country-caching-extension-for-wp-super-cache

  • Plugin: country-caching-extension-for-wp-super-cache (Country Caching For WP Super Cache)
  • Active installs: 200
  • Event: #2524 code_pattern · critical · 2026-05-08 09:56:56
  • Baseline version: none — no clean pre-suspect release
  • Head version: 0.8.0
  • Author: wrigs1 (joined wp.org 2014, 23 commits to this plugin, last activity 2021-03-24)
  • Plugin status on wp.org: OPEN (200 active installs, abandoned ~5 years)

Summary

What's flagged. The plugin wires the Yahnis Elsts Plugin Update Checker (PUC) into a literal-placeholder URL that the author never replaced before publishing:

cc_wpsc_init.php:17-18
$myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
    'http://blog.XXXXXXXX.com/meta_ccwpsc.json',
    __FILE__,
    'country-caching-extension-for-wp-super-cache'
);

The string XXXXXXXX is a copy-paste template the author intended to replace with their real domain. They didn't. The placeholder shipped to wordpress.org in 0.8.0 (last release, 2021-03-24).

Why this is dormant supply-chain risk. The parent domain xxxxxxxx.com is registered (since 2000-08-09, registrar DomainCostClub.com / Global Domains International, last changed 2025-08-05). blog.xxxxxxxx.com resolves to the parking provider's IP. Today the URL times out; nothing useful served. But the registered owner can at any moment:

1. Configure the blog. subdomain 2. Serve a properly-formatted meta_ccwpsc.json indicating a new version + zip URL 3. Trigger automatic plugin updates on every site running this plugin (~200 installs) 4. Plugin code installs run with full author privileges

This is the classic PUC supply-chain vector that was used in the 2021 anadnet/quick-pagepost-redirect-plugin compromise (audit #12 lineage), only the destination has not yet been activated.

create_function() finding is incidental — historical PHP 5 RCE primitive removed in PHP 8. Plugin is unmaintained and would crash on PHP 8 anyway. Not the dominant concern.

Exposure. Currently 200 active installs. Plugin is live on wordpress.org despite 5-year inactivity.

Verdict

suspicious

Recommendation to wp.org

Close plugin for inactivity + dormant supply-chain attack surface. Author has not touched the plugin in 5 years; placeholder URL with registered parent domain is a latent vulnerability that any future attacker (or current parking-network owner pivoting their business model) can exploit without code access.

Added files (0)

_No new files between baseline and head._

Suspicious pattern hits (2)

puc_update_hijack — 1 hit

createfunc — 1 hit

  • inc/wp-php53.php:42$notice_handler = create_function('', ... — incidental to abandoned-plugin status; not the focus of this audit.

IOCs to extract

  • kind: code_pattern, value: blog.XXXXXXXX.com, confidence: medium
  • kind: url, value: http://blog.XXXXXXXX.com/meta_ccwpsc.json, confidence: medium
  • kind: code_pattern, value: puc_placeholder_url_with_registered_parent, confidence: medium

Full diff

_No diff available (one or both versions failed to export)._

New rule recommendation

PucPlaceholderUrl — fires when Puc_v4_Factory::buildUpdateChecker (or Factory::buildUpdateChecker) is called with a URL whose host contains a literal-placeholder pattern (/X{4,}/, /your[-_]/i, /example\./i) and the parent registrable domain resolves via DNS. The combination differentiates harmless dev placeholders (parent unregistered) from latent attack surfaces (parent already owned by someone).