CVE-2026-9021
Deferred Deferred - Pending Action

Missing Authorization in Easy Invoice WordPress Plugin

Vulnerability report for CVE-2026-9021, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-07-09

Last updated on: 2026-07-09

Assigner: Wordfence

Description

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.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-07-09
Last Modified
2026-07-09
Generated
2026-07-29
AI Q&A
2026-07-09
EPSS Evaluated
2026-07-28
NVD
EUVD

Affected Vendors & Products

Showing 2 associated CPEs
Vendor Product Version / Range
easy_invoice easy_invoice to 2.1.19 (inc)
easy_invoice plugin to 2.1.19 (inc)

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-862 The product does not perform an authorization check when an actor attempts to access a resource or perform an action.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

The Easy Invoice plugin for WordPress has a Missing Authorization vulnerability in versions up to and including 2.1.19. This occurs because the plugin registers certain AJAX actions (easy_invoice_accept_quote and easy_invoice_decline_quote) that can be triggered without authentication (via wp_ajax_nopriv_ hooks). The plugin relies only on a nonce tied to each quote, which is publicly accessible on the single quote page. Additionally, an ownership check that would restrict actions to the quote owner is disabled by default unless a Pro option is enabled. As a result, unauthenticated attackers can harvest the nonce from the public quote page and use it to accept or decline any published quote, potentially converting quotes into invoices and even emailing them to clients.

Detection Guidance

This vulnerability involves the Easy Invoice WordPress plugin registering AJAX actions (easy_invoice_accept_quote and easy_invoice_decline_quote) via wp_ajax_nopriv_ hooks, which can be exploited by unauthenticated attackers. Detection can focus on monitoring for suspicious HTTP POST requests to admin-ajax.php containing these action parameters.

  • Use network monitoring or web server logs to identify POST requests to admin-ajax.php with parameters 'action=easy_invoice_accept_quote' or 'action=easy_invoice_decline_quote'.
  • Example command to search web server logs (e.g., Apache) for such requests: grep 'admin-ajax.php' /var/log/apache2/access.log | grep -E 'action=easy_invoice_accept_quote|action=easy_invoice_decline_quote'
  • Use tools like curl or Burp Suite to test if these AJAX endpoints are accessible without authentication by sending POST requests with the relevant action parameters and observing the response.
Impact Analysis

This vulnerability allows unauthenticated attackers to manipulate published quotes by accepting or declining them without proper authorization. Depending on the plugin's configuration, attackers can automatically convert these quotes into invoices and send them to clients via email. This can lead to unauthorized financial transactions, confusion for clients, and potential reputational damage for the business using the plugin.

Mitigation Strategies

To mitigate this vulnerability, immediately update the Easy Invoice plugin to a version later than 2.1.19 where the issue is fixed.

If updating is not immediately possible, consider disabling or restricting access to the vulnerable AJAX actions by removing or restricting the wp_ajax_nopriv_ hooks in the plugin code or via security plugins/firewalls.

Enable the Pro option 'easy_invoice_pro_restrict_quote_to_client' if available, as it gates the ownership check that helps prevent unauthorized actions.

Monitor logs for suspicious activity targeting these AJAX endpoints and consider implementing web application firewall (WAF) rules to block unauthorized requests.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-9021. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart