CVE-2020-37233
Executive Summary
CVE-2020-37233 is a persistent cross-site scripting (XSS) vulnerability in the WordPress plugin BuddyPress 6.2.0, triggered when an authenticated attacker with moderator privileges injects malicious markup via the figure parameter inside wp:html blocks. Because the injected iframe-based payload is stored and later rendered for administrators and other privileged users who preview or view the affected content, successful exploitation enables session hijacking and persistent phishing against high-privilege WordPress accounts. The vulnerability carries a CVSS v3.1 base score of 6.4 (Medium) and, at the time of this report, has no confirmed vendor patch.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The flaw is a stored/persistent cross-site scripting issue (CWE-79) rooted in insufficient sanitization of user-controlled markup. The affected surface is the Gutenberg block editor content model: BuddyPress 6.2.0 processes wp:html block content and does not adequately neutralize attacker-supplied markup within the figure parameter of that block.
The attack mechanism follows the classic stored-XSS pattern:
- Injection point: the
figureparameter insidewp:htmlblocks, writable by users holding moderator privileges. - Payload class: arbitrary HTML/script inclusion — the NVD description specifically notes injection of
<iframe>elements carrying JavaScript event handlers such asonload. - Trigger/storage: the malicious content is persisted server-side (hence "persistent") rather than reflected, meaning it remains in the stored post/page content between requests.
- Execution context: the payload executes in the browser session of any administrator or privileged user who previews or views the affected page content, in the security context of the WordPress application (site origin).
Severity characteristics from the CVSS vector: the attack is network-reachable (AV:N) and low-complexity (AC:L), but requires authenticated privileges (PR:L — moderator). The S:C (scope changed) component reflects that the injected script runs with privileges/impact beyond the vulnerable content component — notably access to an administrator's session. Confidentiality and Integrity impacts are both Low (C:L/I:L), and Availability is None (A:N). No user interaction is required of the victim in the vector (UI:N), since the payload fires automatically via an event handler such as onload when content is rendered.
No public exploit code and no Nuclei template are associated with this CVE in the provided data. The precise sanitization routine responsible for the bypass is not documented in the available description, so the exact filtering weakness remains a matter of the described attack class rather than a named, confirmed code defect.
Exploitation Scenarios
The following chain is derived strictly from the NVD description and the vulnerability class; no public PoC is available, so steps are described at the mechanism level.
Reconnaissance/target identification. An attacker identifies a WordPress installation running BuddyPress 6.2.0 with the block editor (
wp:htmlblocks) in use. The attacker must hold a legitimate account with moderator-level privileges on the target site.Triggering the flaw. Using moderator access, the attacker creates or edits content containing a
wp:htmlblock and supplies malicious markup through thefigureparameter. The payload takes the form of an<iframe>element bearing an event handler (e.g.,onload) that executes JavaScript when the element loads. Because the input is not properly sanitized, the payload is stored in the content.Payload/execution. The malicious content is saved (persistence). When an administrator or other privileged user previews or views the affected page, the browser renders the stored
wp:htmlblock, the iframe loads, and theonloadhandler executes the attacker's script in the site's origin — with no additional victim interaction required.Post-exploitation impact. Executed script can act within the privileged user's session: exfiltrating session cookies/tokens (enabling session hijacking), performing authenticated actions on the victim's behalf, or presenting persistent phishing content. Because the payload is stored, every privileged viewer is exposed on each render until the content is cleaned.
Impact Assessment
Successful exploitation lets an authenticated moderator escalate effective control over privileged users' browser sessions, undermining the WordPress administrative boundary that is supposed to contain moderator-level users. Business impact centers on:
- Session hijacking / account takeover of administrator accounts, enabling full site compromise (content, plugins, users, SEO injection).
- Persistent phishing delivered from a trusted first-party origin, damaging user trust and brand reputation.
- Blast radius: all administrators and privileged users who preview or view the poisoned content; on multi-author/multi-moderator sites this may be a broad internal set. Public-facing community sites (a typical BuddyPress deployment) increase exposure of privileged reviewers.
The CVSS base of 6.4 reflects Medium severity: network-reachable and low-complexity but requiring moderator authentication, with scope change and Low confidentiality/integrity impact. It is not listed in CISA KEV, and EPSS is low (0.00278, ~18.9th percentile), indicating no observed mass exploitation — but the stored nature and privileged target set make it operationally significant for affected installations.
Detection Guidance
Sigma Rule
title: BuddyPress Stored XSS via wp:html figure Parameter
id: 8f2c1a7e-buddypress-xss-2020-37233
status: experimental
description: Detects storage of iframe/event-handler payloads in wp:html blocks via the figure parameter (CVE-2020-37233)
logsource:
product: wordpress
service: web
detection:
selection_endpoint:
cs-method: 'POST'
cs-uri-query|contains:
- 'post.php'
- 'admin-ajax.php'
selection_payload:
c-uri|contains|all:
- 'wp:html'
c-uri|contains:
- 'figure'
- '<iframe'
selection_handler:
c-uri|contains:
- 'onload'
- 'onerror'
- 'onmouseover'
condition: selection_endpoint and selection_payload and selection_handler
fields:
- c-ip
- cs-username
- cs-uri
falsepositives:
- Legitimate embedded media iframes created by trusted editors
level: high
tags:
- attack.t1059
- cve.2020-37233
YARA Rule
rule CVE_2020_37233_BuddyPress_Stored_XSS
{
meta:
description = "Detects stored XSS payload markers in BuddyPress wp:html figure content"
cve = "CVE-2020-37233"
author = "Threat Intelligence"
strings:
$wphtml = "wp:html" ascii nocase
$figure = "figure" ascii nocase
$iframe = "<iframe" ascii nocase
$onload = "onload" ascii nocase
$onerror = "onerror" ascii nocase
$script = "<script" ascii nocase
condition:
$wphtml and $figure and $iframe and any of ($onload, $onerror, $script)
}
Suricata IDS Rule
alert http $HOME_NET any -> $HOME_NET any (msg:"CVE-2020-37233 BuddyPress stored XSS via wp:html figure parameter"; flow:established,to_server; content:"POST"; http_method; content:"wp:html"; http_client_body; nocase; content:"figure"; http_client_body; nocase; content:"<iframe"; http_client_body; nocase; pcre:"/(onload|onerror|onmouseover)\s*=/i"; classtype:web-application-attack; sid:202037233; rev:1;)
Elastic Detection
sequence by host.id, user.name with maxspan=5s
[network where http.request.method == "POST" and
wildcard(http.request.body, "*wp:html*")]
[network where http.request.method == "POST" and
wildcard(http.request.body, "*figure*") and
wildcard(http.request.body, "*<iframe*") and
wildcard(http.request.body, "*onload*")]
Splunk SPL Query
index=web sourcetype=access_combined OR sourcetype=wordpress
| search method=POST (uri_path="*/post.php" OR uri_path="*/admin-ajax.php")
| eval body=coalesce(form_data, post_body, _raw)
| search body="*wp:html*" body="*figure*" body="*<iframe*" (body="*onload*" OR body="*onerror*")
| stats count values(uri_path) as paths by src_ip user
| where count > 0
Wazuh OSSEC Rule
<group name="web,wordpress,buddypress,">
<rule id="202037233" level="10">
<if_sid>31100,31103</if_sid>
<match>wp:html</match>
<regex type="pcre2">figure.*<iframe.*on(load|error)</regex>
<description>CVE-2020-37233: Possible BuddyPress stored XSS payload via wp:html figure parameter</description>
<mitre>
<id>T1059</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source).
Immediate mitigations:
- Restrict moderator privileges to the minimum necessary and review who holds them; the vulnerability requires moderator authentication to exploit.
- Disable or restrict Gutenberg
wp:htmlcustom HTML blocks for untrusted roles (e.g., via a content-filtering plugin or role-capability restrictions). - Deploy server-side/WAF output filtering or a WordPress security plugin that sanitizes stored markup (iframe tags and inline event handlers such as
onload) before rendering. - Audit existing posts/pages for injected
wp:htmlcontent containingfigure-supplied<iframe>/event-handler payloads and remediate affected content.
Patch/upgrade steps:
- No vendor-patched version is confirmed; monitor the BuddyPress project for an advisory/patched release addressing
wp:htmlfiguresanitization and upgrade as soon as one is published. Given no fix is available, do not assume any specific version is safe.
- No vendor-patched version is confirmed; monitor the BuddyPress project for an advisory/patched release addressing
Long-term hardening:
- Enforce Content-Security-Policy (CSP) to block inline script execution and inline event handlers where feasible.
- Apply HTTPOnly/Secure cookies and short session lifetimes to limit session-hijacking impact.
- Enable WordPress auto-update/notification tracking for plugins and maintain a vulnerability-management process that flags plugins with unpatched CVEs.
- Apply least-privilege role design so moderation is separated from administration and privileged previews are limited.
References
- NVD — CVE-2020-37233: https://nvd.nist.gov/vuln/detail/CVE-2020-37233
- MITRE CWE-79 (Cross-site Scripting): https://cwe.mitre.org/data/definitions/79.html
- CVSS v3.1 Specification: https://www.first.org/cvss/v3.1/specification-document
- BuddyPress project: https://buddypress.org/
- CISA KEV Catalog (for exploit-in-the-wild cross-reference; CVE-2020-37233 not listed): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
No known threat-actor campaign or confirmed in-the-wild exploitation is documented in the available data for this CVE.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.