WP Manifestindependent plugin directory
manifest / ecommerce / exn-wc-billplz

WooCommerce Billplz WP Registry grade F. Critical findings · 2 findingsWP RegistryCritical findings · 2 findingsOpen the reportF

Billplz Payment Gateway for WooCommerce

★ 6stars
79release downloads
≈10active sites
v1.4.2latest · 9 years ago

Install

Download exn-wc-billplz.zip From the v1.4.0 release on GitHub, Aug 14, 2016

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

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/abdusfauzi/exn-wc-billplz/releases/download/v1.4.0/exn-wc-billplz.zip
Updates itself. It ships its own updater, so new versions appear under Dashboard → Updates.
Billplz WooCommerce Plugin =====================

Billplz Payment Gateway for WooCommerce (Wordpress) developed by Exnano Creative team. Download plugin from here ⇩ and rename to exn-wc-billplz.

Notes

Exnano Creative is not responsible for any problems that might arise from the use of this module. Use at your own risk. Please backup any critical data before proceeding. For any query or assistance, please submit issue to this repo.

BILLPLZ SDN BHD (1023853P) billplz.com is not associated with the development of this plugin, even though the payment gateway API was provided by the company.

Malaysian Banks Supported

FPX Banks

Installations for Wordpress Plugin

  1. Simply drop the exn-wc-billplz folder into your WordPress plugins directory.
  2. Go to Dashboard > Plugins > enable WooCommerce Billplz
  3. Go to Dashboard > WooCommerce > Settings > Checkout > Billplz tab and fill up all requirements.
  4. You're good to go!

Contribution

You can contribute to this plugin by submitting issue on this repo.

Issues

Submit issue to this this repo.

Changelog

[2016-12-05] -- 1.4.2

  • Fix: random class redeclaration errors on WP_GitHub_Updater class

[2016-08-15] -- 1.4.1

  • Fix: plugin url to non-https
  • Fix: remove unused option settings (collection_id_created)

[2016-08-15] -- 1.4.0

  • Add: new Auto Submit feature, redirect bills to selected payment solution provider (FPX/PayPal/Billplz), and skip Billplz landing page

[2016-08-15] -- 1.3.1

  • Fix: website url to non-https

[2016-05-25] -- 1.3.0

  • Fix: redirect to Thank You page if payment is no longer pending
  • Add: option in plugin settings to enable immediate stock reduction or not. Best use with WooCommerce Auto Restore Stock

[2016-05-24] -- 1.2.1 - 1.3.2

  • Fix: pay button from My Account page should go back to Billplz

[2016-05-24] -- 1.2.0

  • Fix banks icon image to responsive width (100%)
  • Fix payment status skipping Processing and supposedly not immediately Complete
  • Fix replace_pay_button() function
  • Dropped: _billplz_id meta, and use WooCommerce _transaction_id
  • Dropped: _billplz_url. Will use $payment_gateways[ $payment_method ]->get_transaction_url( $order ) by WooCommerce
  • Refactoring class, methods and variables
  • Added: note to Order based on Billplz status
  • Added: Sandbox Mode's input fields for API Secret Key & Collection Id
  • Added: Migration helper to relocate data from _billplz_id to _transaction_id
  • Change: url to icon/image. Now use EXN_WC_BILLPLZ_URL constant

[2016-05-23] -- 1.1.23 - 1.1.26

  • Fix author proper name for proper_folder_name used by updater library
  • Add Tested up to version
  • Added updater library for Automatic update from Github repo
  • Fix author URI

[2016-05-22] -- 1.0.23

  • First release
  • First commit and publish to Github

Releases

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

Tag
Published
Assets
Downloads
v1.4.2 latest
Dec 5, 2016 9 years ago
tag only
—
Aug 21, 2016 10 years ago
tag only
—
Aug 14, 2016 10 years ago
exn-wc-billplz.zip
12
May 25, 2016 10 years ago
exn-wc-billplz.zip
67

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

F grade

Security

WooCommerce Billplz 1.4.0 · audited by WP Registry

Critical findings.

1 critical 1 medium
Audited release
1.4.0
Findings
2
Worst severity
critical
Content hash
562df2b0920da3b6f0014408…

Findings

  • critical Receipt handler completes any pending order using a swapped paid Billplz bill ID

    auth_bypass

    woocommerce_receipt_billplz runs EXN_WC_Billplz::receipt_page on the WooCommerce order-pay/receipt screen (checkout/order-pay/{id}/?key=…, including Billplz's redirect_url from get_checkout_payment_url(true) and the my-account 'Change Payment' URL installed by replace_pay_button). The order object comes from WooCommerce; the bill id is taken solely from $_GET['billplz']['id'] and is never compared to the order's _transaction_id (stored at process_payment), to $billplz->amount vs order total, or to reference_1 (the order id sent when the bill was created). If the order is still pending, the plugin wp_safe_remote_get's https://www.billplz.com/api/v3/bills/{attacker_id} with the merchant API secret and update_order_status() calls $order->payment_complete($billplz->id) whenever that bill's paid flag is true. A guest or customer pays a cheap order, copies that paid bill id (return URL, _transaction_id, Billplz URL), then opens their expensive pending order's pay URL with billplz[id] set to the cheap paid bill and receives goods/stock/processing-email as if the expensive order were paid. The wc-api callback does bind POST id via find_order_id(_transaction_id) and is not this substitution; it also does not verify Billplz X-Signature, but it re-fetches the bill so it cannot fake paid. Same receipt_page bug remains on GitHub master (v1.4.2, last commit 2016-12-05).

    class/class-exn-wc-billplz.php:307-326,364-393

    Recommendation

    Ignore attacker-supplied bill ids for confirmation. Load the bill id from the order's _transaction_id (or require GET id to hash_equals it). Refuse payment_complete unless Billplz amount (cents) matches the order total and reference_1 matches the order id. Verify Billplz X-Signature on redirect and callback. Prefer the official Billplz-for-WooCommerce plugin.

  • medium Order-meta migration AJAX has no capability or nonce check

    missing_capability

    exn_wc_billplz_data_check on plugins_loaded registers wp_ajax_exn_wc_billplz_migrate whenever any postmeta row has meta_key=_billplz_id (pre-1.2.0 leftover). exn_wc_billplz_run_migration has no current_user_can, no check_ajax_referer, and no order ownership check. Any logged-in role including subscriber/customer can POST admin-ajax.php action=exn_wc_billplz_migrate and the handler copies that row's meta_value onto _transaction_id then delete_post_meta _billplz_id and _billplz_url. That overwrites the live WooCommerce transaction id used by callback_url/find_order_id and by get_transaction_url on my-account. The in_admin_footer script sends the same action with no nonce, so a logged-in admin can also be CSRF'd into migrating. Handler is not registered on a fresh 1.4.0 install that never had _billplz_id; it is live on stores that upgraded from 1.0/1.1 and never clicked the notice.

    exn-wc-billplz.php:143-188

    Recommendation

    Require current_user_can('manage_woocommerce') and check_ajax_referer in the same handler. Do not register the AJAX action on plugins_loaded for every front-end request; gate it in admin and stop after migration completes.

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.