{"id":"CVE-2026-120685","kind":"vulnerability","aliases":["CVE-2026-120685"],"related":[],"title":"WordPress Real Testimonials plugin: stored cross-site scripting through testimonial fields","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_image (JPEG IPTC caption) + tpro_client_testimonial ([gallery] shortcode)' 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. This requires an administrator to have the display block configured with the Strip All HTML Tags option disabled, which is the plugin's native setting for rendering formatted testimonial content, and to have approved the submitted testimonials.","summary":"The Real Testimonials WordPress plugin up to and including 4.1.0 fails to sanitize testimonial image captions and testimonial text, so injected scripts are stored and run in visitors' browsers. An unauthenticated attacker can submit content that executes when a user opens an affected page.","severity":"medium","cvss":5.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","real-testimonials","self-hosted","wordpress"],"not_affected_if":["no-approved-testimonials","plugin-not-installed","strip-all-html-tags-enabled"],"how_to_check":"- Check the installed version of the Real Testimonials plugin in the WordPress admin plugins list; versions up to and including `4.1.0` are affected.\n- Check whether the display block has the Strip All HTML Tags option disabled and whether submitted testimonials are approved and shown on pages.","fix":"- Real Testimonials plugin: unknown (the sources do not state a fixed version).","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:09+00:00","updated_at":"2026-11-07T12:49:09+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-07T12:49:09Z","model":"claude-haiku-5-5","output":{"fix":"- Real Testimonials plugin: unknown (the sources do not state a fixed version).","reach":"internet","title":"WordPress Real Testimonials plugin: stored cross-site scripting through testimonial fields","impact":"medium","summary":"The Real Testimonials WordPress plugin up to and including 4.1.0 fails to sanitize testimonial image captions and testimonial text, so injected scripts are stored and run in visitors' browsers. An unauthenticated attacker can submit content that executes when a user opens an affected page.","audience":"businesses","category":"package","nicknames":[],"who_cares":["wordpress","real-testimonials","self-hosted"],"confidence":0.7,"fix_status":"unknown","needs_auth":"no","worst_case":"script runs in visitors' browsers on the affected site","analyst_note":"Find the fixed version of Real Testimonials after 4.1.0 on the NVD entry or the WordPress plugin page, since the sources give none.","how_to_check":"- Check the installed version of the Real Testimonials plugin in the WordPress admin plugins list; versions up to and including `4.1.0` are affected.\n- Check whether the display block has the Strip All HTML Tags option disabled and whether submitted testimonials are approved and shown on pages.","plain_action":"","needs_analyst":true,"not_affected_if":["plugin-not-installed","strip-all-html-tags-enabled","no-approved-testimonials"],"who_is_affected":"Sites running the Real Testimonials WordPress plugin version 4.1.0 or earlier where the display block has Strip All HTML Tags turned off and testimonials are approved for display. Sites without the plugin, on a newer version, or with Strip All HTML Tags enabled are not exposed by this description.","user_interaction":"yes","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000762,"input_tokens":4397,"output_tokens":645,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-120685':15A,18A '-2026':14A,17A '4.1.0':36B,114C 'access':143C 'administr':150C 'affect':69B 'approv':180C 'arbitrari':132C 'attack':58B,129C 'block':155C 'browser':55B 'caption':42B,100C 'client':96C,102C 'collect':76C 'configur':156C 'content':61B,176C 'cross':7A,90C 'cross-sit':6A,89C 'custom':77C 'cve':13A,16A 'disabl':164C 'display':154C 'due':115C 'escap':122C 'execut':63B,139C 'fail':37B 'field':12A 'format':174C 'galleri':104C 'host':25B 'html':161C 'imag':41B,97C 'includ':35B,113C 'inject':47B,131C,145C 'input':118C 'insuffici':117C 'iptc':99C 'jpeg':98C 'make':124C 'nativ':170C 'open':67B 'option':163C 'output':121C 'packag':19B 'page':70B,136C,146C 'paramet':106C 'plugin':4A,31B,82C,168C 'possibl':126C 'real':2A,21B,28B,72C 'real-testimoni':20B 'render':173C 'requir':148C 'review':78C 'run':52B 'sanit':39B,119C 'script':9A,48B,92C,134C 'self':24B 'self-host':23B 'set':171C 'shortcod':105C 'site':8A,91C 'slider':75C 'store':5A,50B,88C 'strip':159C 'submit':60B,182C 'tag':162C 'testimoni':3A,11A,22B,29B,40B,44B,73C,74C,81C,103C,175C,183C 'text':45B 'tpro':95C,101C 'unauthent':57B,128C 'user':66B,142C 'version':109C 'via':93C 'video':80C 'visitor':54B 'vulner':86C 'web':133C 'whenev':140C 'wordpress':1A,26B,30B,84C","nicknames":[],"mitigations":[],"who_affected":"Sites running the Real Testimonials WordPress plugin version 4.1.0 or earlier where the display block has Strip All HTML Tags turned off and testimonials are approved for display. Sites without the plugin, on a newer version, or with Strip All HTML Tags enabled are not exposed by this description.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["medium","package","realtestimonials","selfhosted","wordpress"],"campaign_type":null,"search_a":"'-120685':15A,18A '-2026':14A,17A 'cross':7A 'cross-sit':6A 'cve':13A,16A 'field':12A 'plugin':4A 'real':2A 'script':9A 'site':8A 'store':5A 'testimoni':3A,11A 'wordpress':1A","search_b":"'4.1.0':36B 'affect':69B 'attack':58B 'browser':55B 'caption':42B 'content':61B 'execut':63B 'fail':37B 'host':25B 'imag':41B 'includ':35B 'inject':47B 'open':67B 'packag':19B 'page':70B 'plugin':31B 'real':21B,28B 'real-testimoni':20B 'run':52B 'sanit':39B 'script':48B 'self':24B 'self-host':23B 'store':50B 'submit':60B 'testimoni':22B,29B,40B,44B 'text':45B 'unauthent':57B 'user':66B 'visitor':54B 'wordpress':26B,30B","search_c":"'4.1.0':114C 'access':143C 'administr':150C 'approv':180C 'arbitrari':132C 'attack':129C 'block':155C 'caption':100C 'client':96C,102C 'collect':76C 'configur':156C 'content':176C 'cross':90C 'cross-sit':89C 'custom':77C 'disabl':164C 'display':154C 'due':115C 'escap':122C 'execut':139C 'format':174C 'galleri':104C 'html':161C 'imag':97C 'includ':113C 'inject':131C,145C 'input':118C 'insuffici':117C 'iptc':99C 'jpeg':98C 'make':124C 'nativ':170C 'option':163C 'output':121C 'page':136C,146C 'paramet':106C 'plugin':82C,168C 'possibl':126C 'real':72C 'render':173C 'requir':148C 'review':78C 'sanit':119C 'script':92C,134C 'set':171C 'shortcod':105C 'site':91C 'slider':75C 'store':88C 'strip':159C 'submit':182C 'tag':162C 'testimoni':73C,74C,81C,103C,175C,183C 'tpro':95C,101C 'unauthent':128C 'user':142C 'version':109C 'via':93C 'video':80C 'vulner':86C 'web':133C 'whenev':140C 'wordpress':84C","first_public_at":"2026-11-07T12:17:44+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/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-120685","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-120685","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"}