Easy Invoice <= 2.1.19 - Unauthenticated Arbitrary Quote Accept/Decline and Invoice Creation via easy_invoice_accept_quote / easy_invoice_decline_quote AJAX Actions
Strategic Overview
- Status
- Patched in 2.2.20
- Affected Plugin
- Easy Invoice – Invoice Generator, PDF Quotes & Payments
- Affected Version
<= 2.2.19- CVSS
- 5.3Medium
- Weakness type
- CWE-862 · Missing Authorization
- CVE
CVE-2026-9021
At a glance
CVE-2026-9021 is a medium-severity Missing Authorization vulnerability in the Easy Invoice WordPress plugin, affecting versions <= 2.2.19. It carries a CVSS score of 5.3 (reachable over the network; low attack complexity). Exploitation requires no authentication. The issue is fixed in version 2.2.20; sites on affected versions should update now. Disclosed July 2026, reported by PeterPatter.
Vulnerability Overview
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.
Technical Analysis
The vector marks this flaw as remotely reachable over the network, with low attack complexity — no special timing or configuration is needed, and no privileges on the target site, and no interaction from a victim user.
CWE-862: Missing Authorization
Reaching this weakness in Easy Invoice <= 2.2.19 takes no account at all. A missing authorization check means a function is reachable by anyone who can reach the endpoint, because the code never asks whether the caller is allowed to perform the action.
Any user who can reach the endpoint gets to run an action reserved for higher-privileged roles, from reading protected data to changing settings or content. For Easy Invoice the fix is 2.2.20: builds <= 2.2.19 are affected, anything from 2.2.20 onward is not.
Remediation
Update to version 2.2.20, or a newer patched version
How does WordSec protect against this?
This one needs no account at all, which puts it outside what login hardening can reach; WordSec's login security narrows the account-level paths around it, and the firewall is what inspects the request itself. None of that substitutes for the fix: Easy Invoice 2.2.20 closes this, and updating the plugin is the step that ends it.
- Login Security
- Alerts
External References
Related records
Other vulnerabilities in Easy Invoice – Invoice Generator, PDF Quotes & Payments
Vulnerability data © Defiant, Inc., provided under the Wordfence Intelligence T&C