CVE-2023-45772
Executive Summary
CVE-2023-45772 is an unauthenticated Reflected Cross-Site Scripting (XSS) vulnerability affecting the Scribit Proofreading plugin for WordPress, versions 1.0.11 and earlier. An attacker can exploit this flaw by crafting a malicious URL that, when visited by an authenticated WordPress administrator or editor, executes arbitrary JavaScript in their browser session. Successful exploitation enables session hijacking, forced administrative actions, and full WordPress site compromise. The vulnerability is present only in the Scribit Proofreading plugin; sites not running this plugin are unaffected.
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 vulnerability is classified as a Reflected Cross-Site Scripting (XSS) flaw, with the CNA title explicitly stating it affects the "WordPress Proofreading Plugin <= 1.0.11." The NVD description confirms the vulnerability is "Unauth." (unauthenticated) and "Reflected," meaning no prior authentication is required for the attacker to deliver the payload — the victim must simply be logged into the WordPress admin panel for the highest impact.
Vulnerability Mechanism (Class-Level): Reflected XSS occurs when user-supplied input is echoed back without proper sanitization and is rendered as HTML/JavaScript. In the context of this plugin, a parameter in the HTTP request (likely a query string or form field) is reflected in the plugin's output. The plugin fails to neutralize or escape this input before rendering it to the browser. Because the attack is "Unauth.," the vulnerable endpoint does not require a logged-in session for the payload to be loaded — it is the victim's browser that processes the malicious script.
Attack Surface:
- The Scribit Proofreading plugin is a WordPress plugin, so the attack surface is any WordPress site running version ≤ 1.0.11 of the plugin.
- The vulnerable endpoint is reached via HTTP GET or POST requests, making the attack vector "Network" (as reflected in the CVSS score of 7.1).
- No user interaction is required from the attacker's perspective; the attacker crafts the URL and delivers it to a victim (e.g., via email, social engineering, or phishing).
Technical Detail Limitations: The NVD description does not specify the exact parameter name, URL path, or code location where the reflection occurs. Insufficient technical detail is available to provide a code-level snippet. The attack mechanism must therefore be understood at the XSS class level: improper output encoding of user input passed to HTTP response bodies.
CVSS Context: The CVSS score of 7.1 (High) aligns with a reflected XSS scenario where the attack vector is Network, attack complexity is Low, and the impact on confidentiality, integrity, and availability is partial — an attacker can read data, modify content, or perform actions but does not have direct full-system compromise without chaining with other vulnerabilities.
Exploitation Scenarios
This section infers the attack chain based strictly on the vulnerability class (Reflected XSS) and the data provided. No public PoC is stated; therefore, the chain is described generically.
Step 1 — Target Identification:
- The attacker identifies a WordPress site running the Scribit Proofreading plugin version ≤ 1.0.11.
- Target identification can be done by fingerprinting the plugin via response headers, WordPress plugin enumeration tools (e.g., WPScan), or by observing the plugin's CSS/JS assets loaded in the page source.
Step 2 — Triggering the Flaw:
- The attacker crafts a malicious URL that includes an XSS payload in a parameter that the plugin processes and reflects in the HTML response.
- The payload is delivered to the victim via a link (email, chat, forum post, or a compromised webpage that auto-redirects).
- Since the vulnerability is "Unauth., Reflected," the attacker does not need to authenticate to the target site to craft the request. The payload is server-side reflected.
Step 3 — Payload Execution:
- At the vulnerability-class level, the attacker embeds JavaScript (e.g., via
<script>tag or an HTML event handler) in the affected parameter. When the victim clicks the link, the WordPress server processes the request, reflects the parameter unfiltered, and the victim's browser renders it as executable JavaScript. - The malicious script executes in the context of the victim's session with the WordPress site — meaning it has access to any cookies, CSRF tokens, and administrative functionality available to the victim.
Step 4 — Post-Exploitation Impact:
- Session Hijacking: The script can steal the victim's session cookies and exfiltrate them to an attacker-controlled server.
- Forced Actions (CSRF chaining): Using the victim's authenticated context, the script can submit forms to change the admin password, create new admin users, or modify site content.
- Malware Distribution: The script can inject malicious banners, redirects, or scripts that distribute drive-by downloads to site visitors.
- No public PoC or exploit code is reported for this CVE; the chain is inferred solely from the vulnerability class.
Impact Assessment
Business Impact: A successful attack can lead to:
- Confidentiality Breach: Access to admin cookies and internal data visible in the victim's dashboard.
- Integrity Compromise: Site defacement, insertion of spam content, or planting backdoors via plugin/module manipulation.
- Availability Risk: Ransomware or destructive scripts that wipe site content; loss of customer trust with measurable revenue damage.
Affected Systems: Any WordPress installation with the Scribit Proofreading plugin version ≤ 1.0.11. The plugin is a productivity tool for writers/editors, so high-value targets include publishing houses, content agencies, and enterprise blogs that rely on editorial review workflows.
Blast Radius: The attack requires victim interaction (clicking a link). The reflected nature limits it to users active on the target site at the time. However, because it is unauthenticated and the website is public-facing, the attacker can target any user — from casual visitors to high-privilege administrators — with zero pre-authentication on the server side.
CVSS Scoring Context: With a base score of 7.1 (High), the vulnerability drives significant risk via the Network attack vector, likely Low attack complexity, and Low impact on confidentiality/integrity/availability (typical of XSS where an attacker can read/modify limited data). The EPSS score of 0.00437 (percentile 36.2) indicates low immediate exploitation likelihood in the wild, but the attacker's barrier to entry is minimal (crafted link delivery).
Detection Guidance
Detection rules are designed to flag signature-based indicators of XSS payloads targeting the Scribit Proofreading plugin. Given the plugin-specific reflection, these rules trigger on generic XSS patterns that may appear in request URIs and response bodies.
Sigma Rule
title: Reflected XSS Attempt Against Scribit Proofreading Plugin
id: 3c9b7d5a-2f15-4c8e-a291-0e8b7d5a12a4
status: experimental
description: Detects common XSS payload patterns in URI parameters or POST bodies that could target the Scribit Proofreading plugin (CVE-2023-45772)
author: valtersit.com Threat Intel
date: 2024/06/01
logsource:
category: webserver
product: apache
service: accesslog
detection:
selection_http_methods:
cs-method: ['GET', 'POST']
selection_payload_keywords:
- '/*'
- '%3Cscript%3E' # URL-encoded <script>
- '<script>'
- 'javascript:'
- 'onerror\s*='
- 'onload\s*='
condition: selection_http_methods and selection_payload_keywords
falsepositives:
- Legitimate admin URL parameters containing script tags for development/testing
- Generic XSS scanners probing unrelated endpoints
level: medium
tags:
- attack.t1059.007 # JavaScript command execution
- cve.2023.45772
- capec.63 # Cross-Site Scripting (XSS)
YARA Rule
rule CVE_2023_45772_Reflected_XSS_Payload
{
meta:
author = "valtersit.com"
description = "Detects XSS payload patterns targeting Scribit Proofreading plugin"
cve = "CVE-2023-45772"
date = "2024-06-01"
severity = "high"
strings:
// URL-encoded variations
$xss_script_encoded = /%3Cscript%3E[\s\S]{0,500}%3C\/script%3E/ nocase
// Raw script tags
$xss_script_raw = /<script>[\s\S]{0,500}<\/script>/ nocase
// Event handler based XSS
$xss_event_handler = /on(error|load|click)\s*=\s*[`'"]/ nocase
// JavaScript protocol URL
$xss_javascript_url = /href\s*=\s*["']javascript:/i
// Common XSS vector with document.cookie
$xss_cookie_steal = /document\.cookie/is
condition:
(2 of them) and (uint16(0) == 0x0D0A or uint16(0) == 0x0A0D) // ASCII text file (CRLF or LF)
}
Suricata IDS Rule
alert http any any -> any any (
msg:"CVE-2023-45772 - Reflected XSS Attempt in Scribit Proofreading Plugin";
flow:to_server,established;
content:"<script>"; nocase;
http_uri;
metadata:cve CVE-2023-45772;
sid:4577201; rev:1; priority:2;
reference:url,https://nvd.nist.gov/vuln/detail/CVE-2023-45772;
)
alert http any any -> any any (
msg:"CVE-2023-45772 - XSS using javascript: protocol in URI";
flow:to_server,established;
content:"javascript:"; http_uri;
content:"http"; http_uri; distance:0;
metadata:cve CVE-2023-45772;
sid:4577202; rev:1; priority:2;
reference:url,https://nvd.nist.gov/vuln/detail/CVE-2023-45772;
)
Elastic Detection
// Detect reflected XSS payloads in HTTP requests targeting web servers
sequence by source.ip with maxspan=30s
[network where event.action == "connection_attempted" and protocol == "http" and
source.port <= 1024] // High-privileged source port
[http where method == "GET" or method == "POST" and
uri contains "<script>" or uri contains "%3Cscript%3E" or
uri contains "javascript:" or uri contains "onerror="]
Splunk SPL Query
index=web sourcetype=access_combined or sourcetype=apache_access
| search uri* IN ("*<script>*", "*%3Cscript%3E*", "*javascript:*", "*onerror=*")
| table _time, clientip, method, uri, status, referer, useragent
| stats count by clientip, uri, status
| sort - count
Wazuh OSSEC Rule
<group name="web_xss,">
<rule id="457720" level="10">
<decoded_as>web</decoded_as>
<match>%3Cscript%3E|<script>|javascript:|onerror=</match>
<description>CVE-2023-45772: Reflected XSS payload detected in HTTP request targeting Scribit Proofreading plugin</description>
<options>no_full_log</options>
<mitre>
<id>T1059.007</id>
<id>T1189</id> <!-- Drive-by Compromise -->
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 2/4 (CLAIMED version) — a single source (CNA) claims a patch exists; this has not been independently verified.
Immediate Mitigations (before patch is confirmed/deployed):
- Disable the Plugin: If the criticality of the editorial workflow permits, disable and uninstall the Scribit Proofreading plugin until patches are applied. This eliminates the attack vector entirely.
- Web Application Firewall (WAF): Deploy the Suricata rules above in front of the WordPress site, or enable a WAF rule set that blocks common XSS vectors (
<script>,javascript:,onerror=) in URI parameters and POST bodies. - Restrict Admin Access: Limit access to the WordPress admin panel (e.g., via IP allowlisting, VPN) to reduce the pool of potential victims with high privileges.
- User Education: Instruct editors/content creators to avoid clicking untrusted links when logged into the WordPress admin dashboard.
Patch/Upgrade Steps:
- Contact the plugin vendor (Scribit) or the WordPress repository to request/obtain the patched version. The CNA claims an update exists; check
wp-admin/plugins.phpfor available updates. - When a patched version ≥ 1.0.12 is available and verified, upgrade immediately. Verify the update by reviewing the plugin's change log for version 1.0.12+ that mentions "XSS fix" or "sanitization."
Long-Term Hardening:
- WordPress Security Baseline: Keep core WordPress, themes, and all plugins updated; remove unused plugins (including this one if workflow permits).
- Content Security Policy (CSP): Implement a strict CSP header that disallows inline scripts (
script-src 'self'), which mitigates XSS even if output encoding fails. - Input Validation: Adopt a security plugin that enforces output encoding standards across all third-party plugins.
- Regular Audits: Perform periodic vulnerability scans with tools (WPScan, Nessus) configured with current CVE databases.
Exploitation-in-the-Wild Evidence: No known threat actor campaigns, CISA KEV listing, or exploit-in-the-wild reports are currently documented for CVE-2023-45772.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2023-45772 — Official NVD record with vulnerability description and scoring.
- Patchstack (CNA) Advisory: https://patchstack.com/database/vulnerability/cve-2023-45772 — Vendor-claimed advisory and 2/4 patch confidence detail. (Authoritative source of the CNA title.)
- WordPress Plugin Repository: https://wordpress.org/plugins/scribit-proofreading/ — Verify plugin version history and fetch patched release notes.
- MITRE ATT&CK — JavaScript Execution: https://attack.mitre.org/techniques/T1059/ — Relevant tactic/technique associated with XSS exploitation.
- CISA Known Exploited Vulnerabilities: No entry exists for CVE-2023-45772 in CISA KEV — implying no confirmed in-the-wild utilization as of the latest sync.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.