{"id":"CVE-2026-120509","kind":"vulnerability","aliases":["CVE-2026-120509"],"related":[],"title":"WordPress Real Testimonials plugin: stored XSS via client name field","description":"The Real Testimonials – Testimonial Slider, Collect Customer Reviews and Video Testimonials plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'tpro_client_name' parameter in all versions up to, and including, 4.1.0 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 an administrator to publish the submitted testimonial, trigger the Show Preview AJAX handler, and save an Update, which canonicalizes and persists the attacker-controlled payload as the Manage View title — matching the plugin's standard moderation workflow. Successful exploitation additionally requires an action by an administrator — the attacker cannot trigger the vulnerability on their own.","summary":"The Real Testimonials WordPress plugin up to and including 4.1.0 does not sanitize the tpro_client_name parameter, so injected scripts are stored. An unauthenticated attacker can plant a script that runs in the browser of an administrator who publishes and saves the testimonial.","severity":"medium","cvss":4.7,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","real-testimonials","wordpress"],"not_affected_if":["auth-required","plugin-not-installed"],"how_to_check":"- Check the installed version of the Real Testimonials plugin in the WordPress admin plugins list and see whether it is `4.1.0` or older.\n- Look for the plugin's testimonial entries in the admin Manage View for unexpected script content in titles.","fix":null,"status":"open","published_at":"2026-11-07T12:17:44+00:00","first_seen_at":"2026-11-07T12:47:09+00:00","triaged_at":"2026-11-07T12:49:13+00:00","updated_at":"2026-11-07T12:49:13+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-07T12:49:13Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"internet","title":"WordPress Real Testimonials plugin: stored XSS via client name field","impact":"medium","summary":"The Real Testimonials WordPress plugin up to and including 4.1.0 does not sanitize the tpro_client_name parameter, so injected scripts are stored. An unauthenticated attacker can plant a script that runs in the browser of an administrator who publishes and saves the testimonial.","audience":"businesses","category":"package","nicknames":[],"who_cares":["wordpress","real-testimonials"],"confidence":0.7,"fix_status":"unknown","needs_auth":"no","worst_case":"script runs in administrator browsers, enabling session or account takeover","analyst_note":"Confirm the fixed version of the Real Testimonials plugin after 4.1.0 from the NVD entry or the plugin's changelog on WordPress.org.","how_to_check":"- Check the installed version of the Real Testimonials plugin in the WordPress admin plugins list and see whether it is `4.1.0` or older.\n- Look for the plugin's testimonial entries in the admin Manage View for unexpected script content in titles.","plain_action":"","needs_analyst":true,"not_affected_if":["plugin-not-installed","auth-required"],"who_is_affected":"Sites running the Real Testimonials plugin at version 4.1.0 or earlier are exposed when an administrator moderates submitted testimonials. Sites without this plugin, or with a newer version, are not affected by this entry. The sources do not describe a fixed version.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000728,"input_tokens":4426,"output_tokens":571,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-120509':13A,16A '-2026':12A,15A '4.1.0':31B,101C 'access':130C 'action':180C 'addit':177C 'administr':59B,138C,183C 'ajax':148C 'arbitrari':119C 'attack':47B,116C,160C,185C 'attacker-control':159C 'browser':56B 'cannot':186C 'canonic':155C 'client':8A,37B,91C 'collect':71C 'control':161C 'cross':85C 'cross-sit':84C 'custom':72C 'cve':11A,14A 'due':102C 'escap':109C 'execut':126C 'exploit':135C,176C 'field':10A 'handler':149C 'includ':30B,100C 'inject':41B,118C,132C 'input':105C 'insuffici':104C 'make':111C 'manag':165C 'match':168C 'moder':173C 'name':9A,38B,92C 'output':108C 'packag':17B 'page':123C,133C 'paramet':39B,93C 'payload':162C 'persist':157C 'plant':49B 'plugin':4A,26B,77C,170C 'possibl':113C 'preview':147C 'publish':61B,140C 'real':2A,19B,23B,67C 'real-testimoni':18B 'requir':136C,178C 'review':73C 'run':53B 'sanit':34B,106C 'save':63B,151C 'script':42B,51B,87C,121C 'show':146C 'site':86C 'slider':70C 'standard':172C 'store':5A,44B,83C 'submit':142C 'success':134C,175C 'testimoni':3A,20B,24B,65B,68C,69C,76C,143C 'titl':167C 'tpro':36B,90C 'trigger':144C,187C 'unauthent':46B,115C 'updat':153C 'user':129C 'version':96C 'via':7A,88C 'video':75C 'view':166C 'vulner':81C,189C 'web':120C 'whenev':127C 'wordpress':1A,21B,25B,79C 'workflow':174C 'xss':6A","nicknames":[],"mitigations":[],"who_affected":"Sites running the Real Testimonials plugin at version 4.1.0 or earlier are exposed when an administrator moderates submitted testimonials. Sites without this plugin, or with a newer version, are not affected by this entry. The sources do not describe a fixed version.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"none","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["medium","package","realtestimonials","wordpress"],"campaign_type":null,"search_a":"'-120509':13A,16A '-2026':12A,15A 'client':8A 'cve':11A,14A 'field':10A 'name':9A 'plugin':4A 'real':2A 'store':5A 'testimoni':3A 'via':7A 'wordpress':1A 'xss':6A","search_b":"'4.1.0':31B 'administr':59B 'attack':47B 'browser':56B 'client':37B 'includ':30B 'inject':41B 'name':38B 'packag':17B 'paramet':39B 'plant':49B 'plugin':26B 'publish':61B 'real':19B,23B 'real-testimoni':18B 'run':53B 'sanit':34B 'save':63B 'script':42B,51B 'store':44B 'testimoni':20B,24B,65B 'tpro':36B 'unauthent':46B 'wordpress':21B,25B","search_c":"'4.1.0':101C 'access':130C 'action':180C 'addit':177C 'administr':138C,183C 'ajax':148C 'arbitrari':119C 'attack':116C,160C,185C 'attacker-control':159C 'cannot':186C 'canonic':155C 'client':91C 'collect':71C 'control':161C 'cross':85C 'cross-sit':84C 'custom':72C 'due':102C 'escap':109C 'execut':126C 'exploit':135C,176C 'handler':149C 'includ':100C 'inject':118C,132C 'input':105C 'insuffici':104C 'make':111C 'manag':165C 'match':168C 'moder':173C 'name':92C 'output':108C 'page':123C,133C 'paramet':93C 'payload':162C 'persist':157C 'plugin':77C,170C 'possibl':113C 'preview':147C 'publish':140C 'real':67C 'requir':136C,178C 'review':73C 'sanit':106C 'save':151C 'script':87C,121C 'show':146C 'site':86C 'slider':70C 'standard':172C 'store':83C 'submit':142C 'success':134C,175C 'testimoni':68C,69C,76C,143C 'titl':167C 'tpro':90C 'trigger':144C,187C 'unauthent':115C 'updat':153C 'user':129C 'version':96C 'via':88C 'video':75C 'view':166C 'vulner':81C,189C 'web':120C 'whenev':127C 'wordpress':79C 'workflow':174C","first_public_at":"2026-11-07T12:17:44+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N","cvss_by":"security@wordfence.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-120509","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-120509","severity":null,"published_at":"2026-11-07T12:17:44+00:00","modified_at":"2026-11-07T12:17:44+00:00","first_seen_at":"2026-11-07T12:47:09+00:00","fetched_at":"2026-11-07T12:47:09+00:00","note":null}],"documents":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}