CVE-2026-13246: GiveWP Stored XSS in Campaign Comments Shortcode
GiveWP, a popular WordPress donation and fundraising plugin, contains a stored cross-site scripting (XSS) vulnerability affecting versions up to 4.16.0. An authenticated user with author-level permissions or higher can embed malicious JavaScript code into campaign comment shortcodes. When other users view pages containing these injected shortcodes, the malicious code executes in their browsers, potentially stealing session data, modifying page content, or redirecting users to phishing sites. The vulnerability stems from improper sanitization of the 'block_id' attribute and insufficient output escaping when rendering the shortcode.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 6.4 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
- Weaknesses (CWE)
- CWE-79
- Affected products
- 0 configuration(s)
- Published / Modified
- 2026-07-01 / 2026-07-01
NVD description (verbatim)
The GiveWP – Donation Plugin and Fundraising Platform plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'block_id' (and other) shortcode attributes of the 'givewp_campaign_comments' shortcode in versions up to, and including, 4.16.0. This is due to insufficient input sanitization and output escaping on user supplied attributes in CampaignCommentsShortcode::parseAttributes() and BlockRenderController::render(), where the blockId value is interpolated directly into a single-quoted HTML attribute without esc_attr(). This makes it possible for authenticated attackers, with author-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.
12 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability exists in the 'givewp_campaign_comments' shortcode handler, specifically within CampaignCommentsShortcode::parseAttributes() and BlockRenderController::render() methods. The plugin fails to properly sanitize the 'block_id' and related shortcode attributes before processing them. When the blockId value is interpolated into a single-quoted HTML attribute without using WordPress's esc_attr() escaping function, it allows injection of arbitrary HTML and JavaScript. An attacker with author-level access or above can craft a malicious shortcode containing JavaScript payloads that persist in the page content and execute whenever any user views the affected page. The attack requires authentication but bypasses client-side protections and stored content validation.
Business impact
Organizations using GiveWP to manage donations face several operational risks. Compromised donation pages could be used to harvest sensitive donor information, manipulate donation amounts, or redirect users to attacker-controlled sites. The persistent nature of stored XSS means the malicious code remains in pages until manually removed, potentially affecting hundreds or thousands of site visitors. Organizations running multi-author WordPress installations—common for nonprofits and fundraising platforms—are particularly vulnerable since author-level access is more widely distributed. Reputation damage is significant: donors discovering their data was exposed through a compromised donation form will lose trust. Additionally, website defacement and SEO poisoning could occur if malicious content alters visible page content or injects hidden links.
Affected systems
The GiveWP – Donation Plugin and Fundraising Platform plugin for WordPress in versions 4.16.0 and earlier is affected. The vulnerability requires an authenticated WordPress user with author-level access or higher permissions. Any WordPress site running GiveWP with this version range and multiple authors or contributors is at risk. The vulnerability does not affect unauthenticated users; however, any authenticated user meeting the permission threshold can exploit it, potentially affecting sites with loose user management practices.
Exploitability
Exploitation is relatively straightforward for an authenticated attacker with author-level permissions. The attacker creates or edits a page containing the 'givewp_campaign_comments' shortcode and injects a malicious payload into the 'block_id' attribute. No special tools or advanced technical knowledge is required—a simple text editor suffices. The payload executes immediately when the page is visited by any user, regardless of their permissions. This attack does not require user interaction beyond visiting an affected page, making it effective at scale. However, the requirement for authentication and author-level access limits the threat surface compared to unauthenticated XSS vulnerabilities.
Remediation
Organizations using GiveWP should update immediately to a patched version released after version 4.16.0. Verify the latest available version through the official GiveWP website or WordPress plugin repository. Until patching is possible, restrict author-level WordPress access to trusted users only, conduct a content audit to identify any existing malicious shortcodes, and consider disabling the 'givewp_campaign_comments' shortcode if it is not actively used. Web application firewalls (WAF) may help detect and block injection attempts, though they are not a substitute for patching.
Patch guidance
Upgrade the GiveWP plugin to a version released after July 1, 2026 that addresses this vulnerability. Access the WordPress admin dashboard, navigate to Plugins, and check for available updates. Most WordPress installations can be set to auto-update plugins; if enabled, this should deploy the patch automatically. After patching, verify in the plugin settings that the shortcode attributes are correctly sanitized by inspecting a test page with the shortcode. For organizations with custom GiveWP implementations, review any custom code that may interact with the 'givewp_campaign_comments' shortcode to ensure it does not replicate the same sanitization bypass.
Detection guidance
Search existing page and post content for the 'givewp_campaign_comments' shortcode using WordPress database queries or search functionality. Inspect the 'block_id' attribute value for any unusual content, script tags, or encoded payloads. Log analysis should focus on WordPress user accounts with author-level access performing content creation or editing activities, particularly any accounts that are infrequently used or belong to inactive users. Network IDS/IPS tools monitoring outbound requests from the web server may detect exfiltration attempts triggered by injected scripts. Consider enabling WordPress audit logging plugins to track shortcode modifications.
Why prioritize this
This vulnerability warrants medium-to-high priority remediation despite the medium CVSS score. While authentication is required, the prevalence of GiveWP across nonprofit and fundraising sectors, combined with the persistent nature of stored XSS and the potential for data theft or website defacement, creates meaningful business risk. The attack bypasses user expectations of content safety and can affect users who have no role in website administration. Organizations with multiple authors or weaker access controls should prioritize this over lower-impact vulnerabilities.
Risk score, explained
The CVSS 3.1 score of 6.4 reflects a network-accessible, low-complexity vulnerability requiring low privileges (author-level access) to exploit, with no user interaction required for the injected code to execute. Integrity and confidentiality impact is limited to the context of affected pages, and there is no availability impact. However, the score does not fully capture the reputational and data exfiltration risks specific to donation platforms, where user trust and data confidentiality are paramount. Organizations handling sensitive donor information should treat this as higher priority than the numeric score alone suggests.
Frequently asked questions
Can unauthenticated visitors exploit this vulnerability?
No. The vulnerability requires an authenticated WordPress user with author-level permissions or higher to inject the malicious code. However, any visitor—including unauthenticated users—can trigger the injected code by simply viewing a page containing the malicious shortcode.
If we restrict author access, are we safe?
Restricting author-level access reduces risk but is not a complete solution. Any authorized author account that is compromised through password theft, social engineering, or credential reuse could be exploited. Patching the plugin itself is the only reliable remediation. Access controls are a helpful secondary layer.
How can we check if our GiveWP installation has been exploited?
Audit all pages and posts using the 'givewp_campaign_comments' shortcode for unusual or suspicious 'block_id' attribute values. Look for JavaScript code, HTML entities, or hex-encoded content in the attribute. Review WordPress user activity logs for unexpected content modifications by author-level accounts. Also monitor site visitors and donation data for anomalies suggesting credential theft or information harvesting.
Does this vulnerability affect the donation form itself or only pages using the shortcode?
The vulnerability is specific to the 'givewp_campaign_comments' shortcode and the 'block_id' attribute. It affects any page or post where this shortcode is embedded. Standard GiveWP donation forms not using this specific shortcode are not directly vulnerable to this particular flaw, though other shortcode attributes may be similarly affected; review the vendor advisory for the complete list.
This analysis is based on the published CVE description and publicly available information as of the date shown. Security teams should verify all remediation steps, patch availability, and compatibility with their specific WordPress environment before deploying updates. No exploit code or proof-of-concept is provided. Organizations should conduct their own risk assessment based on their use of GiveWP, user access controls, and exposure of donation platforms to the internet. This information is provided for informational purposes and does not constitute professional security advice. Source: NVD (public-domain), retrieved 2026-08-09. Analysis generated by SEC.co (claude-haiku-4-5).
Weaknesses (CWE)
Related vulnerabilities
- CVE-2016-20070MEDIUMPrivilege Escalation & Stored XSS in WordPress Booking Calendar Contact Form 1.0.23
- CVE-2018-25384MEDIUMStored XSS in Wikidforum 2.20 Allows Authenticated Attackers to Inject Malicious Scripts
- CVE-2019-25731MEDIUMStored XSS in Zuz Music 2.1 Contact Form
- CVE-2019-25737MEDIUMStored XSS in Live Chat Unlimited 2.8.3 – Admin Session Compromise
- CVE-2019-25739MEDIUMGigToDo 1.3 Stored XSS Vulnerability in Proposal Descriptions
- CVE-2019-25742MEDIUMStored XSS in Zoner Real Estate WordPress Theme 4.1.1 – Admin Account Compromise Risk
- CVE-2019-25743MEDIUMWordPress Soliloquy Lite 2.5.6 Stored XSS Vulnerability
- CVE-2019-25744MEDIUMWordPress Popup Builder 3.49 Stored XSS Vulnerability – Exploit Prevention & Patch Guide