Skip to main content
Vulnerability Database/CVE-2026-100316

CVE-2026-100316: WooCommerce VAT Plugin XSS Vulnerability

CVE-2026-100316 is a stored cross-site scripting vulnerability in the European VAT Compliance Assistant for WooCommerce plugin. Unauthenticated attackers can inject malicious scripts via CF-IPCountry headers during guest checkout. This article covers technical details, affected versions, impact assessment, and mitigation strategies.

Published:

CVE-2026-100316 Overview

CVE-2026-100316 is a Stored Cross-Site Scripting (XSS) vulnerability affecting the European VAT Compliance Assistant for WooCommerce plugin for WordPress in all versions up to and including 1.36.10. The plugin trusts the CF-IPCountry HTTP header during guest checkout and writes its value verbatim into order post-meta. Unauthenticated attackers can inject arbitrary web scripts that execute when administrators or users view the affected order pages. The flaw is tracked under CWE-79 and documented in the Wordfence Vulnerability Report.

Critical Impact

Unauthenticated attackers can plant persistent JavaScript payloads inside WooCommerce orders through a crafted HTTP header, enabling session theft, administrator account compromise, and WordPress backend takeover.

Affected Products

  • European VAT Compliance Assistant for WooCommerce plugin for WordPress
  • All versions up to and including 1.36.10
  • WordPress installations running WooCommerce with the vulnerable plugin active

Discovery Timeline

  • 2026-10-17 - CVE-2026-100316 published to the National Vulnerability Database
  • 2026-10-19 - Last updated in NVD database

Technical Details for CVE-2026-100316

Vulnerability Analysis

The European VAT Compliance Assistant for WooCommerce plugin reads the CF-IPCountry HTTP request header during the checkout workflow. Cloudflare adds this header to identify the originating country of a request, but any client can forge it when the WordPress origin is reachable without proxy enforcement. The plugin consumes the raw header value and writes it directly into order post-meta without sanitization or escaping. When a store operator views the order in the WooCommerce admin or any front-end page that renders this metadata, the stored payload executes in the browser context of the viewer. The relevant code paths are visible in bootstrap.php and record-order-details.php of the vulnerable branch, as referenced in the plugin source at line 1779 and record-order-details.php line 222.

Root Cause

The root cause is insufficient input sanitization combined with missing output escaping. The plugin treats a client-controlled HTTP header as trusted data and persists it verbatim into the WordPress database. There is no call to sanitize_text_field(), wp_kses(), or esc_html() on the write path, and the admin rendering path emits the value without escaping. This chain satisfies the preconditions for stored XSS under CWE-79.

Attack Vector

An unauthenticated attacker initiates a guest checkout against a WooCommerce store running the vulnerable plugin. The attacker sets the CF-IPCountry request header to a crafted value containing JavaScript, for example a <script> tag or an event handler attribute. The plugin stores the header value as order post-meta. When a store administrator opens the order in wp-admin, the browser parses and executes the injected script, enabling session hijacking, forced plugin installation, or privilege escalation to administrator. The fix is published in changeset #3713548, with the diff against the previous release available for review.

Detection Methods for CVE-2026-100316

Indicators of Compromise

  • Order post-meta entries whose stored CF-IPCountry value contains HTML tags, angle brackets, javascript: URIs, or on*= event handler attributes.
  • Inbound HTTP requests to checkout endpoints carrying a CF-IPCountry header longer than the expected two-letter ISO country code.
  • Unexpected outbound requests from administrator browsers to attacker-controlled domains shortly after viewing a WooCommerce order.
  • WordPress users with newly elevated privileges or newly created administrator accounts without a corresponding audit entry.

Detection Strategies

  • Query the wp_postmeta table for VAT compliance meta keys containing characters outside the [A-Z]{2} pattern expected for an ISO country code.
  • Inspect web server and WAF logs for guest checkout POST requests with suspicious CF-IPCountry header payloads.
  • Deploy content security policy (CSP) violation reporting on wp-admin pages to catch script execution originating from inline order data.

Monitoring Recommendations

  • Enable file integrity monitoring on WordPress plugin directories to detect tampering tied to post-exploitation activity.
  • Alert on administrator session anomalies, including token reuse from new IP addresses or user agents immediately after order review.
  • Monitor WooCommerce admin page loads for inline <script> content served from stored meta fields.

How to Mitigate CVE-2026-100316

Immediate Actions Required

  • Upgrade the European VAT Compliance Assistant for WooCommerce plugin to the version released in changeset #3713548, which supersedes 1.36.10.
  • Audit existing WooCommerce orders for post-meta containing HTML or script content and purge malicious values.
  • Rotate administrator credentials and invalidate active sessions for any user who may have viewed a compromised order.

Patch Information

The vendor addressed CVE-2026-100316 after version 1.36.10. The code change is published in WordPress plugin changeset 3713548 and modifies record-order-details.php so that the CF-IPCountry header value is sanitized before being written to order post-meta. Administrators should install the patched release through the WordPress plugin updater and verify the active version after update.

Workarounds

  • Configure the web server or reverse proxy to strip or overwrite the CF-IPCountry header on inbound requests, allowing it only when sourced from trusted Cloudflare IP ranges.
  • Deploy a WAF rule that blocks checkout requests containing HTML special characters inside the CF-IPCountry header.
  • Temporarily deactivate the plugin on stores that cannot patch immediately and rely on an alternative VAT compliance mechanism.
bash
# Example nginx rule to drop forged CF-IPCountry headers from untrusted sources
map $http_cf_ipcountry $sanitized_cf_ipcountry {
    default "";
    "~^[A-Z]{2}$" $http_cf_ipcountry;
}

server {
    location / {
        proxy_set_header CF-IPCountry $sanitized_cf_ipcountry;
        proxy_pass http://wordpress_backend;
    }
}

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.