CVE-2026-9021: Easy Invoice WordPress Plugin Missing Authorization Vulnerability
The Easy Invoice WordPress plugin has a security flaw in versions 2.1.19 and earlier that lets anyone on the internet—without needing an account or credentials—accept or decline quotes and potentially convert them into invoices. The vulnerability exists because the plugin uses WordPress's no-privilege AJAX hooks (allowing unauthenticated access) paired with a basic nonce verification, but relies on an optional, disabled-by-default setting to actually check if someone owns the quote. An attacker can harvest the publicly visible nonce from any published quote page, then submit it to trigger quote acceptance/decline actions, potentially auto-generating and emailing invoices without authorization.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 5.3 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
- Weaknesses (CWE)
- CWE-862
- Affected products
- 0 configuration(s)
- Published / Modified
- 2026-07-09 / 2026-07-09
NVD description (verbatim)
The Easy Invoice plugin for WordPress is vulnerable to Missing Authorization in versions up to, and including, 2.1.19. This is due to the plugin registering the easy_invoice_accept_quote and easy_invoice_decline_quote AJAX actions via wp_ajax_nopriv_ hooks and relying solely on a quote-scoped nonce that is rendered into the publicly accessible single quote template, combined with an ownership check that is gated behind an off-by-default Pro option (easy_invoice_pro_restrict_quote_to_client). This makes it possible for unauthenticated attackers to accept or decline arbitrary published quotes — and, depending on the configured accept action, automatically convert them into invoices (and even email them to the client) — by harvesting the per-quote nonce from the public quote page and submitting it to admin-ajax.
10 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The Easy Invoice plugin registers AJAX actions easy_invoice_accept_quote and easy_invoice_decline_quote via wp_ajax_nopriv_ hooks, permitting unauthenticated requests. Although both actions implement quote-scoped nonce verification, ownership checks are gated behind the easy_invoice_pro_restrict_quote_to_client option, which defaults to disabled. This means nonce validation is the only obstacle; the nonce itself is rendered into the public single quote template and thus harvested by unauthenticated users. An attacker can obtain a valid nonce from the quote display page and replay it in a crafted request to admin-ajax.php to accept or decline arbitrary quotes. Depending on plugin configuration, accepted quotes may automatically convert to invoices and trigger client email notifications, creating unauthorized financial transactions.
Business impact
Unauthorized quote acceptance/decline can corrupt business processes by creating fake invoices, disrupting client relationships, and creating audit and compliance problems. If auto-email is configured, fraudulent invoices may be sent to clients, damaging trust and potentially leading to payment disputes or unwanted payment attempts. For organizations heavily relying on the Easy Invoice plugin for order-to-cash workflows, this vulnerability allows attackers to manipulate quote-to-invoice conversion without detection if monitoring is minimal, potentially resulting in revenue recognition issues, customer confusion, and operational friction.
Affected systems
WordPress installations running the Easy Invoice plugin version 2.1.19 or earlier are vulnerable. The vulnerability affects any instance where quotes are published and publicly accessible. Exposure is heightened for sites that enable automatic quote-to-invoice conversion and client email notifications, as these features amplify the impact of unauthorized acceptance.
Exploitability
Exploitation requires no authentication, no user interaction, and no special network access—only the ability to craft an HTTP request containing a harvested quote nonce. Because the nonce is embedded in the public quote page source, attackers can trivially obtain it via a simple GET request. The CVSS score of 5.3 (MEDIUM) reflects that while integrity is compromised (unauthorized invoice creation), there is no confidentiality loss and no availability impact; however, the ease of exploitation and the public nature of the required nonce lower barriers significantly.
Remediation
Upgrade the Easy Invoice plugin to a version newer than 2.1.19 that patches this vulnerability. Verify your current version and check the plugin's official release notes or security advisories for the first patched version. As a temporary mitigation before patching, consider disabling the Easy Invoice plugin or restricting public access to quote pages if your business workflow permits.
Patch guidance
Contact the Easy Invoice plugin vendor or check their official WordPress plugin repository for available updates beyond version 2.1.19. Apply the patched version in a test environment first to validate compatibility with your WordPress installation and any customizations. After confirming functionality, deploy to production and verify that quote acceptance/decline AJAX actions now properly enforce ownership checks by default.
Detection guidance
Monitor admin-ajax.php requests for unusual patterns in easy_invoice_accept_quote and easy_invoice_decline_quote actions, especially from unauthenticated sessions or unexpected sources. Check quote and invoice audit logs for unexplained accept/decline actions or auto-generated invoices. Review email logs for unsolicited invoice notifications sent to clients. Implement logging on critical admin-ajax actions if not already present, and correlate timestamps with business operations to identify anomalies.
Why prioritize this
Although CVSS is MEDIUM (5.3), the vulnerability is trivial to exploit, requires zero authentication, and directly impacts business process integrity by enabling unauthorized financial transactions. Any organization using Easy Invoice for client-facing quotes should treat this as a priority patch due to ease of exploitation and the potential for operational disruption and client relationship damage.
Risk score, explained
The CVSS v3.1 score of 5.3 (MEDIUM) accounts for the attack being network-accessible with low complexity and no user interaction required, but reflects that confidentiality is unaffected and there is no direct availability impact. However, the actual business risk is elevated by the fact that quote/invoice manipulation undermines trust and can create fraudulent financial records—factors not fully captured in the base CVSS metric.
Frequently asked questions
Can an attacker create new quotes or see confidential quote data?
No. This vulnerability is limited to accepting or declining existing published quotes. The attacker cannot create quotes, view unpublished quotes, or access confidential information. The impact is confined to quote state changes and the downstream invoice generation that may result.
What if I've disabled the auto-email and auto-convert features?
Disabling auto-email and auto-convert reduces the impact significantly—unauthorized quote acceptance would still occur, but no invoices would be automatically created or mailed. However, the underlying authorization bypass still exists and should be patched.
Does the easy_invoice_pro_restrict_quote_to_client option actually protect us?
Yes. If that Pro option is enabled, ownership checks are enforced and an attacker cannot accept or decline another user's quote. However, the option defaults to disabled, and many installations do not enable it—leaving them vulnerable.
Do I need to patch immediately if I'm using an older WordPress version?
Yes. The vulnerability is independent of WordPress version; it is a flaw in the Easy Invoice plugin itself. Patching the plugin is necessary regardless of your WordPress version.
This analysis is provided for informational purposes and is based on the vulnerability disclosure data available as of the publication date. No exploit code or detailed attack steps are provided. Organizations should verify patch availability and compatibility with their specific plugin version and WordPress configuration. This summary does not constitute professional security advice; consult your security team or vendor for guidance specific to your environment. Source: NVD (public-domain), retrieved 2026-08-17. Analysis generated by SEC.co (claude-haiku-4-5).
Weaknesses (CWE)
Related vulnerabilities
- CVE-2022-42479MEDIUMMissing Authorization in TemplateHouse Soledad – MEDIUM Severity Access Control Bypass
- CVE-2022-45813MEDIUMBeRocket Advanced AJAX Product Filters Missing Authorization Flaw
- CVE-2023-25969MEDIUMMissing Authorization in ThemeHunk Contact Form Plugin
- CVE-2023-32959MEDIUMMetroStore Missing Authorization Vulnerability – Patch Guide
- CVE-2024-24709MEDIUMShareaholic Missing Authorization Vulnerability – Update Required
- CVE-2024-31435MEDIUMMissing Authorization in Inisev Social Media & Share Icons Plugin—Patch Guidance
- CVE-2024-33685MEDIUMMissing Authorization in Jegstudio Startupzy 1.1.1 – MEDIUM Severity Vulnerability
- CVE-2024-33909MEDIUMMissing Authorization in Avirtum iPages Flipbook – CVSS 5.3 Patch Guide