{"id":"CVE-2026-107711","kind":"vulnerability","aliases":["CVE-2026-107711"],"related":[],"title":"FlexStock WooCommerce plugin: stored script injection by any subscriber","description":"The FlexStock – Product Stock Sync with Google Sheets for WooCommerce plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'products[].post_content' parameter in all versions up to, and including, 3.17.2 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with subscriber-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. This is exploitable by any Subscriber-level user because the plugin's admin_enqueue_scripts callback exposes the REST bearer token in the Dashboard page source via wp_localize_script() without a capability check, and the REST endpoint's permission_callback validates only that bearer token rather than performing a current_user_can() capability check.","summary":"The FlexStock plugin for WordPress and WooCommerce stores attacker-supplied content in product pages without escaping it, so scripts run in the browser of anyone who opens the injected page. Any logged-in Subscriber-level user can plant the script because the REST bearer token is exposed in the dashboard and the endpoint checks only that token, not capabilities.","severity":"medium","cvss":6.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["flexstock","package","self-hosted","woocommerce","wordpress"],"not_affected_if":["no-open-registration","plugin-not-installed","version-above-3.17.2"],"how_to_check":"- Check whether the FlexStock plugin is installed and its version in the WordPress admin plugin list, or `wp plugin get flexstock-product-stock-sync --field=version` if the slug is confirmed\n- Confirm the installed version is `3.17.2` or lower\n- Review whether subscriber-level accounts can register on the site","fix":null,"status":"open","published_at":"2026-10-31T10:16:37+00:00","first_seen_at":"2026-10-31T10:34:55+00:00","triaged_at":"2026-10-31T10:36:04+00:00","updated_at":"2026-10-31T10:36:04+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-31T10:36:04Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"internet","title":"FlexStock WooCommerce plugin: stored script injection by any subscriber","impact":"medium","summary":"The FlexStock plugin for WordPress and WooCommerce stores attacker-supplied content in product pages without escaping it, so scripts run in the browser of anyone who opens the injected page. Any logged-in Subscriber-level user can plant the script because the REST bearer token is exposed in the dashboard and the endpoint checks only that token, not capabilities.","audience":"businesses","category":"package","nicknames":[],"who_cares":["wordpress","woocommerce","flexstock","self-hosted"],"confidence":0.7,"fix_status":"unknown","needs_auth":"yes","worst_case":"Attacker script runs in visitors' browsers, possibly admin sessions","analyst_note":"Confirm whether a patched FlexStock version exists above 3.17.2 and the plugin's vendor advisory, using the NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-107711.","how_to_check":"- Check whether the FlexStock plugin is installed and its version in the WordPress admin plugin list, or `wp plugin get flexstock-product-stock-sync --field=version` if the slug is confirmed\n- Confirm the installed version is `3.17.2` or lower\n- Review whether subscriber-level accounts can register on the site","plain_action":"","needs_analyst":true,"not_affected_if":["plugin-not-installed","version-above-3.17.2","no-open-registration"],"who_is_affected":"Sites running the FlexStock plugin at version 3.17.2 or earlier with WooCommerce and Google Sheets stock sync enabled. Exposure depends on whether untrusted users can hold Subscriber accounts, since that role is enough to inject the script. Sites with no open registration and no other subscriber users have lower practical risk.","user_interaction":"yes","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.00078,"input_tokens":4306,"output_tokens":698,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-107711':12A,15A '-2026':11A,14A '3.17.2':119C 'access':139C,155C 'admin':172C 'anyon':48B 'arbitrari':144C 'attack':32B,134C 'attacker-suppli':31B 'authent':133C 'bearer':69B,179C,204C 'browser':46B 'callback':175C,200C 'capabl':84B,192C,213C 'check':79B,193C,214C 'content':34B,110C 'cross':103C 'cross-sit':102C 'current':210C 'cve':10A,13A 'dashboard':75B,183C 'due':120C 'endpoint':78B,197C 'enqueu':173C 'escap':39B,127C 'execut':151C 'exploit':161C 'expos':72B,176C 'flexstock':1A,16B,24B,86C 'googl':91C 'host':20B 'includ':118C 'inject':6A,52B,143C,157C 'input':123C 'insuffici':122C 'level':60B,138C,166C 'local':188C 'log':56B 'logged-in':55B 'make':129C 'open':50B 'output':126C 'packag':17B 'page':37B,53B,148C,158C,184C 'paramet':111C 'perform':208C 'permiss':199C 'plant':63B 'plugin':3A,25B,95C,170C 'possibl':131C 'post':109C 'product':36B,87C,108C 'rather':206C 'rest':68B,178C,196C 'run':43B 'sanit':124C 'script':5A,42B,65B,105C,146C,174C,189C 'self':19B 'self-host':18B 'sheet':92C 'site':104C 'sourc':185C 'stock':88C 'store':4A,30B,101C 'subscrib':9A,59B,137C,165C 'subscriber-level':58B,136C,164C 'suppli':33B 'sync':89C 'token':70B,82B,180C,205C 'user':61B,154C,167C,211C 'valid':201C 'version':114C 'via':106C,186C 'vulner':99C 'web':145C 'whenev':152C 'without':38B,190C 'woocommerc':2A,21B,29B,94C 'wordpress':22B,27B,97C 'wp':187C","nicknames":[],"mitigations":[],"who_affected":"Sites running the FlexStock plugin at version 3.17.2 or earlier with WooCommerce and Google Sheets stock sync enabled. Exposure depends on whether untrusted users can hold Subscriber accounts, since that role is enough to inject the script. Sites with no open registration and no other subscriber users have lower practical risk.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"none","audience":"businesses","plain_action":null,"first_public_at":"2026-10-31T10:16:37+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/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-107711","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-107711","severity":null,"published_at":"2026-10-31T10:16:37+00:00","modified_at":"2026-10-31T10:16:37+00:00","first_seen_at":"2026-10-31T10:34:55+00:00","fetched_at":"2026-10-31T10:34: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"}