MEDIUM 5.3

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).