{"id":"CVE-2026-119070","kind":"vulnerability","aliases":["CVE-2026-119070"],"related":[],"title":"WordPress Optimole plugin: unauthenticated stored cross-site scripting via comments","description":"The Optimole – Optimize Images | Convert WebP & AVIF | CDN & Lazy Load | Image Optimization plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'comment' parameter in all versions up to, and including, 4.2.17 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 exploit requires the plugin to be in its normal connected state (cdn_key and cdn_secret configured) with the image replacer enabled, which is the default post-setup configuration; the stored payload bypasses all WordPress comment sanitization filters because it contains no HTML metacharacters at storage time — the characters are produced only by Optimole's own decoder at render time.","summary":"The Optimole image optimization plugin for WordPress does not sanitize the 'comment' parameter, so anyone can store a script that runs when visitors open the affected page. An attacker can run scripts in the browsers of site visitors, including logged-in administrators.","severity":"high","cvss":7.2,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["optimole","package","self-hosted","wordpress"],"not_affected_if":["image-replacer-disabled","not-connected-to-optimole","plugin-removed"],"how_to_check":"- Check whether the Optimole plugin is installed and its version in the WordPress admin under Plugins; the sources say versions up to and including `4.2.17` are affected.\n- Confirm whether `cdn_key` and `cdn_secret` are configured and the image replacer is enabled in the plugin settings, since the sources say this is the default connected state.","fix":"- Optimole – Optimize Images plugin: the sources do not state a fixed version.","status":"open","published_at":"2026-11-07T03:17:00+00:00","first_seen_at":"2026-11-07T03:45:32+00:00","triaged_at":"2026-11-07T03:47:49+00:00","updated_at":"2026-11-07T03:47:49+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-07T03:47:49Z","model":"claude-haiku-5-5","output":{"fix":"- Optimole – Optimize Images plugin: the sources do not state a fixed version.","reach":"internet","title":"WordPress Optimole plugin: unauthenticated stored cross-site scripting via comments","impact":"medium","summary":"The Optimole image optimization plugin for WordPress does not sanitize the 'comment' parameter, so anyone can store a script that runs when visitors open the affected page. An attacker can run scripts in the browsers of site visitors, including logged-in administrators.","audience":"businesses","category":"package","nicknames":[],"who_cares":["wordpress","optimole","self-hosted"],"confidence":0.7,"fix_status":"unknown","needs_auth":"no","worst_case":"Scripts run in visitors' browsers, including administrators, on the site","analyst_note":"Find the vendor's fixed version and any patch for Optimole beyond 4.2.17 at the NVD entry https://nvd.nist.gov/vuln/detail/CVE-2026-119070 and the plugin's WordPress.org changelog.","how_to_check":"- Check whether the Optimole plugin is installed and its version in the WordPress admin under Plugins; the sources say versions up to and including `4.2.17` are affected.\n- Confirm whether `cdn_key` and `cdn_secret` are configured and the image replacer is enabled in the plugin settings, since the sources say this is the default connected state.","plain_action":"","needs_analyst":true,"not_affected_if":["plugin-removed","not-connected-to-optimole","image-replacer-disabled"],"who_is_affected":"Sites running the Optimole image optimization plugin at version `4.2.17` or earlier that are connected to Optimole's service with the image replacer enabled, which the sources describe as the default after setup. Sites that have removed the plugin or run a newer version the sources do not cover are not affected by this entry. Whether the attacker needs an account is not stated, but the sources say the stored payload is injected without authentication.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000798,"input_tokens":4419,"output_tokens":712,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-119070':14A,17A '-2026':13A,16A '4.2.17':101C 'access':130C 'administr':66B 'affect':49B 'anyon':38B 'arbitrari':119C 'attack':52B,116C 'avif':73C 'browser':58B 'bypass':168C 'cdn':74C,146C,149C 'charact':184C 'comment':11A,35B,92C,171C 'configur':151C,164C 'connect':144C 'contain':176C 'convert':71C 'cross':7A,87C 'cross-sit':6A,86C 'cve':12A,15A 'decod':192C 'default':160C 'due':102C 'enabl':156C 'escap':109C 'execut':126C 'exploit':135C 'filter':173C 'host':22B 'html':178C 'imag':26B,70C,77C,154C 'includ':62B,100C 'inject':118C,132C 'input':105C 'insuffici':104C 'key':147C 'lazi':75C 'load':76C 'log':64B 'logged-in':63B 'make':111C 'metacharact':179C 'normal':143C 'open':47B 'optim':27B,69C,78C 'optimol':2A,18B,25B,68C,189C 'output':108C 'packag':19B 'page':50B,123C,133C 'paramet':36B,93C 'payload':167C 'plugin':3A,28B,79C,138C 'possibl':113C 'post':162C 'post-setup':161C 'produc':186C 'render':194C 'replac':155C 'requir':136C 'run':44B,54B 'sanit':33B,106C,172C 'script':9A,42B,55B,89C,121C 'secret':150C 'self':21B 'self-host':20B 'setup':163C 'site':8A,60B,88C 'state':145C 'storag':181C 'store':5A,40B,85C,166C 'time':182C,195C 'unauthent':4A,115C 'user':129C 'version':96C 'via':10A,90C 'visitor':46B,61B 'vulner':83C 'web':120C 'webp':72C 'whenev':127C 'wordpress':1A,23B,30B,81C,170C","nicknames":[],"mitigations":[],"who_affected":"Sites running the Optimole image optimization plugin at version `4.2.17` or earlier that are connected to Optimole's service with the image replacer enabled, which the sources describe as the default after setup. Sites that have removed the plugin or run a newer version the sources do not cover are not affected by this entry. Whether the attacker needs an account is not stated, but the sources say the stored payload is injected without authentication.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["high","optimole","package","selfhosted","wordpress"],"campaign_type":null,"search_a":"'-119070':14A,17A '-2026':13A,16A 'comment':11A 'cross':7A 'cross-sit':6A 'cve':12A,15A 'optimol':2A 'plugin':3A 'script':9A 'site':8A 'store':5A 'unauthent':4A 'via':10A 'wordpress':1A","search_b":"'administr':66B 'affect':49B 'anyon':38B 'attack':52B 'browser':58B 'comment':35B 'host':22B 'imag':26B 'includ':62B 'log':64B 'logged-in':63B 'open':47B 'optim':27B 'optimol':18B,25B 'packag':19B 'page':50B 'paramet':36B 'plugin':28B 'run':44B,54B 'sanit':33B 'script':42B,55B 'self':21B 'self-host':20B 'site':60B 'store':40B 'visitor':46B,61B 'wordpress':23B,30B","search_c":"'4.2.17':101C 'access':130C 'arbitrari':119C 'attack':116C 'avif':73C 'bypass':168C 'cdn':74C,146C,149C 'charact':184C 'comment':92C,171C 'configur':151C,164C 'connect':144C 'contain':176C 'convert':71C 'cross':87C 'cross-sit':86C 'decod':192C 'default':160C 'due':102C 'enabl':156C 'escap':109C 'execut':126C 'exploit':135C 'filter':173C 'html':178C 'imag':70C,77C,154C 'includ':100C 'inject':118C,132C 'input':105C 'insuffici':104C 'key':147C 'lazi':75C 'load':76C 'make':111C 'metacharact':179C 'normal':143C 'optim':69C,78C 'optimol':68C,189C 'output':108C 'page':123C,133C 'paramet':93C 'payload':167C 'plugin':79C,138C 'possibl':113C 'post':162C 'post-setup':161C 'produc':186C 'render':194C 'replac':155C 'requir':136C 'sanit':106C,172C 'script':89C,121C 'secret':150C 'setup':163C 'site':88C 'state':145C 'storag':181C 'store':85C,166C 'time':182C,195C 'unauthent':115C 'user':129C 'version':96C 'via':90C 'vulner':83C 'web':120C 'webp':72C 'whenev':127C 'wordpress':81C,170C","first_public_at":"2026-11-07T03:17:00+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-119070","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-119070","severity":null,"published_at":"2026-11-07T03:17:00+00:00","modified_at":"2026-11-07T03:17:00+00:00","first_seen_at":"2026-11-07T03:45:32+00:00","fetched_at":"2026-11-07T03:45:32+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"}