WP Manifestindependent plugin directory
manifest / ecommerce / woocommerce

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

Integration of WooCommerce with Pagantis payment provider.

★ 3stars
1.4krelease downloads
≈20active sites
4composer installs
v8.6.14latest · 6 years ago

Install

Download pagantis-v8.6.14.zip From the v8.6.14 release on GitHub, Oct 1, 2020

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

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/pagantis/woocommerce/releases/download/v8.6.14/pagantis-v8.6.14.zip

On Packagist as pagantis/woocommerce:

composer require pagantis/woocommerce
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Module installation

CircleCI: CircleCI

:hand: Requirements

The following needs to be installed and setup

  • Wordpress
  • WooCommerce

:floppy_disk: Installation

To install Pagantis in your Woocommerce shop

Installation using zip file

  1. Navigate to plugins dashboard
  2. Click on "Add new"
  3. Download the zip file from here
  4. Click 'Upload plugin'
  5. Select the downloaded file and click 'Open'.
  6. Click on 'Install'
  7. Activate the plugin on the WooCommerce plugins dashboard

For more detailed information on how to install the plugin, see our installation section.

:gear: Configuration

Configure the plugin in Woocommerce admin panel using the information found in your Pagantis profile and our configuration section.

:arrow_forward: Usage

To use in a real environment your Pagantis account should be enabled accordingly.

For more information, see our usage section.

Releases

Newest 25 of 47 recorded releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v8.6.14 latest
Oct 1, 2020 6 years ago
pagantis-v8.6.14.zip
224
Sep 30, 2020 6 years ago
pagantis-v8.6.13.zip
7
Sep 22, 2020 6 years ago
pagantis-v8.6.12.zip
21
Sep 21, 2020 6 years ago
pagantis-v8.6.11.zip
3
Sep 15, 2020 6 years ago
pagantis-v8.6.8.zip
17
Sep 1, 2020 6 years ago
pagantis-v8.6.7.zip
41
Aug 13, 2020 6 years ago
pagantis-v8.6.6.zip
34
Aug 11, 2020 6 years ago
pagantis-v8.6.5.zip
3
Aug 10, 2020 6 years ago
pagantis-v8.6.4.zip
4
Aug 7, 2020 6 years ago
pagantis-v8.6.3.zip
5
Aug 6, 2020 6 years ago
pagantis-v8.6.2.zip
3
Jul 28, 2020 6 years ago
pagantis-v8.6.1.zip
35
Jul 17, 2020 6 years ago
pagantis-v8.6.0.zip
23
Jul 17, 2020 6 years ago
pagantis-v8.3.13.zip
12
Jul 13, 2020 6 years ago
pagantis-v8.3.12.zip
12
Jul 8, 2020 6 years ago
pagantis-v8.3.11.zip
16
May 20, 2020 6 years ago
pagantis-v8.3.7.zip
83
Mar 25, 2020 6 years ago
pagantis-v8.3.6.zip
179
Mar 18, 2020 6 years ago
pagantis-v8.3.5.zip
15
Mar 18, 2020 6 years ago
pagantis-v8.3.4.zip
2
Mar 13, 2020 6 years ago
pagantis-v8.3.3.zip
10
Mar 4, 2020 6 years ago
pagantis-v8.3.2.zip
28
Feb 19, 2020 6 years ago
pagantis-v8.3.0.zip
27
Feb 3, 2020 6 years ago
pagantis-v8.2.9.zip
34
Dec 5, 2019 6 years ago
pagantis-v8.2.8.zip
72
All releases on GitHub →

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

D+ grade

Security

Pagantis 8.6.14 · audited by WP Registry

High-severity findings.

2 high
Audited release
8.6.14
Findings
2
Worst severity
high
Content hash
ffa58256ae6bcc738a90a6ac…

Findings

  • high REST routes with __return_true dump all order meta and write extra-config executed as checkout JS

    missing_permission_callback

    Three routes (logs, configController, api) use permission_callback __return_true. Auth inside the callbacks is a loose ==/!= of the URL `secret` to pagantis_private_key or pagantis_private_key_4x (query string can override the path secret). /api joins wp_posts (all shop_order) to wp_postmeta and returns every meta_key/meta_value for the date window — billing emails, addresses, and third-party payment tokens, not just Pagantis orders. The SELECT runs even when the secret is wrong. POST /configController/{secret} writes any defaultConfigs key (PAGANTIS_SIMULATOR_DISPLAY_TYPE_CHECKOUT, PAGANTIS_SIMULATOR_DISPLAY_SKIN, PAGANTIS_SIMULATOR_DISPLAY_TYPE, PAGANTIS_URL_OK/KO, PAGANTIS_ALLOWED_COUNTRIES, CSS selectors, PAGANTIS_PROMOTION_EXTRA, …) into pagantis_config. Those values are then: (a) echoed unquoted into checkout <script> as `type: <?php echo $simulator_type; ?>` / `skin : <?php echo $pagantisSimulatorSkin; ?>` in templates/checkout_description.php and checkout_description4x.php; (b) eval()'d on product pages in assets/js/pg-product-simulator.js (eval(simulatorData.simulator_type/skin/position)); (c) unserialize()'d on is_available/payment_fields. Combined with the sibling unauthenticated SQLi (which can steal the private key from woocommerce_pagantis_settings) this is an unauthenticated stored checkout skimmer / object-injection write. The secret itself lives in the URL, so server access logs and Referer also leak it.

    WC_Pagantis.php:672-808

    Recommendation

    Remove these REST routes from the storefront or gate them with a capability plus a high-entropy HMAC that is not the payment private key and is not placed in the URL. If a merchant-to-Pagantis channel is required, bind the client IP/signature, use hash_equals, and never return all shop_order postmeta. Escape extra-config as JSON/JS (wp_json_encode / esc_js) and stop eval()'ing simulator type/skin/position; do not unserialize attacker-writable rows.

  • high Payment notify confirms any same-amount WooCommerce order when a valid Pagantis token is presented

    auth_bypass

    pagantisNotification is unauthenticated. getPagantisOrderId looks up the Pagantis order solely by $_GET['token'] (`SELECT order_id FROM {prefix}cart_process WHERE token='…'`). The WooCommerce order that is payment_complete()'d is $_GET['order-received'], independently. The `key` query argument (the WC order key placed on the callback URL) is never verified, and wc_order_id stored next to the token is never compared. validateAmount only checks that the Pagantis AUTHORIZED amount equals the chosen WC order total. An attacker who has a token for an AUTHORIZED payment of amount X (their own return URL, a leaked notification URL, or access logs) can replay /?wc-api=wcpagantisgateway&order-received={victim_or_attacker_order}&token={stolen} and mark a different pending/on-hold/failed order of total X as paid. Sequential order IDs plus common catalog prices make same-amount substitution practical. GET origin=redirect (customer return) takes this path; POST notifications do too.

    controllers/notifyController.php:119-173,376-402

    Recommendation

    Require the callback to present the WooCommerce order key and verify it with hash_equals against the loaded order. Look up the cart_process row by token AND wc_order_id (the order-received value) so a token cannot confirm a different order. Verify a Pagantis webhook signature in addition to the token. Refuse GET for payment confirmation; only accept signed POST notifications.

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.