
SMS & OTP para WooCommerce, Notificaciones de Pedidos y Recuperación de Carrito Abandonado, plugin para WordPress; SMS Alert <3.9.6; Escalada de Privilegios No Autenticada (Restablecimiento Forzado de Contraseña)

SMS Alert ≤ 3.9.5 — escalada de privilegios no autenticada mediante restablecimiento arbitrario de contraseña
Una falla crítica de autenticación incorrecta en el plugin de WordPress SMS Alert – SMS & OTP for WooCommerce, Order Notifications & Abandoned Cart Recovery. Cuando la verificación OTP está habilitada para restablecimientos de contraseña, un llamador no autenticado puede establecer una nueva contraseña para un usuario que tiene un número de teléfono registrado — incluidos los administradores — sin demostrar la posesión de ese teléfono.
| CVE | CVE-2026-11387 |
| CWE | CWE-287: Improper Authentication |
| CVSS 3.1 | 9.8 Crítico (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Vendor | Cozy Vision Technologies Pvt. Ltd. |
| Producto | SMS Alert (sms-alert) |
| Afectado | Todas las versiones hasta 3.9.5 |
| Parcheado | 3.9.6 (27 de junio de 2026) |
| CNA | Wordfence |
Este repositorio contiene una prueba de concepto de Abraxas Labs solo para pruebas autorizadas — divulgación al proveedor, reproducción en laboratorio o un host para el que tenga permiso por escrito para evaluar.
SMS Alert engancha el flujo de contraseña olvidada de WooCommerce / WordPress para que un código de un solo uso enviado por SMS deba controlar la nueva contraseña. En las versiones afectadas, el controlador detrás de option=smsalert-change-password-form aplica smsalert_user_newpwd sin verificar que el llamador completó la verificación OTP o que de otro modo es dueño de la cuenta.
El registro oficial de CVE también señala que la misma falta de verificación de identidad puede usarse para cambiar la dirección de correo electrónico de una víctima y luego tomar el control de la cuenta mediante un restablecimiento normal. Cualquiera de las dos vías es una toma de control de cuenta no autenticada.
Los sitios solo están expuestos cuando ambas condiciones son verdaderas:
billing_phone).Bajo esas condiciones, el impacto es el compromiso total de la cuenta elegida. Una toma de control de administrador es un compromiso total del sitio.
| Condición | Resultado |
|---|---|
| Acceso de red no autenticado | No se requieren credenciales de WordPress |
| El objetivo es un comprador / suscriptor | Toma de control de la cuenta de ese cliente |
| El objetivo es un administrador | Escalada de privilegios a wp-admin, instalación de plugins/temas, malware persistente |
La confidencialidad, integridad y disponibilidad son todas altas: el atacante puede leer pedidos y PII, cambiar el contenido del sitio y los usuarios, y bloquear al propietario legítimo.
El restablecimiento de contraseña con SMS Alert se ve aproximadamente así:
solicitud de contraseña olvidada → OTP al teléfono del usuario → POST de cambio de contraseña verificado
El paso roto es el último. El plugin enruta según $_REQUEST['option'] == 'smsalert-change-password-form' (ver class-wpresetpassword.php en 3.9.5) y luego escribe la contraseña enviada. No vincula ese POST a una sesión OTP previa, nonce o verificación de capacidad que demostraría que el llamador es el usuario nombrado en el restablecimiento.
Esta prueba de concepto se mantiene en ese controlador:
POST a WooCommerce /my-account/lost-password/ y /wp-login.php?action=lostpassword con wc_reset_password establecido, para que se entre en la ruta de restablecimiento del plugin para el nombre de usuario de la víctima.POST option=smsalert-change-password-form más smsalert_user_newpwd / smsalert_user_cnfpwd a /, /my-account/lost-password/ y la acción de contraseña olvidada de wp-login. Un encabezado Location que contenga password-reset=true se trata como éxito.No se envía ningún OTP. Ese es el error.
CVE-2026-11387-WooCommerce-SMS-OTP-Abraxas-Labs.py es un pequeño cliente Python 3: banner de color, luego los tres pasos anteriores. Solo se comunica con la URL que pase en la línea de comandos.
requestsEn macOS con Homebrew Python (PEP 668), use un venv en lugar de un pip install del sistema:
python3 -m venv .venv
.venv/bin/pip install requests
CVE-2026-11387-WooCommerce-SMS-OTP-Abraxas-Labs.py <base_url> <victim_username> [new_password]
.venv/bin/python3 CVE-2026-11387-WooCommerce-SMS-OTP-Abraxas-Labs.py \
https://shop.example \
admin
Un tercer argumento establece la contraseña a aplicar; el valor predeterminado es abr4x4s#L4b5.
Sin argumentos, el script imprime el banner y el uso, y luego sale con 1. Esa es una forma segura de confirmar que el cliente se inicia.
El sitio de WordPress objetivo debe estar ejecutando SMS Alert ≤ 3.9.5, con OTP en restablecimiento habilitado, y el nombre de usuario de la víctima ya debe tener un número de teléfono para OTP. Contra un sitio parcheado 3.9.6+ o un usuario sin teléfono, se espera que la verificación de inicio de sesión falle.
No apunte esto a ningún host que no posea o para el que no tenga autorización por escrito para probar.
wp-admin de la ventana relevante como no confiables.class-ultimatemember.php (Trac)Solo para investigación y uso educativo. No ejecute, implemente ni use este material contra ningún host a menos que tenga permiso explícito por escrito tanto de la parte que aloja este repositorio como del propietario de los sistemas objetivo.
Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null
wp-login.php