WP Manifestindependent plugin directory
manifest / admin / wme-sitebuilder

WME Sitebuilder WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

Easily build and configure a site.

★ 2stars
109release downloads
≈10active sites
v0.6.2latest · 3 years ago

Install

Download wme-sitebuilder.zip From the v0.6.1 release on GitHub, Mar 24, 2023

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/liquidweb/wme-sitebuilder/releases/download/v0.6.1/wme-sitebuilder.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Wordpress Made Easy: Sitebuilder

Getting started with local development

IMPORTANT: First follow the "get started" section of the monorepo.

Prerequisites

  • Docker Desktop (or a local docker installation)
  • pnpm
  • npx
    • npx --version
    • If not found, install with npm install -g npx

Start the local environment

This plugin uses wp-env for local development and testing.

  1. After running pnpm install and pnpm turbo build from the base monorepo directory, you can start the local WordPress environment.
  2. From the plugins/sitebuider folder, run pnpm run env:dev and wait for Docker to complete initializing the site.
  3. Navigate your browser to http://localhost:8888/wp-admin/
    • Username: admin
    • Password: password

Enable BrowserSync

  1. Create a .env file in the root of the project
  2. Add the following value according to your local setup, to the .env file:
    MIX_PROXY_URL=sitebuilder-dev.local

Watch project

pnpm run watch

Testing

This plugin uses a combination of Playwright and wp-env to perform automated end-to-end testing in a browser. Before running the testing the first time, you'll need to install the browsers playwright needs.

# To only install Chrome which is used by default
npx playwright install chromium

OR

# To install all browsers (Chrome, Firefox, Webkit)
npx playwright install

Start the local WordPress dev and testing environments

pnpm run env:dev

Run the test suite

pnpm run env:test

Releases

17 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v0.6.2 latest
Sep 12, 2023 3 years ago
tag only
—
Mar 24, 2023 3 years ago
wme-sitebuilder.zip
15
Jan 16, 2023 3 years ago
tag only
—
Jan 16, 2023 3 years ago
tag only
—
Jan 7, 2023 3 years ago
tag only
—
Dec 8, 2022 3 years ago
wme-sitebuilder.zip
7
Nov 22, 2022 3 years ago
wme-sitebuilder.zip
8
Nov 21, 2022 3 years ago
wme-sitebuilder.zip
7
Nov 9, 2022 3 years ago
wme-sitebuilder.zip
7
Nov 9, 2022 3 years ago
wme-sitebuilder.zip
7
Nov 4, 2022 3 years ago
wme-sitebuilder.zip
9
Nov 4, 2022 3 years ago
wme-sitebuilder.zip
9
Oct 31, 2022 3 years ago
wme-sitebuilder.zip
8
Oct 28, 2022 3 years ago
wme-sitebuilder.zip
7
Oct 26, 2022 3 years ago
wme-sitebuilder.zip
7
Oct 21, 2022 4 years ago
wme-sitebuilder.zip
10
Oct 21, 2022 4 years ago
wme-sitebuilder.zip
8

Active-site estimate ≈10 comes from the median of recent superseded releases. Method.

D+ grade

Security

WME Sitebuilder 2.0.0 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
2.0.0
Findings
2
Worst severity
high
Content hash
a2cde0d2217e57567955c01a…

Findings

  • high Unauthenticated domain-purchase webhook updates site options with no signature

    missing_auth

    GoLive registers rewrite tag wme-sitebuilder-domain-purchase-webhook on init and, on template_redirect, treats a non-empty query var as a webhook. handleWebhook() reads php://input, json_decodes it, and if action is the literal 'domain:add' and outcome.status is 'success', writes outcome.details.purchased_domain into option _sitebuilder_go_live (key purchased_domains) and fires domain_purchase telemetry/completed actions. isValidWebhookPayload() only checks that those JSON keys exist — no HMAC, shared secret, capability, nonce, or source IP. The query var is public (query_vars filter), so /?wme-sitebuilder-domain-purchase-webhook=true works even if permalinks were never flushed. An unauthenticated caller can therefore pollute go-live wizard state (and any parent hook on wme_event_wizard_completed) with arbitrary purchased_domain values. Domain rename itself (finish → Domain::renameDomain → siteurl/home) still requires manage_options and a POSTed domain, so this is not unauth site takeover by itself.

    Wizards/GoLive.php:104-330

    Recommendation

    Authenticate webhook deliveries with a high-entropy secret (HMAC of the raw body or a Bearer token) that is not guessable from the public URL. Reject unsigned or mismatched payloads before any update_option. Do not fire wizard-completed actions until the signature verifies. Optionally bind the callback to a per-purchase nonce created in createPurchaseFlow and rotate it after use.

  • medium Privileged setup AJAX is nonce-only with no capability check in the dispatcher

    missing_capability

    UsesAjax::maybe_register_ajax_action hooks wp_ajax_{$ajax_action} (any logged-in user) and action__wp_ajax verifies only wp_verify_nonce($_REQUEST['_wpnonce'], $this->ajax_action) before do_action of the sub_action. There is no current_user_can in the dispatcher. FirstTimeConfiguration::finish (sitebuilder-wizard-ftc), StoreSetup::finish (sitebuilder-wizard-store-setup), LookAndFeel::finish (sitebuilder-wizard-lookandfeel), GoLive::checkPurchaseStatus, validateUsername, and telemetry sub-actions likewise omit a capability check. FTC finish writes blogname, blogdescription, and site_logo and can wp_set_password / change user_login for the current user; StoreSetup finish writes WooCommerce store address/currency/country. The nonce is only printed via ajax_props() on manage_options admin pages, so a Subscriber cannot mint a usable nonce from this plugin's UI — this is missing authorization, not a demonstrated customer BAC. Domain rename, plugin install, and payment get_keys already check manage_options or install_plugins in-handler.

    Concerns/UsesAjax.php:42-86

    Recommendation

    In action__wp_ajax, require current_user_can('manage_options') (the same cap as the admin menu) before dispatching any sub_action. Keep the nonce check. Mirror the cap check inside FirstTimeConfiguration::finish, StoreSetup::finish, LookAndFeel::finish, and GoLive::checkPurchaseStatus so a future dispatcher change cannot skip it.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.