Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2023-1430 — Divulgación responsable de vulnerabilidad sin parchear en FluentCRM por WPManageNinja | Kitploit
Herramientas/GitHubGitHub/karlemilnikka/cve-2023-1430
Autenticación y AutorizaciónAnálisis de VulnerabilidadesSeguridad WebPapers e InvestigaciónMala ConfiguraciónAprendizaje y Educación
GitHubkarlemilnikka/cve-2023-1430

CVE-2023-1430

Divulgación responsable de vulnerabilidad sin parchear en FluentCRM por WPManageNinja

Ver Repositorio
1hace 2 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Actualización 2023-06-12: Ya no necesitas el fragmento. WPManageNinja parcheó la vulnerabilidad dos horas después de la divulgación pública (93 días después del informe).

Actualización 2024-01-27: El problema relacionado con los valores hash perpetuos ahora está completamente resuelto.

Divulgación responsable de la vulnerabilidad sin parchear CVE-2023-1430 en FluentCRM de WPManageNinja

tl;dr Los atacantes pueden ver y editar los datos de contacto en FluentCRM. WPManageNinja no ha parcheado la vulnerabilidad dentro de la ventana de divulgación responsable de 90 días. Proporciono un fragmento de mitigación para prevenir la explotación de la vulnerabilidad mientras se espera un parche oficial.

  • Vulnerabilidad: CVE-2023-1430 Uso insuficiente de hash como control de autorización
  • CVSS: 6.5 (Media)
  • Software: FluentCRM
  • Versiones afectadas: vulnerabilidad detectada en 2.7.40
  • Versión parcheada: 2.8.02
  • Desarrollador: WPManageNinja
  • Investigador: Karl Emil Nikka, Nikka Systems (reportado a través de Wordfence)
  • Publicado públicamente: 2023-06-12
  • Última actualización: 2023-06-12

Resumen

Hoy publico información sobre una vulnerabilidad que encontré en el popular plugin de WordPress FluentCRM de WPManageNinja. La vulnerabilidad, CVE-2023-1430, es causada por el uso insuficiente de un hash de dirección de correo electrónico como control de autorización por parte de FluentCRM. Divulgué la vulnerabilidad de forma responsable de acuerdo con la política de divulgación de vulnerabilidades de Google Zero. WPManageNinja no ha proporcionado un parche dentro de la ventana de 90 días ni ha solicitado una extensión de tiempo.

En este informe, contacto se refiere a un objeto de contacto de FluentCRM, mientras que usuario se refiere a un objeto de usuario de WordPress. Un contacto puede estar vinculado a un usuario, pero no es un requisito. Los detalles sobre la explotación de la vulnerabilidad se omiten hasta que esté disponible un parche oficial. Los profesionales de seguridad pueden contactarme para obtener el informe completo ([email protected]).

Impacto general y acciones requeridas

En los sitios que ejecutan FluentCRM, un atacante puede ver y editar el nombre, la dirección de correo electrónico y la configuración de listas de un contacto con solo conocer su dirección de correo electrónico. Dado que el nombre del contacto a menudo se incluye en los boletines mediante etiquetas de combinación, un atacante puede reemplazar el nombre del contacto con lenguaje obsceno, lo que hace que el propietario del sitio web envíe boletines vulgares. Si el administrador del sitio web ha habilitado el shortcode de FluentCRM para gestionar preferencias y lo ha añadido a una página web pública, un atacante puede ver y editar toda la información personal expuesta, es decir, título, número de teléfono, fecha de nacimiento y dirección (según la configuración de FluentCRM).

FluentCRM está instalado en más de 30 000 sitios. Los administradores de sitios con FluentCRM pueden prevenir la explotación de la vulnerabilidad añadiendo mi fragmento de mitigación al archivo functions.php del tema hijo.

El fragmento no parchea la vulnerabilidad. Reemplaza el contenido vulnerable de la página de cancelación de suscripción de FluentCRM (unsubscribe.php) y de la página de gestión de preferencias (manage_subscription.php) con un mensaje de error que indica al contacto que se comunique por correo electrónico en su lugar. La dirección de correo electrónico en el mensaje de error es la del administrador del sitio (se puede cambiar desde el fragmento). El fragmento de mitigación también garantiza que los visitantes no conectados no puedan renderizar el shortcode vulnerable de FluentCRM para gestionar preferencias (fluentcrm_pref). Un visitante no conectado verá en su lugar un mensaje de error indicándole que inicie sesión. Todas las cadenas son traducibles con el archivo POT proporcionado.

Acciones requeridas

Recomiendo a los propietarios de sitios web que implementen la mitigación que proporciono o su propia mitigación correspondiente. Los propietarios de sitios web también deberían verificar la integridad de sus datos de contacto en FluentCRM y, si es posible, revisar sus registros en busca de posibles fugas de datos. Revisar los registros es especialmente importante para los siguientes sitios:

  • sitios donde el nombre registrado de un contacto es información sensible
  • sitios donde el shortcode de FluentCRM para gestionar preferencias está o ha estado presente en páginas públicas para visitantes no conectados
  • sitios donde la gestión de listas está habilitada y el nombre de las listas a las que un contacto está suscrito es información sensible.

El responsable del tratamiento de datos asignado al sitio web deberá gestionar las posibles fugas de datos personales de acuerdo con las leyes y regulaciones de las jurisdicciones afectadas.

Impacto potencial adicional

Si FluentCRM está configurado para sincronizar la configuración de un contacto con su usuario correspondiente, un atacante puede cambiar el nombre del usuario. Afortunadamente, FluentCRM no sincroniza las direcciones de correo electrónico de los contactos con los usuarios. Si lo hiciera, esta vulnerabilidad permitiría la toma de control total del sitio. Un atacante habría podido obtener acceso privilegiado cambiando la dirección de correo electrónico del administrador del sitio y luego restableciendo la contraseña del administrador.

Sin embargo, otras soluciones pueden sincronizar todos los metadatos de los contactos con los usuarios, por ejemplo, WP Fusion y la API de FluentCRM. WP Fusion es probablemente el plugin de terceros más popular para sincronizar los metadatos de los contactos entre un CRM (p. ej., FluentCRM) y WordPress. Afortunadamente, la versión actual de WP Fusion no está conectada a los cambios de metadatos iniciados desde los formularios vulnerables. He informado a los desarrolladores de WP Fusion, y no abordarán esta limitación hasta que WPManageNinja haya parcheado la vulnerabilidad.

La API de FluentCRM también se puede utilizar para actualizar datos de contactos y usuarios. Los propietarios de sitios que utilizan la API de FluentCRM para actualizar las direcciones de correo electrónico de los usuarios deben desactivar esta actualización cuando se inicie desde la página o el shortcode de FluentCRM para gestionar preferencias (o añadir mi fragmento de mitigación para garantizar que no se puedan actualizar configuraciones desde los formularios vulnerables).

Explotación de la vulnerabilidad

FluentCRM permite a los contactos cancelar su suscripción y gestionar sus preferencias desde páginas web públicas. Los enlaces a estas páginas se incluyen en todos los boletines. Los cambios realizados en estas páginas se autorizan mediante hashes MD5 de las direcciones de correo electrónico de los contactos, enviados como parámetros de URL. El hash MD5 de una dirección de correo electrónico no es un secreto y cualquiera puede calcularlo. Un atacante puede explotar el uso incorrecto de los hashes para cancelar la suscripción de contactos específicos o cancelar la suscripción de contactos con direcciones de correo electrónico conocidas de forma masiva.

Mientras que la página de cancelación de suscripción se basa únicamente en el hash MD5 para la autorización, la página de gestión de preferencias requiere un parámetro de URL adicional llamado ce_id. En este caso, el ce_id se refiere al ID del contacto en la tabla fc_subscribers. Este ID es un entero incremental. El valor de ce_id se encuentra fácilmente probando todos los valores posibles (el espacio de búsqueda es el número de contactos que se han registrado en el sitio). Los usuarios administradores probablemente tienen valores bajos.

Desde la página de gestión de preferencias, un atacante también puede exfiltrar el valor secure_hash del contacto. Al actualizar la dirección de correo electrónico del contacto, el valor “secure_hash” del contacto se almacena en una cookie llamada fc_hash_secure. Con esta cookie, el atacante puede mostrar toda la información de contacto disponible a través del shortcode del formulario de preferencias de FluentCRM.

Problema menor relacionado: valores hash perpetuos

El “secure_hash” mencionado anteriormente es un valor en el que FluentCRM (en algunas situaciones) se basa en lugar del hash MD5 de la dirección de correo electrónico o como alternativa a este. Desde el lanzamiento de FluentCRM 2.8.0, la página de cancelación de suscripción se basa exclusivamente en el valor secure_hash para la autorización. La página de gestión de preferencias acepta tanto el nuevo valor secure_hash como el antiguo hash MD5 de la dirección de correo electrónico para la autorización.

Si bien el valor secure_hash no se puede derivar de la dirección de correo electrónico, el uso que hace FluentCRM no sigue buenas prácticas de seguridad. El valor secure_hash se genera una vez por contacto. Nunca se actualiza y nunca expira. Esto es problemático ya que el valor secure_hash se incluye en todos los boletines. Si un atacante obtiene acceso a la bandeja de entrada de un contacto, el atacante puede cambiar la configuración del contacto indefinidamente. Si el contacto afectado está vinculado a un usuario con privilegios de administrador, y los cambios de dirección de correo electrónico se sincronizan de FluentCRM a WordPress, cada boletín enviado a este contacto contendrá un token que nunca expira para tomar el control del sitio.

Informé de este problema relacionado a WPManageNinja el 2023-03-15. Dos meses después (2023-05-15), WPManageNinja respondió que sus asesores de seguridad no consideraban que el valor estático secure_hash fuera un problema. Los asesores de seguridad de WPManageNinja dijeron que era “aceptable utilizar este tipo de tokens generados una sola vez para identificar al contacto” y que era “similar a los tokens de API de los servicios SaaS que no se entregan a ningún otro contacto, sino que solo se envían al contacto real que posee la dirección de correo electrónico”.

WPManageNinja fue receptivo y me dijo que les avisara si todavía pensaba que era un problema de seguridad, y así lo hice. Expliqué por qué los valores secure_hash no se podían comparar con los tokens de API. (Se puede garantizar que los tokens de API solo se envíen a través de conexiones TLS, y el acceso a los tokens de API se puede restringir. Ese no es el caso con los valores en texto plano en los correos electrónicos. Lo más importante es que los tokens de API se pueden revocar, mientras que un contacto no tiene forma de revocar un valor secure_hash).

Más tarde ese mismo día, WPManageNinja me agradeció y dijo que consideraban combinar el ID del registro de correo electrónico con el hash. Eso resolverá el problema si se implementa junto con la revocación automática de los valores secure_hash antiguos (caducidad por tiempo) o anteriores (caducidad por contador). Esta función aún no se ha implementado, pero no considero que el uso de valores hash estáticos sea parte de este CVE.

Cronología

  • 2023-03-11 Informé de la vulnerabilidad a WPManageNinja. En ese momento, solo había encontrado la vulnerabilidad en la página de cancelación de suscripción.
  • 2023-03-13 WPManageNinja confirmó que había recibido mi informe.
  • 2023-03-14 Los desarrolladores de WPManageNinja negaron usar hashes MD5 de direcciones de correo electrónico para la autorización, afirmando que estaban usando tokens wp_generate_uuid4.
  • 2023-03-14 Expliqué y demostré que dependían de hashes MD5 de direcciones de correo electrónico.
  • 2023-03-15 Debido a la respuesta inicial de WPManageNinja, investigué más a fondo y encontré la misma vulnerabilidad en la página de gestión de preferencias. Informé de mis hallazgos a WPManageNinja y expliqué por qué hacían la vulnerabilidad más grave. También envié un informe a Wordfence y solicité un CVE.
  • 2023-03-16 WPManageNinja confirmó que había recibido mi informe actualizado.
  • 2023-03-16 Wordfence confirmó la vulnerabilidad y le asignó el CVE-2023-1430.
  • 2023-04-10 Envié un recordatorio de 30 días a WPManageNinja.
  • 2023-04-14 WPManageNinja publicó FluentCRM 2.8.0 sin mencionar ningún parche de seguridad (solo “mejoras y correcciones de errores”).
  • 2023-04-22 Informé a WPManageNinja de que la actualización 2.8.0 solo corregía la vulnerabilidad en la página de cancelación de suscripción y que persistía en la página de gestión de preferencias.
  • 2023-04-24 WPManageNinja confirmó que había recibido mi informe actualizado.
  • 2023-05-14 Envié un recordatorio de 60 días a WPManageNinja.
  • 2023-05-15 WPManageNinja dijo que me enviaría una versión beta parcheada la semana siguiente (lo cual nunca hicieron).
  • 2023-06-01 Pregunté a WPManageNinja si debía avisar al desarrollador de WP Fusion antes de la divulgación pública. WPManageNinja me dijo que no era necesario ya que publicarían una actualización la semana siguiente (lo cual no hicieron).
  • 2023-06-08 Dije a WPManageNinja que retrasaría la divulgación pública hasta el 2023-06-12 ya que la fecha original de divulgación pública estaba junto al fin de semana.
  • 2023-06-09 Informé a WPManageNinja de que habían alcanzado los 90 días y de que el siguiente paso responsable sería publicar información sobre la vulnerabilidad para que todos pudieran implementar mitigaciones mientras esperaban. También pedí a los desarrolladores de WP Fusion que no abordaran la limitación de sincronización hasta que WPManageNinja hubiera parcheado la vulnerabilidad.
  • 2023-06-09 Wordfence publicó detalles iniciales sobre la vulnerabilidad, indicando incorrectamente que la vulnerabilidad había sido parcheada. Esto se debió a una falta de comunicación entre yo y Wordfence.
  • 2023-06-12 Publiqué este informe omitiendo los detalles de explotación.
  • 2023-06-12 WPManageNinja parcheó la vulnerabilidad dos horas después de la divulgación pública (93 días después del informe) sin mencionar nada sobre la vulnerabilidad en su registro de cambios (solo “Use Secure Hash en lugar de MD5 para la página de preferencias de suscripción”).

Nikka Systems Academy (Project Opal) NO está afectada

En el primer trimestre de 2023, comenzamos a migrar desde nuestra herramienta de boletines anterior (Sendy) a FluentCRM. Encontré la vulnerabilidad mientras integraba FluentCRM con Nikka Systems Academy (Project Opal). Dado que reemplazamos el sistema de gestión de suscripciones de FluentCRM con nuestro plugin personalizado, los formularios vulnerables de FluentCRM nunca han afectado a nuestro sitio ni a los datos de nuestros clientes.

Recomendaciones para WPManageNinja

FluentCRM es un gran plugin, pero el manejo de la divulgación de la vulnerabilidad por parte de WPManageNinja deja mucho margen de mejora. La siguiente lista es mi sugerencia sobre cómo WPManageNinja podría mejorar la situación.

  • Deberían consultar a un auditor externo para auditar la base de código actual. La vulnerabilidad CVE-2023-1430 es un ejemplo de manual de cómo no usar hashes. Junto con la negativa inicial de WPManageNinja de siquiera usar hashes MD5 de direcciones de correo electrónico para la autorización, esto me dice que probablemente sea el momento de una auditoría externa de la base de código.
  • Deberían publicar un archivo security.txt (RFC 9116) para que los investigadores de seguridad puedan contactar directamente a sus desarrolladores. Perdieron días importantes de mitigación ya que tuve que informar la vulnerabilidad a través de su departamento de atención al cliente, que inicialmente descartó incorrectamente el informe de vulnerabilidad.
  • Deberían establecer un mejor procedimiento para parchear vulnerabilidades de manera oportuna. Una vulnerabilidad fácil de parchear como esta debería abordarse dentro de los 30 días. No tener un parche listo dentro de la ventana de divulgación responsable de 90 días es inaceptable.
  • Deberían divulgar siempre las vulnerabilidades abordadas y las mejoras de seguridad implementadas en sus registros de cambios para que sus clientes sepan lo importantes que son las actualizaciones.

Dicho esto, todavía confío en WPManageNinja. Hay errores en todo software, y un único informe de vulnerabilidad mal gestionado no es una razón para dejar de usar sus plugins.

Actualización 2023-06-12: El hecho de que todavía intentaran ocultar la vulnerabilidad en su registro de cambios me preocupa genuinamente. (Ahora han añadido el CVE).

Registro de cambios

  • 2023-06-12 Publicación inicial.
  • 2023-06-12 Actualizado con información sobre la disponibilidad del parche y los detalles de explotación previamente omitidos.
  • 2023-06-12 Añadido a la cronología: WPManageNinja añade información sobre el CVE al registro de cambios del plugin.
  • 2023-06-12 Corregidos errores ortográficos. CVSS aumentado a 6.5 por Wordfence.
  • 2024-01-27 Añadida información sobre cómo FluentCRM 2.8.40 y 2.8.41 abordaron el problema menor relacionado con los valores hash perpetuos.
Descargar herramienta
  • 2023-06-12 Actualicé este informe con información sobre el parche y los detalles previamente omitidos.
  • 2023-06-12 WPManageNinja añadió información sobre el CVE al registro de cambios del plugin.
  • 2024-01-17 WPMangeNinja se puso en contacto conmigo para conocer mi opinión sobre su solución al problema de los valores hash perpetuos.
  • 2024-01-27 WPMangeNinja publicó FluentCRM 2.8.40, abordando el problema de los valores hash perpetuos e implementando las mejoras que sugerí.
  • 2024-01-27 WPMangeNinja publicó FluentCRM 2.8.41, asegurándose de que el hash de autenticación antiguo de un contacto se invalide cuando el usuario de WordPress conectado cambia su contraseña.
  • 2024-01-27 Consideré que el problema menor relacionado con los valores hash perpetuos estaba resuelto.