{"id":"CVE-2026-97645","kind":"vulnerability","aliases":["CVE-2026-97645"],"related":[],"title":"Gravity Forms: stored script injection through List Field entries","description":"The Gravity Forms plugin for WordPress is vulnerable to Stored Cross-Site Scripting via List Field in all versions up to, and including, 3.1.2 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 the administrator to click the injected link in the entry detail view and confirm a dialog, which triggers the admin JavaScript bundle's delegated data-dialog-callback handler to invoke the attacker-supplied function reference.","summary":"The Gravity Forms WordPress plugin up to and including 3.1.2 does not sanitize List Field input or escape its output. An unauthenticated attacker can store a script that runs in the browser of an administrator who opens the entry and confirms a dialog.","severity":"high","cvss":7.2,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"Gravity Forms","fixed":["3.1.3"],"affected":"<= 3.1.2","ecosystem":"wordpress"}],"ecosystems":[],"tags":["gravity-forms","other","self-hosted","wordpress"],"not_affected_if":["no-list-field","not-public-form","plugin-newer-than-3.1.2"],"how_to_check":"In WordPress admin > Plugins, check the Gravity Forms version; 3.1.2 or earlier is affected. Higher risk if any publicly reachable form has a List Field.","fix":"Update Gravity Forms to 3.1.3 or later (WordPress admin > Plugins > Update).","status":"open","published_at":"2026-10-30T07:16:35+00:00","first_seen_at":"2026-10-30T07:29:00+00:00","triaged_at":"2026-10-30T07:30:03+00:00","updated_at":"2026-10-30T07:31:35+00:00","category":"other","confidence":0.8,"triage":{"at":"2026-10-30T07:30:03Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"internet","title":"Gravity Forms: stored script injection through List Field entries","impact":"medium","summary":"The Gravity Forms WordPress plugin up to and including 3.1.2 does not sanitize List Field input or escape its output. An unauthenticated attacker can store a script that runs in the browser of an administrator who opens the entry and confirms a dialog.","audience":"businesses","category":"other","nicknames":[],"who_cares":["wordpress","gravity-forms","self-hosted"],"confidence":0.6,"fix_status":"unknown","needs_auth":"no","worst_case":"Attacker script runs in an administrator's WordPress session","analyst_note":"Confirm the fixed version and whether the vendor has released a patch; check the NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-97645.","how_to_check":"- Check the installed Gravity Forms plugin version in the WordPress admin under Plugins\n- Confirm whether the installed version is `3.1.2` or earlier\n- Note whether forms with a List Field accept entries from the public internet","plain_action":"","needs_analyst":true,"not_affected_if":["no-list-field","not-public-form","plugin-newer-than-3.1.2"],"who_is_affected":"Sites running Gravity Forms `3.1.2` or earlier that have forms with a List Field accepting public submissions. The attack needs an administrator to open the injected entry and confirm a dialog, so sites without public List Field forms are less exposed. unknown whether a fixed version exists.","user_interaction":"yes","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000713,"input_tokens":4234,"output_tokens":580,"severity_before":"high"},"analyst_status":"done","analyst_note":"Confirm the fixed version and whether the vendor has released a patch; check the NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-97645.","search":"'-2026':11A,14A '-97645':12A,15A '3.1.2':35B,93C 'access':122C 'admin':148C 'administr':60B,130C 'arbitrari':111C 'attack':48B,108C,162C 'attacker-suppli':161C 'browser':57B 'bundl':150C 'callback':156C 'click':132C 'confirm':66B,142C 'cross':80C 'cross-sit':79C 'cve':10A,13A 'data':154C 'data-dialog-callback':153C 'deleg':152C 'detail':139C 'dialog':68B,144C,155C 'due':94C 'entri':9A,64B,138C 'escap':43B,101C 'execut':118C 'exploit':127C 'field':8A,40B,85C 'form':2A,20B,28B,71C 'forms':17A 'function':164C 'graviti':1A,19B,27B,70C 'gravity':16A 'gravity-form':18B 'handler':157C 'host':24B 'includ':34B,92C 'inject':5A,110C,124C,134C 'input':41B,97C 'insuffici':96C 'invok':159C 'javascript':149C 'link':135C 'list':7A,39B,84C 'make':103C 'open':62B 'output':45B,100C 'page':115C,125C 'plugin':30B,72C 'possibl':105C 'refer':165C 'requir':128C 'run':54B 'sanit':38B,98C 'script':4A,52B,82C,113C 'self':23B 'self-host':22B 'site':81C 'store':3A,50B,78C 'success':126C 'suppli':163C 'trigger':146C 'unauthent':47B,107C 'user':121C 'version':88C 'via':83C 'view':140C 'vulner':76C 'web':112C 'whenev':119C 'wordpress':25B,29B,74C","nicknames":[],"mitigations":[],"who_affected":"WordPress sites running Gravity Forms 3.1.2 or earlier. Exposure needs a public form with a List Field, since an unauthenticated visitor can store a script in an entry. It runs only when an administrator opens the entry, clicks the injected link and confirms a dialog. Sites without List Field forms, or on 3.1.3+, can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"first_public_at":"2026-10-30T07:16:35+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-97645","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-97645","severity":null,"published_at":"2026-10-30T07:16:35+00:00","modified_at":"2026-10-30T07:16:35+00:00","first_seen_at":"2026-10-30T07:29:00+00:00","fetched_at":"2026-10-30T07:29:00+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-97645:1133","url":null,"severity":null,"published_at":"2026-10-30T07:31:35+00:00","modified_at":"2026-10-30T07:31:35+00:00","first_seen_at":"2026-10-30T07:31:35+00:00","fetched_at":"2026-10-30T07:31:35+00:00","note":"Fix 3.1.3 comes from Wordfence-derived data (wordsec, wpvanguard). Vendor changelog (3.1.3, 2026-10-01) says only 'security enhancements' and does not name the CVE, so nothing marked verified. No exploitation or PoC found. Severity unchanged (CVSS 7.2)."}],"documents":[{"id":22080,"url":"https://docs.gravityforms.com/gravityforms-change-log/","title":"Gravity Forms Changelog","kind":"vendor","source":"analyst","publisher":null,"text":null,"published_at":null,"relation":"fix","confidence":null,"note":null},{"id":22082,"url":"https://wordsec.net/vulnerabilities/plugins/gravityforms/gravity-forms-312-unauthenticated-stored-cross-site-scripting-via-list-field","title":"Gravity Forms <= 3.1.2 Stored XSS via List Field (Wordfence data, patched 3.1.3)","kind":"advisory","source":"analyst","publisher":null,"text":null,"published_at":null,"relation":"advisory","confidence":null,"note":null}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}