The SignUp & SignIn plugin for WordPress is vulnerable to Authentication Bypass via Weak Password Reset Validation leading to Account Takeover in versions up to, and including, 1.0.0. This is due to the `pravel_change_password()` AJAX handler — registered via `wp_ajax_nopriv_pravel_change_password` and therefore accessible to unauthenticated users — performing no nonce verification, no capability check, and only a loose equality check between an attacker-supplied `reset_activation_code` POST parameter and the target user's `forgot_email` user meta value; when a user has never initiated a password reset, `get_user_meta()` returns an empty string that trivially satisfies this check against an omitted or empty attacker-supplied code. This makes it possible for unauthenticated attackers to change the password of any WordPress user, including administrators, by sending a crafted POST request to `admin-ajax.php` with `action=pravel_change_password`, `reset_user_id` set to the target account's user ID, and `new_password_custom` set to an attacker-chosen password. Successful exploitation allows the attacker to authenticate with the newly set password and fully take over the targeted account, achieving administrator-level privilege escalation on the affected site.
The AJAX handler `pravel_change_password()` registered as `wp_ajax_nopriv_pravel_change_password` is available to unauthenticated users without any nonce verification or permission checks. The password reset code validation mechanism relies solely on loose equality comparison of the POST parameter `reset_activation_code` with the user's `forgot_email` meta value. When a user has never initiated a password reset, the `get_user_meta()` function returns an empty string, which trivially satisfies this condition when the attacker omits or sends an empty parameter. The attacker sends a crafted POST request to `admin-ajax.php` with parameters `action=pravel_change_password`, `reset_user_id` set to the target account ID, and `new_password_custom` containing a password of their choice.
An unauthenticated attacker can set their own password for any WordPress account, including administrator accounts, and then log in and gain full control over the website, achieving privilege escalation to administrator level.
Apply patches available from the vendor according to the references. Until updating, it is recommended to deactivate or remove the SignUp & SignIn plugin and monitor access logs for unauthorized requests to `admin-ajax.php` with the parameter `action=pravel_change_password`.
SignUp & SignIn plugin for WordPress in versions 1.0.0 and earlier
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H