CVE-2025-14460 Overview
The Piraeus Bank WooCommerce Payment Gateway plugin for WordPress contains an authorization bypass vulnerability that allows unauthenticated attackers to modify order statuses to 'failed' without proper authorization. This broken access control issue affects all versions up to and including 3.1.4 and stems from missing authorization checks on the payment callback endpoint handler when processing the 'fail' callback from the payment gateway.
Critical Impact
Attackers can disrupt e-commerce operations by changing legitimate order statuses to 'failed' via the publicly accessible WooCommerce API endpoint, requiring only an easily enumerable order ID to execute the attack.
Affected Products
- Piraeus Bank WooCommerce Payment Gateway plugin for WordPress versions up to and including 3.1.4
- WordPress websites using the vulnerable WooCommerce payment gateway integration
- WooCommerce stores processing payments through Piraeus Bank gateway
Discovery Timeline
- 2026-01-07 - CVE CVE-2025-14460 published to NVD
- 2026-01-08 - Last updated in NVD database
Technical Details for CVE-2025-14460
Vulnerability Analysis
This vulnerability is classified as CWE-862 (Missing Authorization), a broken access control weakness that allows unauthorized actors to perform privileged operations. The vulnerable code resides in the WC_Piraeusbank_Gateway.php file at line 821, where the payment callback endpoint handler fails to verify that the incoming 'fail' callback request is actually originating from a legitimate payment gateway response.
The fundamental security flaw is that the endpoint accepts and processes order status change requests based solely on the MerchantReference parameter (the order ID) without authenticating the request source or validating authorization tokens. Since WooCommerce order IDs are sequential integers, an attacker can trivially enumerate valid order IDs and submit malicious 'fail' callback requests to change any order's status.
Root Cause
The root cause is the absence of proper authorization checks in the payment callback endpoint handler. The vulnerable endpoint processes 'fail' callbacks without verifying that the request originates from the actual Piraeus Bank payment gateway infrastructure. Standard payment gateway implementations should include cryptographic signatures, shared secrets, or IP-based restrictions to validate callback authenticity. The missing authorization allows any unauthenticated network user to invoke the callback endpoint and manipulate order states.
Attack Vector
The attack is network-based and requires no authentication or user interaction. An attacker can exploit this vulnerability through the following sequence:
- Identify a WordPress site using the Piraeus Bank WooCommerce Payment Gateway plugin
- Enumerate valid order IDs by starting from 1 and incrementing (or using known order ID patterns)
- Send crafted HTTP requests to the WooCommerce API callback endpoint with a 'fail' status and the target order's MerchantReference parameter
- The vulnerable endpoint processes the request without authorization validation, changing the order status to 'failed'
This attack causes significant business disruption including canceled shipments, inventory synchronization issues, customer service escalations, and direct revenue loss from orders incorrectly marked as failed.
Detection Methods for CVE-2025-14460
Indicators of Compromise
- Unusual volume of HTTP requests to WooCommerce payment callback endpoints from non-payment-gateway IP addresses
- Multiple order status changes to 'failed' in rapid succession from the same source IP
- Order status modifications occurring without corresponding payment gateway transaction logs
- Sequential order ID access patterns in web server logs indicating enumeration attempts
Detection Strategies
- Implement web application firewall (WAF) rules to monitor and rate-limit requests to payment callback endpoints
- Configure logging to capture all order status change events with source IP and timestamp correlation
- Deploy anomaly detection to identify abnormal patterns of failed order status transitions
- Cross-reference order status changes against legitimate Piraeus Bank gateway IP ranges
Monitoring Recommendations
- Enable verbose logging for WooCommerce order status changes and payment gateway callbacks
- Set up real-time alerts for bulk order status modifications to 'failed' state
- Monitor for requests to /wc-api/ endpoints from unexpected geographic locations or IP ranges
- Implement business logic monitoring to detect orders marked failed without corresponding payment failures
How to Mitigate CVE-2025-14460
Immediate Actions Required
- Update the Piraeus Bank WooCommerce Payment Gateway plugin to the latest patched version immediately
- Audit recent order status changes to identify potentially compromised orders and restore legitimate statuses
- Implement IP whitelisting for payment callback endpoints to restrict access to known Piraeus Bank gateway IP addresses
- Consider temporarily disabling the plugin if an immediate update is not possible
Patch Information
Review the official plugin repository for security updates. The vulnerability is documented in the Wordfence Vulnerability Report. Technical details about the vulnerable code can be found in the WordPress Plugin Code Reference. Site administrators should update to a version newer than 3.1.4 that includes proper authorization checks on the callback endpoint.
Workarounds
- Implement server-level IP restrictions to allow payment callback endpoint access only from verified Piraeus Bank IP ranges
- Deploy a web application firewall (WAF) rule to validate callback request signatures or block suspicious patterns
- Add custom authorization middleware to validate payment gateway callbacks before they reach the plugin
- Monitor and rate-limit requests to the vulnerable endpoint as a temporary protective measure
# Example: Apache .htaccess IP restriction for WooCommerce callback endpoint
# Add to WordPress root .htaccess (replace with actual Piraeus Bank gateway IPs)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/\?wc-api=WC_Piraeusbank_Gateway [NC]
RewriteCond %{REMOTE_ADDR} !^203\.0\.113\. [NC]
RewriteCond %{REMOTE_ADDR} !^198\.51\.100\. [NC]
RewriteRule ^ - [F,L]
</IfModule>
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


