{"id":"CVE-2026-103899","kind":"vulnerability","aliases":["CVE-2026-103899"],"related":[],"title":"WordPress EU VAT Assistant plugin: stored XSS via vat_number escalates to admin takeover","description":"The EU VAT Assistant for WooCommerce plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'vat_number' parameter in all versions up to, and including, 2.1.30.260413 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The stored payload executes in the administrator's browser context when reviewing an order via WooCommerce → Orders → Edit Order, enabling privilege escalation up to and including full site takeover via rogue administrator account creation.","summary":"The EU VAT Assistant for WooCommerce WordPress plugin fails to sanitize the vat_number parameter, so unauthenticated visitors can store scripts that run later. When an administrator opens the order in WooCommerce, the script runs in their browser and can create a rogue administrator account, giving full site takeover.","severity":"high","cvss":7.2,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","self-hosted","woocommerce","wordpress"],"not_affected_if":["plugin-not-installed"],"how_to_check":"- Check whether the EU VAT Assistant for WooCommerce plugin is installed and its version (WordPress admin Plugins page), noting any version up to and including `2.1.30.260413`\n- unknown for other checks; the sources do not say which file or setting to inspect","fix":"- Update the EU VAT Assistant for WooCommerce plugin to a version newer than `2.1.30.260413`; the sources do not name the patched version\n- unknown for other actions; the sources do not say","status":"open","published_at":"2026-10-17T04:16:47+00:00","first_seen_at":"2026-10-23T21:57:14+00:00","triaged_at":"2026-10-25T03:29:28+00:00","updated_at":"2026-10-25T03:29:28+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-25T03:29:28Z","model":"claude-haiku-5-5","output":{"fix":"- Update the EU VAT Assistant for WooCommerce plugin to a version newer than `2.1.30.260413`; the sources do not name the patched version\n- unknown for other actions; the sources do not say","reach":"internet","title":"WordPress EU VAT Assistant plugin: stored XSS via vat_number escalates to admin takeover","impact":"high","summary":"The EU VAT Assistant for WooCommerce WordPress plugin fails to sanitize the vat_number parameter, so unauthenticated visitors can store scripts that run later. When an administrator opens the order in WooCommerce, the script runs in their browser and can create a rogue administrator account, giving full site takeover.","category":"package","nicknames":[],"who_cares":["wordpress","woocommerce","self-hosted"],"confidence":0.7,"needs_auth":"no","worst_case":"Attacker creates a rogue administrator account and takes over the site","analyst_note":"Confirm the patched plugin version and the exact vat_number input path from the NVD entry or the plugin vendor changelog.","how_to_check":"- Check whether the EU VAT Assistant for WooCommerce plugin is installed and its version (WordPress admin Plugins page), noting any version up to and including `2.1.30.260413`\n- unknown for other checks; the sources do not say which file or setting to inspect","needs_analyst":true,"not_affected_if":["plugin-not-installed"],"who_is_affected":"Any WordPress site running the EU VAT Assistant for WooCommerce plugin at version `2.1.30.260413` or earlier is exposed, because the vat_number field accepts unauthenticated input. Sites that do not run this plugin can skip it. The sources do not say whether a default configuration is enough to be exploited.","user_interaction":"yes","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000665,"input_tokens":3439,"output_tokens":643,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-103899':17A,20A '-2026':16A,19A '2.1.30.260413':105C 'access':134C 'account':71B,170C 'admin':13A 'administr':53B,70B,144C,169C 'arbitrari':123C 'assist':4A,30B,79C 'attack':120C 'browser':64B,146C 'context':147C 'creat':67B 'creation':171C 'cross':90C 'cross-sit':89C 'cve':15A,18A 'due':106C 'edit':155C 'enabl':157C 'escal':11A,159C 'escap':113C 'eu':2A,28B,77C 'execut':130C,141C 'fail':35B 'full':73B,164C 'give':72B 'host':24B 'includ':104C,163C 'inject':122C,136C 'input':109C 'insuffici':108C 'later':50B 'make':115C 'number':10A,40B,96C 'open':54B 'order':56B,151C,154C,156C 'output':112C 'packag':21B 'page':127C,137C 'paramet':41B,97C 'payload':140C 'plugin':5A,34B,82C 'possibl':117C 'privileg':158C 'review':149C 'rogu':69B,168C 'run':49B,61B 'sanit':37B,110C 'script':47B,60B,92C,125C 'self':23B 'self-host':22B 'site':74B,91C,165C 'store':6A,46B,88C,139C 'takeov':14A,75B,166C 'unauthent':43B,119C 'user':133C 'vat':3A,9A,29B,39B,78C,95C 'version':100C 'via':8A,93C,152C,167C 'visitor':44B 'vulner':86C 'web':124C 'whenev':131C 'woocommerc':25B,32B,58B,81C,153C 'wordpress':1A,26B,33B,84C 'xss':7A","nicknames":[],"mitigations":[],"who_affected":"Any WordPress site running the EU VAT Assistant for WooCommerce plugin at version `2.1.30.260413` or earlier is exposed, because the vat_number field accepts unauthenticated input. Sites that do not run this plugin can skip it. The sources do not say whether a default configuration is enough to be exploited.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-17T04:16:47+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N","cvss_by":"security@wordfence.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-103899","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-103899","severity":null,"published_at":"2026-10-17T04:16:47+00:00","modified_at":"2026-10-19T15:16:45+00:00","first_seen_at":"2026-10-23T21:57:14+00:00","fetched_at":"2026-10-23T22:28:55+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}