The wpForo Forum plugin for WordPress is vulnerable to Stored Cross-Site Scripting via 'location' Profile Field in all versions up to, and including, 3.1.1 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with subscriber-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The sanitize_text_field() function applied at input does not encode double quotes, allowing attribute breakout via a payload that escapes the href attribute context and injects event handler attributes.
wpForo Forum <= 3.1.1 - Authenticated (Subscriber+) Stored Cross-Site Scripting via 'location' Profile Field
Problem type
Affected products
tomdever
<= 3.1.1 - AFFECTED
References
https://www.wordfence.com/threat-intel/vulnerabilities/id/2cd364c5-c053-4c50-8232-bb47ab8e834b?source=cve
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.1/classes/Forms.php#L1035
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.1/classes/Members.php#L1031
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.1/classes/Forms.php#L1074
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.0.5/classes/Forms.php#L1035
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.0.5/classes/Members.php#L1031
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.0.5/classes/Forms.php#L1074
https://plugins.trac.wordpress.org/changeset?reponame=&old=3603849%40wpforo&new=3603849%40wpforo
GitHub Security Advisories
GHSA-76cp-m73j-f6wq
The wpForo Forum plugin for WordPress is vulnerable to Stored Cross-Site Scripting via 'location'...
https://github.com/advisories/GHSA-76cp-m73j-f6wqThe wpForo Forum plugin for WordPress is vulnerable to Stored Cross-Site Scripting via 'location' Profile Field in all versions up to, and including, 3.1.1 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with subscriber-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The sanitize_text_field() function applied at input does not encode double quotes, allowing attribute breakout via a payload that escapes the href attribute context and injects event handler attributes.
https://nvd.nist.gov/vuln/detail/CVE-2026-15021
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.0.5/classes/Forms.php#L1035
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.0.5/classes/Forms.php#L1074
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.0.5/classes/Members.php#L1031
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.1/classes/Forms.php#L1035
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.1/classes/Forms.php#L1074
https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.1/classes/Members.php#L1031
https://plugins.trac.wordpress.org/changeset?reponame=&old=3603849%40wpforo&new=3603849%40wpforo
https://www.wordfence.com/threat-intel/vulnerabilities/id/2cd364c5-c053-4c50-8232-bb47ab8e834b?source=cve
https://github.com/advisories/GHSA-76cp-m73j-f6wq
JSON source
https://cveawg.mitre.org/api/cve/CVE-2026-15021Click to expand
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-15021",
"assignerOrgId": "b15e7b5b-3da4-40ae-a43c-f7aa60e62599",
"assignerShortName": "Wordfence",
"dateUpdated": "2026-07-16T08:26:50.097Z",
"dateReserved": "2026-07-08T00:57:49.863Z",
"datePublished": "2026-07-16T08:26:50.097Z",
"state": "PUBLISHED"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "b15e7b5b-3da4-40ae-a43c-f7aa60e62599",
"shortName": "Wordfence",
"dateUpdated": "2026-07-16T08:26:50.097Z"
},
"title": "wpForo Forum <= 3.1.1 - Authenticated (Subscriber+) Stored Cross-Site Scripting via 'location' Profile Field",
"descriptions": [
{
"lang": "en",
"value": "The wpForo Forum plugin for WordPress is vulnerable to Stored Cross-Site Scripting via 'location' Profile Field in all versions up to, and including, 3.1.1 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with subscriber-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The sanitize_text_field() function applied at input does not encode double quotes, allowing attribute breakout via a payload that escapes the href attribute context and injects event handler attributes."
}
],
"affected": [
{
"vendor": "tomdever",
"product": "wpForo Forum",
"defaultStatus": "unaffected",
"versions": [
{
"version": "0",
"status": "affected",
"versionType": "semver",
"lessThanOrEqual": "3.1.1"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"lang": "en",
"description": "CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')",
"cweId": "CWE-79",
"type": "CWE"
}
]
}
],
"references": [
{
"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/2cd364c5-c053-4c50-8232-bb47ab8e834b?source=cve"
},
{
"url": "https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.1/classes/Forms.php#L1035"
},
{
"url": "https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.1/classes/Members.php#L1031"
},
{
"url": "https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.1/classes/Forms.php#L1074"
},
{
"url": "https://plugins.trac.wordpress.org/browser/wpforo/tags/3.0.5/classes/Forms.php#L1035"
},
{
"url": "https://plugins.trac.wordpress.org/browser/wpforo/tags/3.0.5/classes/Members.php#L1031"
},
{
"url": "https://plugins.trac.wordpress.org/browser/wpforo/tags/3.0.5/classes/Forms.php#L1074"
},
{
"url": "https://plugins.trac.wordpress.org/changeset?reponame=&old=3603849%40wpforo&new=3603849%40wpforo"
}
],
"metrics": [
{
"cvssV3_1": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N",
"baseScore": 6.4,
"baseSeverity": "MEDIUM"
}
}
],
"timeline": [
{
"time": "2026-07-08T01:13:08.000Z",
"lang": "en",
"value": "Vendor Notified"
},
{
"time": "2026-07-15T19:51:26.000Z",
"lang": "en",
"value": "Disclosed"
}
],
"credits": [
{
"lang": "en",
"value": "valent1",
"type": "finder"
}
]
}
}
}