{"id":"CVE-2026-111110","kind":"vulnerability","aliases":["CVE-2026-111110"],"related":[],"title":"GetPaid WordPress plugin: unauthenticated stored XSS through a form parameter","description":"The Payment forms, Buy now buttons, and Invoicing System | GetPaid plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'mmdwqzpoxadd' parameter in all versions up to, and including, 2.8.61 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 required nonce (getpaid_form_nonce) is publicly emitted to all visitors via wp_localize_script as WPInv.formNonce, meaning no authentication or prior nonce leak is needed; the stored payload fires when an administrator views the affected invoice's Payment Form Details metabox.","summary":"The GetPaid plugin for WordPress does not sanitize the 'mmdwqzpoxadd' parameter, so an unauthenticated visitor can store a script that runs for anyone who opens the affected page. The stored payload also fires when an administrator views the invoice's Payment Form Details metabox, which can lead to admin session takeover.","severity":"high","cvss":7.2,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["getpaid","package","self-hosted","wordpress","wordpress-plugin"],"not_affected_if":["patched-version","plugin-not-installed"],"how_to_check":"- Check the installed GetPaid version in the WordPress plugins screen or with `wp plugin get getpaid --field=version`\n- Look for the 'mmdwqzpoxadd' parameter in stored invoice or form data","fix":"- Update the GetPaid plugin to a version later than `2.8.61`\n- Until updated, review pages and invoices for injected script tags","status":"open","published_at":"2026-10-17T08:16:28+00:00","first_seen_at":"2026-10-23T21:57:14+00:00","triaged_at":"2026-10-25T03:29:26+00:00","updated_at":"2026-10-25T03:29:26+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-25T03:29:26Z","model":"claude-haiku-5-5","output":{"fix":"- Update the GetPaid plugin to a version later than `2.8.61`\n- Until updated, review pages and invoices for injected script tags","reach":"internet","title":"GetPaid WordPress plugin: unauthenticated stored XSS through a form parameter","impact":"medium","summary":"The GetPaid plugin for WordPress does not sanitize the 'mmdwqzpoxadd' parameter, so an unauthenticated visitor can store a script that runs for anyone who opens the affected page. The stored payload also fires when an administrator views the invoice's Payment Form Details metabox, which can lead to admin session takeover.","category":"package","nicknames":[],"who_cares":["wordpress","wordpress-plugin","getpaid","self-hosted"],"confidence":0.8,"needs_auth":"no","worst_case":"Script runs in visitors' and administrators' browsers, enabling admin account takeover","analyst_note":"Confirm the fixed version number and the exact patched release from the NVD entry or the plugin changelog; sources do not name it.","how_to_check":"- Check the installed GetPaid version in the WordPress plugins screen or with `wp plugin get getpaid --field=version`\n- Look for the 'mmdwqzpoxadd' parameter in stored invoice or form data","needs_analyst":true,"not_affected_if":["plugin-not-installed","patched-version"],"who_is_affected":"Sites running the GetPaid plugin version 2.8.61 or earlier that accept public payment or buy-now forms. Sites without GetPaid, or running a patched version, are not affected.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.00064,"input_tokens":3481,"output_tokens":583,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-111110':13A,16A '-2026':12A,15A '2.8.61':109C 'access':138C 'admin':74B 'administr':61B,175C 'affect':52B,178C 'also':57B 'anyon':48B 'arbitrari':127C 'attack':124C 'authent':162C 'button':82C 'buy':80C 'cross':95C 'cross-sit':94C 'cve':11A,14A 'detail':68B,183C 'due':110C 'emit':150C 'escap':117C 'execut':134C 'fire':58B,172C 'form':9A,67B,79C,146C,182C 'getpaid':1A,17B,27B,86C,145C 'host':21B 'includ':108C 'inject':126C,140C 'input':113C 'insuffici':112C 'invoic':64B,84C,179C 'lead':72B 'leak':166C 'local':156C 'make':119C 'mean':160C 'metabox':69B,184C 'mmdwqzpoxadd':35B,100C 'need':168C 'nonc':144C,147C,165C 'open':50B 'output':116C 'packag':18B 'page':53B,131C,141C 'paramet':10A,36B,101C 'payload':56B,171C 'payment':66B,78C,181C 'plugin':3A,25B,28B,87C 'possibl':121C 'prior':164C 'public':149C 'requir':143C 'run':46B 'sanit':33B,114C 'script':44B,97C,129C,157C 'self':20B 'self-host':19B 'session':75B 'site':96C 'store':5A,42B,55B,93C,170C 'system':85C 'takeov':76B 'unauthent':4A,39B,123C 'user':137C 'version':104C 'via':98C,154C 'view':62B,176C 'visitor':40B,153C 'vulner':91C 'web':128C 'whenev':135C 'wordpress':2A,22B,24B,30B,89C 'wordpress-plugin':23B 'wp':155C 'wpinv.formnonce':159C 'xss':6A","nicknames":[],"mitigations":[],"who_affected":"Sites running the GetPaid plugin version 2.8.61 or earlier that accept public payment or buy-now forms. Sites without GetPaid, or running a patched version, are not affected.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-17T08:16:28+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-111110","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-111110","severity":null,"published_at":"2026-10-17T08:16:28+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"}