Aviso de seguridad de Forminator Forms
Si recibió un correo electrónico mío que le dirige a esta página, es porque su sitio web parece
estar ejecutando una versión de Forminator Forms (el plugin de WordPress de WPMU DEV, que se encuentra en
sus archivos en /wp-content/plugins/forminator/) que cae dentro del rango afectado por un problema de seguridad conocido. Esta página explica cuál es el problema, cómo determinar si afecta siquiera a su
sitio, cómo leer su versión sin ser engañado y cómo actualizar.
Antes que nada, el hecho más importante sobre este aviso: una versión dentro del rango afectado no significa por sí misma que su sitio esté expuesto. El problema que se describe a continuación solo se aplica a sitios cuyos formularios incluyen un campo de carga de archivos, y no puedo ver cómo están construidos sus formularios desde el exterior:
- El problema solo afecta a un formulario de Forminator que contenga un campo de carga de archivos. Si ninguno de sus formularios permite a los visitantes subir archivos, esto no le afecta, incluso si tiene una versión afectada.
- Tenga en cuenta que lo que importa es la presencia de un campo de carga, no cómo está configurado. Restringir un campo a tipos específicos (por ejemplo, imágenes o PDFs) no soluciona este problema, porque la vulnerabilidad invalida esa restricción. Lo que le saca del rango es no tener ningún formulario con un campo de carga de archivos en absoluto.
Puedo leer la versión de su plugin desde un archivo público, pero no puedo leer sus formularios, por lo que este aviso es una advertencia preventiva más que un hallazgo confirmado sobre su sitio.
El problema es CVE-2026-15748, una vulnerabilidad de carga de archivos sin autenticación en el manejo de formularios del plugin. Afecta a las versiones 1.18.1 hasta 1.56.1 y está corregido en 1.56.2, lanzado el 30 de julio de 2026. Si está ejecutando una versión afectada, actualice Forminator Forms a 1.56.2 o posterior (la versión actual al momento de escribir esto está en la línea 1.57.x).
Una palabra sobre la urgencia, ya que este es un aviso condicional. Si ninguno de sus formularios tiene un campo de carga de archivos, la actualización es un mantenimiento ordinario del plugin. Si alguno de ellos lo tiene, por favor trate la actualización como una prioridad: en esa configuración, la vulnerabilidad podría permitir que un visitante sin ninguna cuenta guarde un archivo de su elección en su servidor, de un tipo que el servidor podría ejecutar, lo que puede llevar al control total del sitio.
Esta es una vulnerabilidad del plugin, no del núcleo de WordPress. Un WordPress completamente actualizado no le protege si el plugin Forminator en sí está en una versión afectada.
¿Es legítimo este mensaje?
Sí. Este es un aviso de divulgación responsable y de buena fe de un investigador de seguridad independiente. Yo no le pido dinero, contraseñas ni acceso a su sitio, y no he intentado infiltrarme, enviar ninguno de sus formularios ni subir nada a él.
Lo único que hice fue examinar archivos públicamente visibles que su sitio web sirve a todos los visitantes (del mismo modo que su página de inicio es pública) y anotar el número de versión que el plugin publica. Específicamente no envié ningún formulario, no subí ningún archivo y no me acerqué al manejador de cargas del plugin. Nada de esta comprobación toca sus datos, su área de administración ni ninguna parte privada de su sitio (más detalle en Qué hice y qué no hice más abajo).
Si desea verificar quién soy, consulte los datos de contacto al final de esta página y la página Acerca de.
Por qué importa
Forminator le permite crear formularios de contacto, cuestionarios, encuestas y formularios de pago, y algunos de esos formularios pueden ofrecer a los visitantes un campo de carga de archivos para que adjunten un documento o una imagen. Para mantener eso seguro, el plugin debería controlar qué archivos acepta y dónde los almacena.
En las versiones afectadas, esos controles podrían ser eludidos. Una solicitud de formulario elaborada podría introducir un valor de campo falsificado a través de la parte del plugin que guarda una entrada, y de ahí a la rutina de guardado de archivos, cuya lista de tipos de archivo prohibidos podría ser eludida con una solicitud especialmente diseñada. El resultado es que un archivo que el plugin debería haber rechazado podría escribirse en su directorio de subidas. Donde el servidor trata ese archivo como algo que puede ejecutar, un archivo de un desconocido se ejecuta en su sitio.
De eso se derivan dos cosas, que tiran en direcciones opuestas. La primera es que esto solo importa donde un formulario tiene realmente un campo de carga de archivos; un sitio cuyos formularios no recogen subidas no es alcanzable a través de este problema. La segunda es que donde tal campo sí existe, no se requiere ninguna cuenta, ninguna contraseña ni ninguna cooperación de nadie: el formulario está abierto al público por diseño. Y aquí está la parte más propensa a ser malinterpretada: restringir ese campo a «solo imágenes» o «solo PDFs» no le salva, porque la vulnerabilidad invalida la comprobación de tipo del propio campo. La pregunta es simplemente si existe un campo de carga de archivos en alguno de sus formularios.
Estoy describiendo esto al nivel que necesita un propietario de sitio para actuar, y no más. No estoy publicando los detalles que permitirían a alguien reproducirlo, y le pediría que no intente hacerlo contra su propio sitio o el de nadie más. Comprobar sus formularios y su versión, como se describe a continuación, le dice todo lo que necesita para decidir qué hacer.
Si mi correo electrónico citó este problema, significa que la versión que informa su sitio cae dentro del rango afectado. No probé si su sitio en particular es explotable, y no puedo ver cómo están construidos sus formularios. Lo único que observé fue la versión.
¿Estoy afectado?
Dos preguntas lo deciden, en este orden.
Primero: ¿tiene algún formulario un campo de carga de archivos?
Esta es la pregunta decisiva, y solo usted puede responderla. Comprobar sus propios formularios es completamente seguro y es precisamente el objetivo de esta página.
- Inicie sesión en su escritorio de WordPress y abra Forminator en la barra lateral, luego Formularios.
- Abra cada formulario y busque un campo Carga (el tipo de campo de carga de archivos de Forminator).
- Si ninguno de sus formularios tiene un campo de carga, este problema no afecta a su sitio, incluso en una versión afectada, aunque actualizar sigue siendo recomendable como mantenimiento ordinario.
- Si algún formulario tiene un campo de carga, el problema le afecta y debería actualizar rápidamente. Restringir el campo a los tipos de archivo que realmente necesita es una buena práctica, pero no es una solución para este problema: la actualización es la solución.
Por favor, no intente reproducir el problema contra su propio sitio o el de nadie más; no necesita hacerlo para responder la pregunta anterior.
Segundo: ¿qué versión está ejecutando?
No tiene que tomar mi palabra. Para este plugin hay un par de formas de comprobarlo que pueden engañarle, por lo que vale la pena leer esta parte con atención.
Desde el área de administración de WordPress (fuente autorizada):
- En su escritorio de WordPress, vaya a Plugins y luego a Plugins instalados.
- Encuentre Forminator Forms, la entrada cuya carpeta es
forminator, y anote la versión que se muestra debajo de su nombre.
Desde el código fuente de su página (no se necesita inicio de sesión): vea el código fuente de una página en su sitio que muestre un formulario de Forminator, y busque uno de los activos front-end del plugin en exactamente estas rutas:
/wp-content/plugins/forminator/build/front/front.multi.min.js?ver=...
/wp-content/plugins/forminator/assets/forminator-ui/js/forminator-form.min.js?ver=...
/wp-content/plugins/forminator/assets/forminator-ui/css/forminator-icons.min.css?ver=...
El número ?ver= adjunto a esos archivos bajo la carpeta forminator es la versión propia del plugin. Para este plugin sigue el lanzamiento, por lo que lo trato como una lectura fiable.
Tenga en cuenta que los activos solo aparecen en una página que realmente renderiza un formulario de Forminator, así que compruebe una página
que tenga uno (una página de inicio vacía sin ningún formulario a menudo no muestra nada).
Dos trampas a evitar aquí. Ambas hacen que una lectura ingenua informe una versión que no tiene nada que ver con Forminator:
- La biblioteca de números de teléfono integrada. Forminator incluye una copia de una biblioteca de terceros llamada
intlTelInput, que lleva su propio número de versión,
4.0.3. Dependiendo de su versión, se encuentra en el archivoassets/css/intlTelInput.min.cssoassets/js/library/intlTelInput.min.js, ambos dentro de la carpeta de Forminator. Si lee un?ver=4.0.3en uno de esos, esa es la versión de la biblioteca, no la de Forminator. Forminator nunca ha tenido una versión 4.x. Lea solo los archivos listados arriba y trate cualquier versión que no comience con1.como «no la versión de Forminator». - La hoja de estilos por formulario bajo su carpeta de subidas. Forminator escribe una pequeña hoja de estilos para
cada formulario publicado en una ruta como
/wp-content/uploads/forminator/<algo>/style-<número>.css?ver=<un número largo de 10 dígitos>. Ese número largo es una marca de tiempo, no una versión. Se encuentra bajowp-content/uploads/, no bajo la carpeta del plugin, así que ignórela por completo.
Una nota más específica para este plugin: en su readme.txt integrado, la línea Stable tag: no
es fiable aquí, ya que puede retrasarse respecto al lanzamiento real (tanto la compilación 1.56.1 como la 1.56.2 informan 1.56.0),
así que, a diferencia de algunos plugins, ese archivo no le dirá cuál de los dos tiene. La pantalla de administración
y el ?ver= de los activos anteriores son las lecturas en las que confiar.
Luego aplique esta regla, teniendo en cuenta que las versiones se comparan numéricamente, no alfabéticamente:
- 1.18.1 hasta 1.56.1: potencialmente afectado, sujeto a la pregunta del campo de carga anterior. Actualice ahora.
- 1.56.2 o posterior: ya corregido en lo que respecta a este problema. Tomar la versión más reciente disponible (la línea 1.57.x al momento de escribir esto) es la mejor opción.
- Anterior a 1.18.1: no afectado por este problema. La debilidad específica descrita anteriormente se introdujo en 1.18.1. Dicho esto, un lanzamiento tan antiguo está muy atrasado en todo lo demás, y actualizar es recomendable por motivos generales.
Si no puede obtener una versión legible de las comprobaciones anteriores, eso no es inusual: los plugins de caché o
optimización suelen eliminar el valor ?ver=, y los activos solo aparecen donde se renderiza un formulario. La pantalla de administración en la primera comprobación siempre tiene la respuesta.
Cómo actualizar
El plugin es gratuito, sigue publicado y se mantiene activamente, por lo que la corrección es una actualización normal. La vía más segura es actualizar a través del propio WordPress y, antes de hacerlo, realizar una copia de seguridad:
- Realice una copia de seguridad de su sitio (archivos y base de datos) antes de realizar cambios. La mayoría de los proveedores de alojamiento ofrecen copias de seguridad con un solo clic, o puede utilizar un plugin de copia de seguridad de WordPress.
- En la administración de WordPress, vaya a Escritorio y luego a Actualizaciones, o a Plugins y luego a Plugins instalados. Si aparece una actualización de Forminator, instálela desde aquí.
- Si prefiere la línea de comandos, WP-CLI hace lo mismo:
wp plugin update forminator(el comando utiliza el nombre de la carpeta). - Si no aparece ninguna actualización, puede obtener la última versión directamente desde la página del plugin en el directorio de WordPress.org, Forminator Forms, y actualizar mediante Plugins, luego Añadir nuevo plugin, y finalmente Subir plugin.
- Después de actualizar, confirme el nuevo número de versión (1.56.2 o posterior) utilizando los pasos anteriores y compruebe que sus formularios y cualquier carga de archivos en ellos siguen funcionando con normalidad.
Mientras está allí, vale la pena confirmar que WordPress core y sus otros plugins están actualizados, ya que el mismo principio se aplica a todos ellos.
Después de actualizar
La actualización a la versión 1.56.2 o posterior cierra el problema y, para la mayoría de los sitios, esa es toda la tarea. Esta página es un aviso preventivo, no un informe de incidente: no tengo visibilidad sobre si ocurrió algo en su sitio, y no lo he revisado.
Vale la pena considerar un seguimiento, y es condicional a la misma pregunta sobre el campo de carga de archivos. Si su sitio tenía un formulario con un campo de carga de archivos mientras ejecutaba una versión afectada, entonces era al menos teóricamente posible que se hubiera colocado un archivo en su servidor. La actualización cierra la vulnerabilidad, pero no elimina nada que ya se haya guardado, por lo que en ese caso son sensatas algunas precauciones rutinarias:
- Revise su directorio de subidas (típicamente bajo
wp-content/uploads/, incluyendo el subárbolwp-content/uploads/forminator/) en busca de archivos que no reconozca, especialmente aquellos que no sean del tipo de documentos o imágenes que sus formularios están diseñados para recibir. - Revise sus cuentas de administrador, inicios de sesión recientes y cualquier sesión activa en busca de cualquier actividad que no pueda explicar.
- Restablezca las contraseñas de sus cuentas de administrador. Regenerar las claves secretas y sales de WordPress
en
wp-config.phpes un paso complementario sensato (los nuevos valores están a un clic de distancia en el generador oficial de claves secretas, y cambiarlas cierra la sesión de todos los usuarios una vez).
Si encuentra algo que le preocupa, tratarlo como cualquier otro acceso no autorizado sospechoso es la respuesta adecuada. Si ninguno de sus formularios tenía un campo de carga de archivos, la actualización por sí sola es suficiente.
Qué hice y qué no hice
Para ser completamente transparente sobre la comprobación detrás de mi correo electrónico: solo leí archivos que su sitio ya
sirve a cada visitante, específicamente el readme.txt público del plugin, su página de inicio y las
direcciones de los recursos escritos en esa página. No accedí a su área de administración de WordPress, a su
base de datos, ni a ninguna parte privada del sitio.
En particular, yo nunca envié ninguno de sus formularios, nunca subí un archivo y nunca toqué el manejador de cargas del plugin. No se envió, probó ni explotó nada. Eso es más importante aquí que en la mayoría de estas páginas, porque subir un archivo es la acción exacta de la que trata este problema, por lo que «no lo toqué» es toda la diferencia entre una divulgación y una intrusión.
Tampoco publico deliberadamente los detalles que ayudarían a alguien a aprovechar este problema. La descripción anterior se detiene en el nivel que necesita un propietario de sitio, y no enlazo ningún código de prueba de concepto.
Esta es una observación basada en la versión: su sitio informa una versión en el rango afectado. No es una afirmación de que su sitio fuera explotable en el momento en que lo verifiqué. Dado que el problema depende de si alguno de sus formularios tiene un campo de carga de archivos, lo cual no puedo ver, un sitio en ese rango bien podría no estar expuesto en absoluto, y un sitio en ese rango podría estar protegido por otros medios, como un firewall de aplicaciones web.
No tengo webmaster / estoy atascado
Si usted no es la persona que mantiene el sitio, por favor reenvíe esta página a quien lo haga (su desarrollador web, agencia o proveedor de alojamiento). Reconocerán rápidamente los pasos anteriores.
Si usted está manteniendo el sitio usted mismo y se queda atascado, estoy encantado de ayudarle a orientarse en la dirección correcta sin costo alguno. Póngase en contacto utilizando los datos de contacto que aparecen a continuación.
Contacto
Evan Harris, investigador de seguridad
- Correo: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Me pongo en contacto sobre problemas como este puramente para ayudar a los operadores a asegurar sus sitios. Si prefiere no ser contactado de nuevo, simplemente hágamelo saber y lo respetaré.
Referencias
Avisos oficiales y seguimiento
Fabricante / plugin