SECURITYHIGHCVE-2026-103899

CVE-2026-103899: Stored XSS in EU VAT Assistant for WooCommerce

EU VAT Assistant ≤ 2.1.30.260413 fails to sanitize the 'vat_number' field, letting unauthenticated attackers plant XSS that fires on order view (CVSS 7.2).

Dylan H.

Security Team

October 17, 2026
5 min read
CVE-2026-103899: Stored XSS in EU VAT Assistant for WooCommerce

Affected Products

  • EU VAT Assistant for WooCommerce (daigo75) — all versions through 2.1.30.260413

Overview

A high-severity stored Cross-Site Scripting (XSS) vulnerability, tracked as CVE-2026-103899, has been disclosed in EU VAT Assistant for WooCommerce, a plugin by developer daigo75 that validates EU VAT numbers and handles VAT-exempt checkout for WooCommerce stores. The flaw carries a CVSS 3.1 score of 7.2 and affects all versions through 2.1.30.260413.

The vulnerability sits in the plugin's vat_number checkout field, which is stored without adequate sanitization and rendered without output escaping when a store administrator later views the order. Because no authentication is required to place an order, any site visitor can plant the payload — and it fires automatically against an administrator's privileged browser session.


Technical Details

FieldValue
CVE IDCVE-2026-103899
CVSS 3.1 Score7.2 (High) — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
CWECWE-79 — Improper Neutralization of Input During Web Page Generation (XSS)
Attack VectorNetwork
AuthenticationNone required
Privileges RequiredNone
User InteractionRequired — a store administrator (or other privileged user) must view the tainted order
Affected Fieldvat_number (WooCommerce checkout)
Vulnerable Filesorder-vat-info-box.php, order.php, vat_number_validator.php, plugin-main.php
Affected VersionsEU VAT Assistant for WooCommerce, all versions through 2.1.30.260413
AssignerWordfence
Reserved / Published / Updated2026-10-01 / 2026-10-17 / 2026-10-17

How It Works

EU VAT Assistant collects a vat_number value at WooCommerce checkout to validate a buyer's EU VAT registration and apply the appropriate tax treatment. The plugin's input sanitization and output escaping for this field are insufficient, so a buyer can submit a VAT number value that is, in fact, a JavaScript payload rather than a real VAT ID.

Unlike reflected XSS, which needs a victim to click a crafted link, this is a stored flaw: the malicious value is saved with the order and only fires later, automatically, whenever a privileged user opens that order in wp-admin — specifically, when the VAT info box renders the stored value on the order edit screen. Because WooCommerce order management runs with administrator-level capabilities, a successful payload executes in a context that can manage users, plugins, and site configuration.


Impact Assessment

Impact AreaDescription
ConfidentialityLow per the published vector, though session-riding from an admin context can expose further data
IntegrityLow direct impact, but a script running as an administrator can be chained into privilege escalation (e.g. creating a new admin user, installing a plugin)
AvailabilityNone directly scored
Authentication RequiredNone for the attacker; a victim admin must open the order to trigger the payload
AutomatableYes — placing orders with a malicious vat_number is trivial to script against a live checkout

Who Is At Risk

  • Any WooCommerce store running EU VAT Assistant through version 2.1.30.260413
  • Stores based in or selling into the EU, where VAT-exempt checkout flows using this plugin are common
  • Store staff who routinely open order details in wp-admin to review or fulfill VAT-exempt orders

Attack Chain

  1. Order submission — Attacker places an order through the storefront checkout, entering a crafted JavaScript payload in the vat_number field instead of a real VAT ID.
  2. Storage — The plugin persists the unsanitized value with the order record.
  3. Trigger — A store administrator opens the order in wp-admin to review or process it, rendering the VAT info box.
  4. Execution — The payload runs in the administrator's authenticated browser session, enabling session hijacking, admin-account creation, or further site compromise.

Mitigation

Immediate Actions

  • Update EU VAT Assistant for WooCommerce to a version later than 2.1.30.260413, which adds proper input sanitization and output escaping to the vat_number field.
  • Until patched, review recent orders for vat_number values containing <script>, javascript:, onerror=, or similar markers, and manually clean any affected order records.

Detection Opportunities

  • Monitor checkout submissions for vat_number values that fail a basic EU VAT-format check but contain HTML/JS metacharacters (<, >, ", javascript:).
  • Watch browser-side error logs or Content Security Policy (CSP) violation reports from wp-admin order-edit pages for blocked inline-script attempts.

Defence-in-Depth

  • Deploy a Web Application Firewall rule blocking common XSS payload patterns in the vat_number checkout parameter.
  • Enable a strict Content Security Policy on wp-admin pages to limit inline script execution even if a payload is stored.
  • Limit the number of staff accounts with order-management capability, reducing how often a tainted order gets opened by a high-privilege session.

Background

EU VAT Assistant for WooCommerce is a plugin by developer daigo75 that automates EU VAT number validation (via the EU's VIES service) and VAT-exemption handling for WooCommerce stores selling to business customers across the EU. Because VAT number fields are rarely treated as "untrusted user content" in the same way a comment or review field would be, they are an easy field for output-escaping gaps to slip through — as this advisory demonstrates.


References