Aviso de seguridad de ProfilePress
Si recibió un correo electrónico mío que le remite a esta página, es porque su sitio web parece estar ejecutando una versión de ProfilePress (el plugin de WordPress que todavía se distribuye bajo el nombre de carpeta wp-user-avatar, de ProperFraction) que cae dentro del rango afectado por un problema de seguridad conocido. Esta página explica en qué consiste el problema, cómo determinar si le afecta siquiera, y cómo actualizar.
Una nota sobre el nombre antes de nada, porque despista a la gente: este plugin nació como WP User Avatar y conservó ese slug al cambiar de marca, así que en sus archivos reside en /wp-content/plugins/wp-user-avatar/, mientras que la administración de WordPress lo lista bajo su nombre actual completo, “Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress”. WP User Avatar y ProfilePress son el mismo plugin. Esto es un plugin de WordPress de principio a fin.
Antes de nada, el dato más importante sobre este aviso: una versión dentro del rango afectado no significa por sí sola que su sitio esté expuesto. El problema descrito a continuación solo es explotable cuando ProfilePress publica un formulario de registro de cara al público que incluye un campo de selección de rol (el shortcode [reg-select-role], o el campo “reg-select-role” en el constructor de formularios de arrastrar y soltar), configurado de una manera concreta. Si su sitio no ofrece autorregistro público, o sus formularios de registro no permiten al visitante elegir un rol, es muy probable que no esté expuesto ni siquiera en una versión afectada. Puedo leer la versión de su plugin a partir de archivos públicos, pero no puedo ver sus formularios de registro, por lo que se trata de un aviso preventivo, no de un hallazgo confirmado sobre su sitio.
El problema es CVE-2026-12497, una escalada de privilegios no autenticada en el gestor de registro de cara al público del plugin (CWE-269, gestión indebida de privilegios). La autoridad que asignó el CVE no publicó una puntuación de gravedad, y no me la voy a inventar; lo que importa para juzgarlo es que no está autenticada pero está limitada a un rol que no es de administrador, y depende de la configuración de registro descrita arriba. Afecta a las versiones 3.0.0 hasta 4.16.17 y está corregido en 4.16.18. Si está ejecutando una versión afectada, actualice ProfilePress a 4.16.18 o posterior (la versión actual es 4.16.19). No hay indicios de que este problema se esté explotando en ningún sitio.
Una palabra sobre la urgencia, porque este es un aviso condicional: cuánto le importa depende casi por completo de si publica ese tipo de formulario de registro. Si no ofrece autorregistro público con un campo de selección de rol, actualizar es mantenimiento rutinario del plugin. Si lo hace, trate la actualización como una prioridad: en esa configuración, el fallo podría permitir a un visitante no autenticado registrarse con un rol superior al que ofrecía su formulario (por ejemplo Editor o Autor). Incluso entonces, esta página es un aviso preventivo, no un informe de incidente, y no implica ninguna respuesta de emergencia.
Este es un fallo de un plugin, no un fallo del núcleo de WordPress. Un WordPress totalmente actualizado no le protege si el propio plugin ProfilePress está en una versión afectada.
¿Es legítimo este mensaje?
Sí. Se trata de un aviso de buena fe, según el principio de la divulgación responsable, de un investigador de seguridad independiente. No le pido dinero, contraseñas ni acceso a su sitio, y no he intentado entrar en él, subir nada ni explotar nada.
Lo único que hice fue mirar archivos visibles públicamente que su sitio web ofrece a cada visitante (del mismo modo que su página de inicio es pública) y anotar el número de versión que el plugin publica en su archivo readme.txt público. En concreto, no toqué el sistema de registro, y nada en esta comprobación toca sus datos, su área de administración ni ninguna parte privada de su sitio (hay 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
ProfilePress es un plugin de membresía, registro de usuarios e inicio de sesión muy utilizado en WordPress (alrededor de 100 000 instalaciones activas). Entre otras cosas, permite a un sitio publicar formularios de registro de cara al público para que los visitantes creen sus propias cuentas, y esos formularios pueden incluir opcionalmente un campo que deja al visitante elegir qué rol debe tener su nueva cuenta.
En las versiones afectadas, el gestor de registro determina los roles que un formulario ofrece y los roles que aceptará usando dos fragmentos de código distintos. Para algunas configuraciones válidas del campo de rol, el código que calcula los roles aceptados no lee la lista de roles del formulario y recurre en silencio a aceptar cualquier rol editable (es decir, cualquier rol salvo administrador). Como además no hay ningún nonce que proteja el gestor de registro público, un visitante no autenticado puede enviar un rol de su elección y quedar registrado con un rol superior al que ofrecía el formulario, por ejemplo Editor o Autor en lugar del Suscriptor previsto.
Dos cosas mantienen esto en perspectiva. Primero, el impacto tiene un techo firme: el plugin excluye explícitamente el rol de administrador de lo que el registro puede asignar, así que se trata de un problema de escalada de privilegios limitado a un rol que no es de administrador, no de una toma de control del servidor, ni del administrador, ni de ejecución remota de código. Segundo, el punto de entrada es un formulario de registro publicado con un campo de selección de rol, así que el problema solo alcanza a los sitios configurados de ese modo; un sitio sin autorregistro público, o cuyos formularios no permiten a un visitante elegir un rol, es muy probable que no esté expuesto ni siquiera en una versión afectada. Y, para repetirlo con claridad, no hay indicios de explotación activa: no figura en el catálogo de vulnerabilidades explotadas conocidas de CISA, y no tengo constancia de informes de explotación.
Si mi correo citaba este problema, significa que la versión que informa su sitio cae dentro del rango afectado. No he probado si su sitio concreto es explotable, y no puedo ver cómo están configurados sus formularios de registro; lo único que observé es que el sitio informa de una versión afectada.
¿Estoy afectado?
Dos preguntas lo deciden, en este orden.
Primero: ¿publica un formulario de registro de ProfilePress que deja a un visitante elegir un rol? Esta es la pregunta decisiva, y solo usted puede responderla.
- Si su sitio no ofrece autorregistro público, o sus formularios de registro no incluyen un campo de selección de rol (el shortcode
[reg-select-role]o el campo “reg-select-role” en el constructor de formularios), es muy probable que no esté expuesto, ni siquiera en una versión afectada. Aun así se recomienda actualizar, como mantenimiento ordinario. - Si su sitio sí publica un formulario de registro de cara al público con un campo de selección de rol, el problema le afecta, y debería actualizar sin demora.
- Para comprobarlo: en la administración de WordPress, revise sus formularios de registro de ProfilePress en busca de un campo de rol, o abra una de sus páginas de registro en una ventana de navegación privada y vea si a un visitante que no ha iniciado sesión se le ofrece elegir el rol de la cuenta.
Segundo: ¿qué versión está ejecutando? No tiene que creer en mi palabra, y en este plugin la versión se informa de forma fiable.
Desde el área de administración de WordPress (autoritativo):
- Inicie sesión en su panel de WordPress (normalmente en
yourdomain.com/wp-admin). - Vaya a Plugins luego Plugins instalados.
- Busque la entrada listada como “Paid Membership Plugin … ProfilePress” (su carpeta es
wp-user-avatar) y anote la versión que se muestra bajo su nombre. Esta es la versión realmente instalada.
Desde el manifiesto público (sin necesidad de iniciar sesión): abra yourdomain.com/wp-content/plugins/wp-user-avatar/readme.txt en un navegador. La línea Stable tag: cerca de la parte superior es la versión que informa su instalación, y este es el mismo archivo público que leí.
Un pequeño aviso si es de esas personas que leen los números de versión en las URL de los recursos: juzgue la versión por el valor ?ver= del propio frontend.min.js o frontend.min.css del plugin, que es la versión de ProfilePress. No la lea del select2/select2.min.css incluido, cuyo ?ver= (por ejemplo 7.0.2) es la versión propia de la biblioteca select2 y no tiene nada que ver con la versión del plugin.
Después aplique esta regla, y tenga en cuenta que las versiones se comparan de forma numérica, no alfabética:
- 3.0.0 hasta 4.16.17: potencialmente afectada (sujeta a la cuestión del formulario de registro de más arriba), actualice ahora.
- 4.16.18 o más reciente: ya corregida. Esto incluye la versión actual 4.16.19.
- Anterior a 3.0: no afectada por este problema. El gestor de registro vulnerable apareció por primera vez con el cambio de marca a ProfilePress 3.0; la anterior línea “WP User Avatar” 1.x y 2.x, dedicada solo a los avatares, no tenía función de registro y no lo arrastra. (En la práctica, prácticamente toda instalación actual es una versión 4.16.x.)
Cómo actualizar
La vía más segura es actualizar a través del propio WordPress, y hacer antes una copia de seguridad:
- Haga 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 use un plugin de copia de seguridad de WordPress.
- En la administración de WordPress, vaya a Escritorio luego Actualizaciones, o Plugins luego Plugins instalados. Si aparece una actualización de ProfilePress, instálela desde aquí.
- Si prefiere la línea de comandos, WP-CLI hace lo mismo:
wp plugin update wp-user-avatar(el comando usa el nombre de la carpeta,wp-user-avatar). - 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, ProfilePress, y actualizar mediante Plugins luego Añadir nuevo plugin luego Subir plugin.
- Después de actualizar, confirme el nuevo número de versión (4.16.18 o posterior; la versión actual es 4.16.19) con los pasos anteriores, y compruebe que sus páginas de registro e inicio de sesión funcionan con normalidad.
Ya que está en ello, conviene confirmar que el núcleo de WordPress y sus demás plugins están actualizados, ya que el mismo principio se aplica a todos ellos.
Después de actualizar
Actualizar a 4.16.18 o posterior cierra el problema, y para la mayoría de los sitios esa es toda la tarea. No hay indicios de que este fallo se haya explotado en ningún sitio, así que no se requiere una respuesta de emergencia: no necesita tratar su sitio como comprometido ni ponerlo fuera de línea.
Merece la pena plantearse un seguimiento, y está condicionado a la misma cuestión del registro. Si su sitio publicaba un formulario de registro de ProfilePress con un campo de selección de rol mientras estaba en una versión afectada, entonces era al menos teóricamente posible que un visitante se hubiera registrado con un rol superior al previsto, aunque no hay pruebas de que nadie lo hiciera. En ese caso, es sensata una única precaución rutinaria:
- Eche un vistazo a sus registros de usuarios recientes en busca de cualquier cuenta creada con un rol inesperadamente alto (por ejemplo un Editor o Autor que no reconozca), del modo habitual en que revisaría la actividad del sitio, y ajuste o elimine cualquier cosa que parezca fuera de lugar.
Trate esto como el mantenimiento de seguridad ordinario, no como una respuesta a incidentes. Si no ofrece autorregistro público con un campo de selección de rol, actualizar por sí solo es suficiente.
Qué hice y qué no hice
Para ser totalmente transparente sobre la comprobación que hay detrás de mi correo: solo leí archivos públicos que su sitio ya ofrece a cada visitante, en concreto el archivo readme.txt público del plugin y su página de inicio. No accedí a su área de administración de WordPress, a su base de datos ni a ninguna parte privada del sitio. En particular, no toqué la ruta de registro vulnerable, y no probé ni exploté nada.
Se trata de una observación basada en la versión: su sitio informa de una versión dentro del rango afectado. Como este problema depende de la configuración, un sitio en ese rango puede no estar expuesto en absoluto (si no ofrece autorregistro público, o sus formularios no llevan un campo de selección de rol), y también puede estar ya mitigado por otros medios, como un cortafuegos de aplicaciones web. Este aviso no es una afirmación de que su sitio fuera explotable en el momento en que lo comprobé.
No tengo webmaster / estoy atascado
Si usted no es la persona que mantiene el sitio, reenvíe esta página a quien lo haga (su desarrollador web, agencia o proveedor de alojamiento). Reconocerán los pasos anteriores con rapidez.
Si mantiene el sitio usted mismo y se atasca, con gusto le ayudo a orientarse en la dirección correcta sin coste alguno. Póngase en contacto usando los datos de abajo.
Contacto
Evan Harris, investigador de seguridad
- Correo electrónico: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Me pongo en contacto por problemas como este únicamente para ayudar a los operadores a asegurar sus sitios. Si prefiere que no se le vuelva a contactar, simplemente dígamelo y lo respetaré.
Referencias
Avisos oficiales y seguimiento
Proveedor / plugin