Skip to content

feat: WordPress-native tripwires (#13)#29

Merged
cport1 merged 1 commit into
mainfrom
feat/wp-native-traps
Jul 19, 2026
Merged

feat: WordPress-native tripwires (#13)#29
cport1 merged 1 commit into
mainfrom
feat/wp-native-traps

Conversation

@cport1

@cport1 cport1 commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Traps that require knowing WordPress internals — the recon every wpscan-style tool runs — which @webdecoy/node's framework-agnostic core can't express. This is differentiated, WP-owned deception.

Traps

  • Fake vulnerable-plugin paths — well-known scanner-targeted slugs (wp-file-manager, revslider, duplicator, …) armed as tripwire prefixes, only when that plugin is not actually installed here (guarded by is_dir() on WP_PLUGIN_DIR), so a genuinely installed plugin's routes are never shadowed. On by default.
  • XML-RPC — optional xmlrpc.php trap, off by default because legitimate clients (Jetpack, the WordPress mobile app, some pingbacks) use it.
  • Author enumeration?author=N (unauthenticated) and the REST /wp/v2/users endpoint return a canary username instead of leaking a real one, and record the probe. Because that canary is a recognized canary credential, a later login attempt with it is flagged CRITICAL by the Deceptive tripwire responses — fake content, canary credentials, tarpit #12 detection — closing the enumeration → credential-stuffing loop. Authenticated requests (block editor, etc.) are untouched.

Wiring

Path traps flow through the rule engine, so they inherit the full DENY + violation + wd_clearance forwarding + optional decoy-response treatment. The query/REST traps hook WP directly and record a synthetic tripwire violation (local detection + clearance-carrying cloud report), so they feed enforcement identically. New WordPress Traps settings section.

Tests

Verified plugin-prefix guarding (absent slugs armed, an installed slug skipped), REST users canary serving + probe recording, that the served author canary is recognized as a canary credential (loop closure), and that authenticated / non-users requests pass through untouched (10 checks). SDK suite still green (41).

Closes #13. Part of #16.

Traps targeting WP-specific recon that node's framework-agnostic SDK can't
express.

- WebDecoy_WP_Traps: fake vulnerable-plugin path prefixes for well-known
  scanner-targeted slugs (wp-file-manager, revslider, ...), armed as tripwire
  prefixes ONLY when that plugin is not installed here (guarded by is_dir on
  WP_PLUGIN_DIR) so a real plugin's routes are never shadowed.
- Optional xmlrpc.php path trap (off by default — legit clients use XML-RPC).
- Author enumeration: ?author=N (unauth) and the REST /wp/v2/users endpoint
  return a canary username instead of leaking the real one; the probe is
  recorded. A later login with that canary is caught by the #12
  canary-credential detection — closing the enumeration→credential-stuffing
  loop. Authenticated requests are untouched.
- Path traps flow through the engine (DENY + violation + clearance + optional
  decoy); query/REST traps record a synthetic tripwire violation (local log +
  clearance-carrying report). New WordPress Traps settings section.

Verified plugin-prefix guarding (absent armed, installed skipped), REST canary
serving + recording, the served canary is a recognized canary credential, and
authenticated/non-users requests are untouched.

Closes #13. Part of #16.
Co-authored-by: Claude <noreply@anthropic.com>
@cport1
cport1 merged commit ca18093 into main Jul 19, 2026
3 checks passed
@cport1
cport1 deleted the feat/wp-native-traps branch July 19, 2026 21:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

WordPress-native tripwires — XML-RPC, user enumeration, fake vulnerable-plugin paths

1 participant