{"id":"CVE-2026-109997","kind":"vulnerability","aliases":["CVE-2026-109997"],"related":[],"title":"Ninja Forms WordPress plugin: unauthenticated stored cross-site scripting via form submissions","description":"The Ninja Forms – Contact Form Builder with Calculators, Quizzes, Signatures & AI Form Builder plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'formData.extra' parameter in all versions up to, and including, 3.15.5 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 nf_ajax_submit endpoint issues a valid nonce to any requester on failure, effectively neutralizing the nonce check and making exploitation trivially achievable in a single unauthenticated request.","summary":"Ninja Forms, a WordPress contact form plugin, fails to sanitize the formData.extra parameter, so anyone can store malicious scripts that run in the browser of whoever opens an affected page. The form submission endpoint also hands out valid nonces to any requester on failure, which removes the anti-forgery check and makes exploitation a single unauthenticated request.","severity":"high","cvss":7.2,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ninja-forms","package","self-hosted","wordpress"],"not_affected_if":["plugin-not-installed","version-above-3.15.5"],"how_to_check":"- Check the installed Ninja Forms plugin version in the WordPress admin under Plugins, or with `wp plugin get ninja-forms --field=version`.\n- Confirm whether the installed version is `3.15.5` or earlier, which the sources say is affected.","fix":"- Move to a Ninja Forms version newer than `3.15.5`; the sources do not name the exact fixed release.","status":"open","published_at":"2026-10-31T06:16:31+00:00","first_seen_at":"2026-10-31T06:33:50+00:00","triaged_at":"2026-10-31T06:34:14+00:00","updated_at":"2026-10-31T06:34:14+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-31T06:34:14Z","model":"claude-haiku-5-5","output":{"fix":"- Move to a Ninja Forms version newer than `3.15.5`; the sources do not name the exact fixed release.","reach":"internet","title":"Ninja Forms WordPress plugin: unauthenticated stored cross-site scripting via form submissions","impact":"medium","summary":"Ninja Forms, a WordPress contact form plugin, fails to sanitize the formData.extra parameter, so anyone can store malicious scripts that run in the browser of whoever opens an affected page. The form submission endpoint also hands out valid nonces to any requester on failure, which removes the anti-forgery check and makes exploitation a single unauthenticated request.","audience":"businesses","category":"package","nicknames":[],"who_cares":["wordpress","ninja-forms","self-hosted"],"confidence":0.7,"fix_status":"unknown","needs_auth":"no","worst_case":"Attacker script runs in visitors' and admins' browsers on the site","analyst_note":"Confirm the fixed Ninja Forms version and whether a vendor advisory exists; check the WordPress plugin changelog, not only the NVD entry.","how_to_check":"- Check the installed Ninja Forms plugin version in the WordPress admin under Plugins, or with `wp plugin get ninja-forms --field=version`.\n- Confirm whether the installed version is `3.15.5` or earlier, which the sources say is affected.","plain_action":"","needs_analyst":true,"not_affected_if":["plugin-not-installed","version-above-3.15.5"],"who_is_affected":"Any WordPress site running Ninja Forms version 3.15.5 or earlier is exposed, since the form submission endpoint is reachable by unauthenticated visitors. Sites that do not run this plugin can skip it. The sources do not say whether non-default configuration changes exposure.","user_interaction":"yes","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000759,"input_tokens":4267,"output_tokens":664,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-109997':16A,19A '-2026':15A,18A '3.15.5':121C 'access':150C 'achiev':177C 'affect':56B 'ai':96C 'ajax':156C 'also':62B 'anti':76B 'anti-forgeri':75B 'anyon':42B 'arbitrari':139C 'attack':136C 'browser':51B 'builder':91C,98C 'calcul':93C 'check':78B,172C 'contact':32B,89C 'cross':8A,107C 'cross-sit':7A,106C 'cve':14A,17A 'due':122C 'effect':168C 'endpoint':61B,158C 'escap':129C 'execut':146C 'exploit':81B,175C 'fail':35B 'failur':71B,167C 'forgeri':77B 'form':2A,12A,22B,29B,33B,59B,88C,90C,97C 'formdata.extra':39B,112C 'hand':63B 'host':26B 'includ':120C 'inject':138C,152C 'input':125C 'insuffici':124C 'issu':159C 'make':80B,131C,174C 'malici':45B 'neutral':169C 'nf':155C 'ninja':1A,21B,28B,87C 'ninja-form':20B 'nonc':66B,162C,171C 'open':54B 'output':128C 'packag':23B 'page':57B,143C,153C 'paramet':40B,113C 'plugin':4A,34B,99C 'possibl':133C 'quizz':94C 'remov':73B 'request':69B,85B,165C,182C 'run':48B 'sanit':37B,126C 'script':10A,46B,109C,141C 'self':25B 'self-host':24B 'signatur':95C 'singl':83B,180C 'site':9A,108C 'store':6A,44B,105C 'submiss':13A,60B 'submit':157C 'trivial':176C 'unauthent':5A,84B,135C,181C 'user':149C 'valid':65B,161C 'version':116C 'via':11A,110C 'vulner':103C 'web':140C 'whenev':147C 'whoever':53B 'wordpress':3A,27B,31B,101C","nicknames":[],"mitigations":[],"who_affected":"Any WordPress site running Ninja Forms version 3.15.5 or earlier is exposed, since the form submission endpoint is reachable by unauthenticated visitors. Sites that do not run this plugin can skip it. The sources do not say whether non-default configuration changes exposure.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"businesses","plain_action":null,"first_public_at":"2026-10-31T06:16:31+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-109997","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-109997","severity":null,"published_at":"2026-10-31T06:16:31+00:00","modified_at":"2026-10-31T06:16:31+00:00","first_seen_at":"2026-10-31T06:33:50+00:00","fetched_at":"2026-10-31T06:33:50+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"}