WP Manifestindependent plugin directory
manifest / ecommerce / vortex

Vortex - Shareable Carts WP Registry grade B. Medium-severity findings · 1 findingWP RegistryMedium-severity findings · 1 findingOpen the reportB

A Wordpress plugin that allows users to fill a shopping cart then creates a link with those cart items that is sharable.

★ 0stars
76release downloads
≈10active sites
v1.0.10latest · 8mo ago

Install

Download vortex-v1.0.10.zip From the v1.0.10 release on GitHub, Feb 20, 2026

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

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/emkowale/vortex/releases/download/v1.0.10/vortex-v1.0.10.zip
Updates itself. It ships its own updater, so new versions appear under Dashboard → Updates.

Releases

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

Tag
Published
Assets
Downloads
v1.0.10 latest
Feb 20, 2026 8mo ago
vortex-v1.0.10.zip
32
Feb 2, 2026 8mo ago
vortex-v1.0.9.zip
14
Feb 2, 2026 8mo ago
vortex-v1.0.8.zip
2
Feb 2, 2026 8mo ago
vortex-v1.0.7.zip
6
Feb 2, 2026 8mo ago
vortex-v1.0.6.zip
0
Jan 30, 2026 8mo ago
vortex-v1.0.5.zip
8
Jan 22, 2026 9mo ago
vortex-v1.0.4.zip
7
Dec 9, 2025 10mo ago
vortex-v1.0.3.zip
7

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

B grade

Security

Vortex - Shareable Carts 1.0.10 · audited by WP Registry

Medium-severity findings.

1 medium
Audited release
1.0.10
Findings
1
Worst severity
medium
Content hash
5261fc58bd2c26a2bb28fa18…

Findings

  • medium Unauthenticated cart-link AJAX writes unbounded permanent wp_options rows

    dos

    wp_ajax_nopriv_vortex_create_cart_link shares vortex_ajax_create(). The only gate is wp_verify_nonce on action vortex-create; there is no current_user_can, IP/session rate limit, or cap on how many links exist. vortex_cart_button() prints that nonce as data-nonce on the public cart page for every visitor, including uid 0. WordPress guest nonces hash uid 0 plus an empty session token, so one harvested nonce is valid for every logged-out caller until it ticks. After confirming WC()->cart->get_cart() is non-empty, the handler wp_generate_password(8, false) and update_option('vortex_'.$token, $export, false) with no uniqueness check. The inline comment says links are stored permanently so they do not expire; vortex_load_token still falls back to a transient only for old rows. There is no garbage collection, no uninstall/deactivation cleanup of vortex_* options, and autoload=false only avoids front-end autoload cost — it does not bound table growth. Attack: guest add-to-cart of any purchasable product, GET /cart/ for the nonce, then loop POST admin-ajax.php; each success inserts another wp_options row whose value is the full cart snapshot plus leftover cart_item_data (objects stripped only at the top level). Observable consequence is unbounded option_name LIKE 'vortex_%' growth and backup/DB size, not XSS or payment-script injection (the option is consumed by add_to_cart, not echoed).

    vortex.php:112-144

    Recommendation

    Do not use wp_options as an unbounded store for visitor-created content. Persist cart snapshots in a custom table or CPT with a TTL (or restore transients), enforce a per-session/IP rate limit, generate a longer token (32+ chars) with a uniqueness check, and delete leftover vortex_* rows on uninstall. Optionally require a logged-in customer to create links.

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.