Executive Summary
CVSS Score: 9.8 (Critical)
Give Tributes, a donation add-on for the GiveWP fundraising plugin published by LiquidWeb for WordPress, contains a PHP Object Injection vulnerability tracked as CVE-2026-19658. All versions up to and including 2.3.1 fail to sanitize part of the donation form's eCard recipient data before it is written to donation metadata, allowing an unauthenticated site visitor to submit a PHP serialized object where a plain name field is expected.
The critical detail — and the one that should drive triage decisions — is spelled out directly in the vulnerability's own description: no known POP (Property-Oriented Programming) gadget chain currently exists inside Give Tributes itself. PHP Object Injection is only dangerous when the injected object's magic methods (__wakeup, __destruct, __toString, and similar) can be chained into something harmful, and Give Tributes does not ship such a chain on its own. That means, in a site running Give Tributes alone, successful exploitation of this specific flaw currently has no demonstrated impact.
The risk is not standalone, however — it is compositional. If a site also runs any other plugin or theme (regardless of publisher) that happens to contain a usable POP gadget chain, the same injected object can trigger that chain once PHP deserializes it, with consequences ranging from arbitrary file deletion to remote code execution depending on what gadget is present. Because plugin/theme inventories vary per site and can change at any time (a new plugin install introduces a gadget chain that didn't exist yesterday), and because the vulnerable code path requires no authentication, this advisory treats CVE-2026-19658 as critical per its published CVSS 9.8 score — reflecting worst-case, chainable risk — while being explicit that real-world impact on any given site depends entirely on what else is installed alongside Give Tributes.
Vulnerability Overview
| Field | Detail |
|---|---|
| CVE ID | CVE-2026-19658 |
| CWE Classification | CWE-502 (Deserialization of Untrusted Data) |
| CVSS Score | 9.8 (Critical) — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Vendor / Product | LiquidWeb — Give Tributes (GiveWP add-on) |
| Assigner | Wordfence |
| Attack Vector | Network |
| Privileges Required | None (unauthenticated) |
| User Interaction | None |
| Published | 2026-09-22 |
The CVSS vector, CWE classification, and assigner above come from third-party vulnerability aggregators (VulDB and Wordfence Intelligence listings) rather than the bare NVD summary, and should be treated as reported-but-not-independently-reverified by CosmicBytez Labs against the plugin's own source.
Affected Versions
| Product | Affected Range | Fixed Version |
|---|---|---|
| Give Tributes (LiquidWeb) | Up to and including 2.3.1 | Not yet confirmed against an official vendor changelog at time of writing; third-party proof-of-concept trackers cite 2.3.1.1 as the patched release |
Because the fixed-version number above is sourced from a third-party researcher's PoC repository rather than the vendor's own release notes, administrators should confirm the currently installed and latest-available plugin version directly from the WordPress.org plugin listing or their site's plugin dashboard rather than relying solely on the version number quoted here.
Attack Vector
Public technical write-ups describe a narrow but unauthenticated trigger path. These details come from third-party analysis of the plugin's code and have not been independently verified line-by-line by CosmicBytez Labs, but are included because they materially affect how exploitable a given site is:
1. Prerequisite site configuration:
- The donation form uses the legacy Give form shortcode (v2),
not the newer Visual Form Builder (v3).
- "Allow Multiple Recipients" is enabled for eCards, either
globally or on the specific donation form.
- eCard "Custom Message" is disabled — this is the plugin's
default state. (When enabled, GiveWP's give_clean() routine
blanks serialized-looking input during required-field
validation, which prevents the payload from being stored.)
- The form has a working payment method available to complete
a donation (a manual/offline gateway is sufficient).
2. GiveWP's normal field validation runs submitted values through
a sanitized copy of the request data (give_clean()), which
strips or blanks strings that look like PHP serialized data.
3. Give Tributes' own storage routine for eCard recipients
(insert_tribute_data()) reads the SECOND and later recipients'
first_name / last_name fields directly from the raw, unsanitized
request data instead of the sanitized copy.
4. An unauthenticated attacker submits a donation where a second
recipient's name field contains a PHP serialized object string
(the classic O:<length>:"ClassName":... prefix) instead of a
plain name.
5. The unsanitized value is written into donation post meta as-is.
6. When that meta value is later read back and passed through
PHP's unserialize() — for example when rendering tribute data,
generating an eCard, or displaying donation details — the
attacker-supplied object is instantiated.
7. Give Tributes contains no POP gadget chain of its own, so step 6
alone has no demonstrated impact. If ANY other plugin or theme
on the same site provides a compatible gadget chain, deserializing
the attacker's object can invoke it.
No authentication, prior access, or social engineering is required — only the ability to submit a public donation form with multi-recipient eCards enabled.
Impact of Successful Exploitation
| Impact Area | Consequence |
|---|---|
| Confidentiality | Dependent on gadget chain: potential disclosure of sensitive data if a co-installed plugin/theme's POP chain exposes file reads or data leakage |
| Integrity | Dependent on gadget chain: potential arbitrary file writes/deletion or data tampering via a co-installed gadget chain |
| Availability | Dependent on gadget chain: potential file deletion or resource abuse if a suitable chain is present |
| Standalone Impact (Give Tributes only) | None confirmed — no POP chain ships with Give Tributes itself |
| Compositional Risk | Any plugin/theme install on the site (present now or added later) can retroactively turn this into a working exploit chain without Give Tributes itself changing |
| Trust Boundary | Unauthenticated public donation form input reaches PHP's unserialize() — a classic high-risk sink regardless of current gadget availability |
Immediate Remediation
- Update Give Tributes to the latest available version. Confirm the currently installed version and the latest release directly via the WordPress admin Plugins screen or the WordPress.org plugin page — do not rely solely on a specific version number from third-party trackers.
- If an immediate update is not possible, disable "Allow Multiple Recipients" on all donation forms using Give Tributes. Per the reported trigger conditions, the single-recipient code path applies
sanitize_textarea_field(), which neutralizes the payload and closes this specific route. - Enable the eCard "Custom Message" option as an additional mitigating control, since GiveWP's required-field validation for that field blanks serialized-looking input before storage — though this should not be relied upon as a substitute for patching.
- Inventory every other plugin and theme on the same WordPress installation. Since Give Tributes has no POP chain of its own, your actual exposure is determined by what else is installed. Treat any site with a large or infrequently-audited plugin/theme footprint as higher risk.
- If the plugin is not in active use, deactivate or remove it until a confirmed patched version is verified and installed.
Detection Indicators
| Indicator | Where to Look |
|---|---|
Donation submissions where an eCard recipient's first/last name field contains O: followed by digits and a class name (PHP serialization syntax) instead of a plausible human name | Donation records / post meta for Give Tributes tribute data, database queries against relevant meta keys |
| Unusually large or malformed values in eCard recipient name fields | GiveWP/Give Tributes admin donation detail views |
PHP errors or warnings referencing unserialize(), unexpected class instantiation, or "Error thrown" magic-method failures in logs | PHP error log, WordPress debug log |
| Repeated automated donation form submissions with multi-recipient eCards from the same IP/UA in a short window | Web server access logs, WAF logs |
| Unexpected file changes, new files, or deleted files following donation activity | File integrity monitoring on the WordPress install |
| Known PoC/scanner signatures (public Python-based checker tooling exists for this CVE) in access logs | Web server / WAF logs |
Post-Remediation Steps
- Confirm the installed Give Tributes version is above 2.3.1 and matches the vendor's current released version after updating.
- Re-enable "Allow Multiple Recipients" only after the update is confirmed, if it was disabled as an interim mitigation.
- Audit all other installed plugins and themes for known PHP Object Injection or insecure-deserialization advisories, since any one of them supplying a POP gadget chain is what would make this vulnerability exploitable in practice.
- Review donation records created while the site ran a vulnerable version for anomalous serialized-looking data in recipient name fields.
- Rotate any credentials or secrets that could plausibly have been exposed if a gadget chain was present and exploited during the vulnerable window.
- Keep Give Tributes, GiveWP core, and all other plugins/themes on a regular update cadence — this class of vulnerability becomes exploitable the moment a compatible gadget chain is introduced anywhere on the site, not only through Give Tributes' own updates.