CVE-2025-22661 Overview
CVE-2025-22661 is a stored Cross-Site Scripting (XSS) vulnerability in the vcita Online Payments WordPress plugin, marketed as Online Payments – Get Paid with PayPal, Square & Stripe (paypal-payment-button-by-vcita). The flaw affects all plugin versions up to and including 3.20.0. An authenticated attacker with low-level privileges can inject malicious JavaScript that persists in the application and executes in the browser of any user who views the affected content. The vulnerability is classified under CWE-79 for improper neutralization of input during web page generation.
Critical Impact
Attackers can persist arbitrary JavaScript in a WordPress site running the plugin, enabling session theft, administrative account takeover, and drive-by redirection of site visitors.
Affected Products
- vcita Online Payments – Get Paid with PayPal, Square & Stripe (paypal-payment-button-by-vcita)
- All plugin versions from initial release through 3.20.0
- WordPress sites running the vulnerable plugin
Discovery Timeline
- 2025-01-21 - CVE-2025-22661 published to the National Vulnerability Database
- 2026-06-17 - Last updated in NVD database
Technical Details for CVE-2025-22661
Vulnerability Analysis
The plugin fails to properly sanitize and escape user-supplied input before rendering it within generated web pages. This allows an authenticated user to submit input containing HTML or JavaScript payloads that the plugin stores in the WordPress database. When the affected page is later rendered, the malicious script executes in the context of the visiting user's browser.
Because the payload is stored, exploitation does not require repeated attacker interaction. Any authenticated administrator, editor, or site visitor who loads the affected view triggers the payload. The scope change reflected in the vulnerability metrics indicates that the injected script can affect resources beyond the vulnerable component itself, including administrative session cookies and the WordPress admin interface.
Root Cause
The root cause is missing output encoding and input sanitization in the plugin's page generation logic. WordPress provides sanitization helpers such as sanitize_text_field(), wp_kses(), and escaping functions like esc_html(), esc_attr(), and esc_js(). The plugin does not consistently apply these functions to input that reaches the rendered DOM, allowing raw HTML and <script> payloads to survive storage and rendering.
Attack Vector
Exploitation requires network access to the WordPress site and an authenticated account with at least low-level privileges. User interaction is required, meaning a victim must load a page containing the stored payload. Once triggered, the script runs with the privileges of the viewing user. A stored payload viewed by an administrator can be used to create new admin accounts, install plugins, or exfiltrate authentication tokens. See the Patchstack Vulnerability Report for technical details.
Detection Methods for CVE-2025-22661
Indicators of Compromise
- Presence of <script>, onerror=, onload=, or javascript: strings in WordPress wp_postmeta, wp_options, or plugin-specific tables tied to the vcita plugin.
- Unexpected outbound HTTP requests from browsers loading pages that render vcita payment content.
- Creation of new WordPress administrator accounts or unexpected privilege changes shortly after a low-privileged user submitted plugin input.
Detection Strategies
- Scan the WordPress database for HTML or JavaScript artifacts in fields owned by paypal-payment-button-by-vcita.
- Enable a Content Security Policy (CSP) in report-only mode to surface inline script execution originating from plugin-rendered pages.
- Correlate authenticated low-privilege user submissions with subsequent admin session activity from unusual IP addresses or user agents.
Monitoring Recommendations
- Forward WordPress access and admin audit logs to a centralized analytics platform and alert on privilege changes following plugin form submissions.
- Monitor for anomalous XHR or fetch calls originating from /wp-admin/ pages that reference the vulnerable plugin.
- Track plugin version inventory across managed WordPress sites and alert when paypal-payment-button-by-vcita is at or below version 3.20.0.
How to Mitigate CVE-2025-22661
Immediate Actions Required
- Update the vcita Online Payments plugin to the latest available version above 3.20.0 as published by the vendor.
- Audit the WordPress database for stored XSS payloads in plugin-controlled fields and remove any malicious content.
- Rotate credentials and invalidate active sessions for administrator accounts that may have viewed exploited pages.
Patch Information
The vendor addresses the flaw in a release subsequent to 3.20.0. Consult the Patchstack Vulnerability Report for the fixed version and vendor advisory links. Apply the update through the WordPress plugin manager or via WP-CLI.
Workarounds
- Restrict access to the plugin's input surfaces by limiting which authenticated roles can submit content processed by paypal-payment-button-by-vcita.
- Deploy a Web Application Firewall (WAF) rule that blocks HTML tag and event handler patterns in POST parameters targeting the plugin's endpoints.
- Enforce a strict Content Security Policy that disallows inline scripts on WordPress admin and public pages rendered by the plugin.
# Configuration example
wp plugin update paypal-payment-button-by-vcita
wp plugin list --name=paypal-payment-button-by-vcita --fields=name,status,version
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

