{"id":"CVE-2026-109198","kind":"vulnerability","aliases":["CVE-2026-109198"],"related":[],"title":"WordPress CleanTalk anti-spam plugin: stored XSS via registration email","description":"The Anti-Spam by CleanTalk – Spam Protection Without CAPTCHA plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'user_email' parameter in all versions up to, and including, 6.89.1 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. Successful exploitation requires user registration to be open on the site, and script execution is triggered when an Administrator subsequently runs the plugin's user-spam scan and views the resulting Non-checkable users or Spam users tab — the plugin's own documented workflow.","summary":"Versions of the Anti-Spam by CleanTalk WordPress plugin up to and including 6.89.1 do not sanitize the user_email parameter. An unauthenticated attacker who registers with a crafted email can plant a script that runs in an administrator's browser when they open the plugin's spam user tabs.","severity":"high","cvss":7.2,"epss":0.00351,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","self-hosted","wordpress","wordpress-plugin"],"not_affected_if":["plugin-not-installed","registration-closed"],"how_to_check":"- Check the installed plugin version in the WordPress admin Plugins screen, or with `wp plugin get cleantalk-spam-protect --field=version` (slug assumed; confirm it).\n- Check whether user registration is open under Settings > General > Membership.","fix":"- Update the Anti-Spam by CleanTalk plugin to a version later than `6.89.1`, as published by the vendor (fixed version unknown from sources).\n- Until updated, disable open user registration or the plugin's user-spam scan.","status":"open","published_at":"2026-10-23T05:17:14+00:00","first_seen_at":"2026-10-23T21:57:32+00:00","triaged_at":"2026-10-25T03:27:46+00:00","updated_at":"2026-10-25T03:27:46+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-25T03:27:46Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Anti-Spam by CleanTalk plugin to a version later than `6.89.1`, as published by the vendor (fixed version unknown from sources).\n- Until updated, disable open user registration or the plugin's user-spam scan.","reach":"internet","title":"WordPress CleanTalk anti-spam plugin: stored XSS via registration email","impact":"medium","summary":"Versions of the Anti-Spam by CleanTalk WordPress plugin up to and including 6.89.1 do not sanitize the user_email parameter. An unauthenticated attacker who registers with a crafted email can plant a script that runs in an administrator's browser when they open the plugin's spam user tabs.","category":"package","nicknames":[],"who_cares":["wordpress","wordpress-plugin","self-hosted"],"confidence":0.7,"needs_auth":"no","worst_case":"Script runs in administrator sessions, enabling account takeover of the site.","analyst_note":"Confirm the fixed plugin version and the exact plugin slug from the vendor changelog or the NVD/WPScan entry.","how_to_check":"- Check the installed plugin version in the WordPress admin Plugins screen, or with `wp plugin get cleantalk-spam-protect --field=version` (slug assumed; confirm it).\n- Check whether user registration is open under Settings > General > Membership.","needs_analyst":true,"not_affected_if":["registration-closed","plugin-not-installed"],"who_is_affected":"Sites running the Anti-Spam by CleanTalk plugin at version 6.89.1 or earlier with open user registration enabled. The script only fires when an administrator runs the user-spam scan and views the Non-checkable users or Spam users tab, so sites with registration closed or without the plugin can skip it.","user_interaction":"yes","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000677,"input_tokens":3510,"output_tokens":651,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-109198':14A,17A '-2026':13A,16A '6.89.1':40B,110C 'access':139C 'administr':65B,161C 'anti':4A,30B,79C 'anti-spam':3A,29B,78C 'arbitrari':128C 'attack':50B,125C 'browser':67B 'captcha':86C 'checkabl':177C 'cleantalk':2A,33B,82C 'craft':55B 'cross':95C 'cross-sit':94C 'cve':12A,15A 'document':187C 'due':111C 'email':11A,46B,56B,101C 'escap':118C 'execut':135C,156C 'exploit':144C 'host':21B 'includ':39B,109C 'inject':127C,141C 'input':114C 'insuffici':113C 'make':120C 'non':176C 'non-check':175C 'open':70B,150C 'output':117C 'packag':18B 'page':132C,142C 'paramet':47B,102C 'plant':58B 'plugin':6A,25B,35B,72B,87C,165C,184C 'possibl':122C 'protect':84C 'regist':52B 'registr':10A,147C 'requir':145C 'result':174C 'run':62B,163C 'sanit':43B,115C 'scan':170C 'script':60B,97C,130C,155C 'self':20B 'self-host':19B 'site':96C,153C 'spam':5A,31B,74B,80C,83C,169C,180C 'store':7A,93C 'subsequ':162C 'success':143C 'tab':76B,182C 'trigger':158C 'unauthent':49B,124C 'user':45B,75B,100C,138C,146C,168C,178C,181C 'user-spam':167C 'version':26B,105C 'via':9A,98C 'view':172C 'vulner':91C 'web':129C 'whenev':136C 'without':85C 'wordpress':1A,22B,24B,34B,89C 'wordpress-plugin':23B 'workflow':188C 'xss':8A","nicknames":[],"mitigations":[],"who_affected":"Sites running the Anti-Spam by CleanTalk plugin at version 6.89.1 or earlier with open user registration enabled. The script only fires when an administrator runs the user-spam scan and views the Non-checkable users or Spam users tab, so sites with registration closed or without the plugin can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-23T05:17:14+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-109198","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-109198","severity":null,"published_at":"2026-10-23T05:17:14+00:00","modified_at":"2026-10-23T14:20:57+00:00","first_seen_at":"2026-10-23T21:57:32+00:00","fetched_at":"2026-10-23T22:29:03+00:00","note":null},{"source":"epss","external_id":"CVE-2026-109198","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-109198","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T07:15:51+00:00","fetched_at":"2026-10-24T07:15:51+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"}