CVE-2026-104014
9.8 CRITICALPublished 2026-11-07 · Updated 2026-11-07
AI risk analysis
- Summary
- The Naimur Email OTP Verification for WooCommerce plugin allows unauthenticated attackers to bypass authentication and take over user accounts by reusing previously verified but incomplete password-reset requests. This occurs because the plugin stores a 'VERIFIED' state indefinitely without expiration or session binding, and lacks per-reset tokens or timestamp validation.
- Exploitability
- Exploitation is straightforward for attackers who know a victim's email address and can retrieve the publicly exposed nonce from the CEOVW_APP global on the WooCommerce account page; no authentication or special privileges are required.
- Blast radius
- Successful exploitation grants full administrative or user-level session hijacking, enabling complete site compromise if the targeted account has elevated privileges such as administrator access.
- Detection
- Defenders should monitor for repeated calls to wp-admin/admin-ajax.php?action=ceovw_update_new_password from the same IP with different email addresses but identical nonce values, especially when combined with prior requests to ceovw_verify_otp endpoints; additionally, inspect WordPress debug logs for unexpected password changes without corresponding login events.
- Prioritized remediation
- Upgrade to version 2.1.1 or later, which implements per-reset tokens, timestamp validation, and proper cleanup of verified OTP rows after successful password reset.
Analysis generated locally by garnet-coder (no data left the box). AI-assisted — verify against primary sources before acting.
NVD description
The Naimur Email OTP Verification for WooCommerce plugin for WordPress is vulnerable to authentication bypass in versions up to, and including, 2.1.0. This is due to the plugin's password-reset finalization endpoint (the wp_ajax_nopriv_ceovw_update_new_password action handled by CEOVW_AJAX::update_new_password()) authorizing the reset solely by the presence of a database row marking an email as 'VERIFIED', with no timestamp check, no session binding, and no per-reset token — combined with mark_otp_as_verified_for_reset() leaving the row in that state after a user enters their code (abandoning the flow leaves the row behind), and a scheduled 'ceovw_cleanup_expired_otps_event' cron that has no add_action() handler anywhere in the plugin so cleanup never runs. This makes it possible for unauthenticated attackers to take over any account whose owner previously requested and verified a password-reset code and did not immediately finish choosing a new password — the attacker needs only the victim's email address and a nonce that the plugin itself localizes publicly into the CEOVW_APP global on the WooCommerce account page for logged-out visitors, after which they call the endpoint, overwrite the victim's password, and are returned a live wordpress_logged_in_ session cookie for that user (full site takeover if the account is an administrator).
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weaknesses
CWE-287
All references
- https://plugins.trac.wordpress.org/browser/naimur-email-otp-for-woocommerce/tags/2.1.0/includes/class-ajax.php#L10
- https://plugins.trac.wordpress.org/browser/naimur-email-otp-for-woocommerce/tags/2.1.0/includes/class-ajax.php#L163
- https://plugins.trac.wordpress.org/browser/naimur-email-otp-for-woocommerce/tags/2.1.0/includes/class-security.php#L72
- https://plugins.trac.wordpress.org/browser/naimur-email-otp-for-woocommerce/tags/2.1.0/includes/class-security.php#L77
- https://plugins.trac.wordpress.org/browser/naimur-email-otp-for-woocommerce/tags/2.1.0/naimur-email-otp-for-woocommerce.php#L38
- https://plugins.trac.wordpress.org/browser/naimur-email-otp-for-woocommerce/tags/2.1.1/includes/class-ajax.php
- https://www.wordfence.com/threat-intel/vulnerabilities/id/b29918de-22a2-424f-ad86-ad83874ca81a?source=cve
Source data: NVD (nvd.nist.gov), public domain. Exploit-DB.ai adds local AI analysis for defensive use only.
Related CVEs
- HIGHCVE-2026-103895
- CRITICALCVE-2026-110653
- CRITICALCVE-2026-84734
- CRITICALCVE-2026-89324
- HIGHCVE-2026-17031
- HIGHCVE-2026-54375PoC
- HIGHCVE-2026-81534
- HIGHCVE-2026-94262
Related by shared AI tags and CWE weakness class. Browse the full archive.