WP Manifestindependent plugin directory
manifest / ecommerce / wp-pronamic-pay-paypal

Pronamic Pay PayPal Add-On WP Registry grade B. Medium-severity findings · 1 findingWP RegistryMedium-severity findings · 1 findingOpen the reportB

PayPal driver for the WordPress payment processing library.

★ 3stars
27release downloads
28kcomposer installs
v2.4.0latest · 4mo ago

Install

Download pronamic-pay-paypal.2.4.0.zip From the v2.4.0 release on GitHub, May 26, 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/pronamic/wp-pronamic-pay-paypal/releases/download/v2.4.0/pronamic-pay-paypal.2.4.0.zip

On Packagist as wp-pay-gateways/paypal:

composer require wp-pay-gateways/paypal
Updates itself. It ships its own updater (Update URI header), so new versions appear under Dashboard → Updates.

WordPress Pay » Gateway » PayPal

WordPress Pay » Gateway » PayPal

PayPal driver for the WordPress payment processing library.

Built with Grunt

Table of contents

WordPress Filters

View docs/hooks.md for the available WordPres filters in this library.

Simulate Requests

Report

curl --request POST "https://example.com/wp-json/pronamic-pay/paypal/v1/ipn-listener" \
    --user-agent "PayPal IPN ( https://www.paypal.com/ipn )" \
    --data-raw "mc_gross=1401.00&protection_eligibility=Eligible&address_status=confirmed&item_number1=&payer_id=F9S93N7GNEL7W&address_street=25513540+River+N343+W&payment_date=05%3A01%3A46+Jun+17%2C+2021+PDT&payment_status=Pending&charset=windows-1252&address_zip=GJ&first_name=test&address_country_code=NL&address_name=test+buyer&notify_version=3.9&custom=&payer_status=verified&business=info-facilitator%40remcotolsma.nl&address_country=Netherlands&num_cart_items=1&address_city=Den+Haag&verify_sign=Ai2wvIVeSssqwxVcMK9XcafWsgAPA6uNE6nnbvDILmqDs0csJU91zp3n&payer_email=info-buyer%40remcotolsma.nl&txn_id=6GJ83385S3320270B&payment_type=instant&last_name=buyer&item_name1=Payment+416&address_state=2585&receiver_email=info-facilitator%40remcotolsma.nl&shipping_discount=0.00&quantity1=1&insurance_amount=0.00&receiver_id=G52WMAV7T2F8E&pending_reason=multi_currency&txn_type=cart&discount=0.00&mc_gross_1=1401.00&mc_currency=EUR&residence_country=NL&test_ipn=1&shipping_method=Default&transaction_subject=&payment_gross=&ipn_track_id=292d19dc6ff2e"

Releases

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

Tag
Published
Assets
Downloads
v2.4.0 latest
May 26, 2026 4mo ago
pronamic-pay-paypal.2.4.0.zip
5
Dec 17, 2024 1 year ago
tag only
—
Oct 13, 2023 3 years ago
pronamic-pay-paypal.2.3.6.zip
7
Sep 11, 2023 3 years ago
tag only
—
Jun 1, 2023 3 years ago
tag only
—
Jun 1, 2023 3 years ago
tag only
—
Mar 27, 2023 3 years ago
tag only
—
Jan 31, 2023 3 years ago
tag only
—
Dec 23, 2022 3 years ago
tag only
—
Sep 27, 2022 4 years ago
pronamic-pay-paypal.2.2.2.zip
5
Sep 27, 2022 4 years ago
tag only
—
Apr 12, 2022 4 years ago
pronamic-pay-paypal.2.1.0.zip
3
Jan 11, 2022 4 years ago
tag only
—
Aug 13, 2021 5 years ago
tag only
—
Aug 10, 2021 5 years ago
pronamic-pay-paypal.1.0.0.zip
7
B grade

Security

Pronamic Pay PayPal Add-On 2.4.0 · audited by WP Registry

Medium-severity findings.

1 medium
Audited release
2.4.0
Findings
1
Worst severity
medium
Content hash
bf69845e6ef3c96bff97b113…

Findings

  • medium Verified PayPal IPN parameters stored as HTML payment notes and rendered unescaped in wp-admin

    xss_stored

    On every VERIFIED IPN, rest_api_paypal_ipn() builds a payment note as HTML (`<p>…</p><pre>` plus wp_json_encode of $request->get_params()) and passes it to Payment::add_note() → wp_insert_comment() with comment_type payment_note. wp_insert_comment does not kses. The bundled core admin UI prints notes with comment_text() in views/meta-box-notes.php, which echoes HTML with no esc_html. wp_json_encode does not encode `<`/`>` (only slashes in `</script>`), so IPN fields the payer controls via the unsigned cart (item_nameN, first_name, address_*, etc.) can carry `<img src=x onerror=…>` or similar event-handler markup. That HTML executes in the browser of an administrator (or any user with edit_payments) who opens the payment. Exploitation requires a VERIFIED PayPal IPN, so it is not a free-form unauth stored XSS, but it is reachable by a customer who completes even a $0.01 PayPal payment.

    src/NotificationsController.php:287-295

    Recommendation

    Store the IPN payload as escaped text (esc_html, or wp_json_encode with JSON_HEX_TAG|JSON_HEX_AMP) and render notes with esc_html() instead of comment_text(), or run the note through wp_kses() with a tight admin allowlist before insert.

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.