Vulnerabilidad de carga de archivos arbitrarios en el Plugin User Registration de WordPress

User Registration Plugin for WordPress
Fecha: 12 de julio de 2023

El 19 de junio de 2023, el equipo de Wordfence Threat Intelligence identificó y comenzó el proceso de divulgación responsable de una vulnerabilidad de carga arbitraria de archivos en el complemento de registro de usuarios de WPEverest , que está instalado activamente en más de 60 000 sitios web de WordPress. Esta vulnerabilidad hace posible que un atacante autenticado con permisos mínimos, como un suscriptor, cargue archivos arbitrarios, incluidos archivos PHP, y logre la ejecución remota de código en el servidor de un sitio vulnerable.

Los usuarios de Wordfence Premium ,  Wordfence Care y  Wordfence Response recibieron una regla de firewall para protegerse contra cualquier explotación que apunte a esta vulnerabilidad el 20 de junio de 2023. Los sitios que todavía usan la versión gratuita de Wordfence recibirán la misma protección el 20 de julio de 2023.

Nos comunicamos con WPEverest el 19 de junio de 2023 y recibimos una respuesta el mismo día. Después de que proporcionamos todos los detalles de divulgación, el desarrollador lanzó el primer parche, que no abordó completamente la vulnerabilidad, en la versión 3.0.2 el 29 de junio de 2023. Una versión completamente parcheada, 3.0.2.1, se lanzó el 4 de julio de 2023. Nos gustaría felicitar al equipo de desarrollo de WPEverest por su pronta respuesta y parche oportuno.

Instamos a los usuarios a que actualicen sus sitios con la última versión parcheada de Registro de usuario, que es la versión 3.0.2.1 en el momento de escribir este artículo, tan pronto como sea posible.

Resumen de vulnerabilidad

User Registration

Description: User Registration <= 3.0.2 – Authenticated (Subscriber+) Arbitrary File Upload
Affected Plugin: User Registration – Custom Registration Form, Login Form And User Profile For WordPress
Plugin Slug: user-registration
Affected Versions: <= 3.0.2
CVE ID: CVE-2023-3342
CVSS Score: 9.9 (Critical)
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Researcher/s: Lana Codes

Fully Patched Version: 3.0.2.1

El complemento de registro de usuario para WordPress es vulnerable a cargas de archivos arbitrarias debido a una clave de cifrado codificada y a la falta de validación del tipo de archivo en la función ‘ur_upload_profile_pic’ en versiones hasta la 3.0.2 inclusive. Esto hace posible que los atacantes autenticados con capacidades de nivel de suscriptor o superiores carguen archivos arbitrarios en el servidor del sitio afectado, lo que puede hacer posible la ejecución remota de código. Esto fue parcheado parcialmente en la versión 3.0.2 y completamente parcheado en la versión 3.0.2.1.

Análisis técnico

El complemento de registro de usuario proporciona un versátil generador de formularios de registro de arrastrar y soltar, con campos personalizados y opciones de personalización ilimitadas. También proporciona un formulario de inicio de sesión. Después de iniciar sesión, proporciona a los usuarios un perfil que permite varios tipos de personalización, incluida la carga de una imagen de perfil.

Examinar el código revela que el complemento utiliza dos funciones separadas para configurar la imagen de perfil. La primera función AJAX carga la imagen de perfil en una carpeta temporal y la segunda solicitud mueve el archivo y establece la imagen de perfil para el usuario.

La profile_pic_upload()función utiliza una solución genérica de carga de imágenes, que verifica la extensión del archivo y luego carga la imagen en la carpeta temporal. La parte interesante es que los datos del archivo subido están encriptados dentro de la respuesta AJAX:

Respuesta JSON después de cargar el archivo en la función profile_pic_upload()

Los datos cifrados upload_filesen la respuesta son algo como esto:

El cifrado se usa debido a la forma en que el complemento maneja las cargas porque los datos cifrados se descifran y se usan para determinar el nombre del archivo y la ruta del archivo donde se guarda el archivo para el usuario. Sin embargo, para cifrar y descifrar los datos, se requiere una clave de cifrado. Como regla general, las claves de cifrado deben ser confidenciales y únicas para cada sitio web.

Desafortunadamente, descubrimos que la clave de cifrado está codificada en versiones vulnerables del complemento en la crypt_the_string()función, lo que significa que los actores de amenazas también tenían acceso a la clave que no era única por instalación de WordPress. Esto hace posible que los atacantes creen una carga útil de matriz de datos de archivos cargados que se puede usar para modificar el nombre de archivo, la ruta y la extensión al guardar la imagen de perfil.

El complemento llama a la función ur_upload_profile_pic()al guardar el perfil, que contiene el siguiente código:

Cambie el nombre y mueva el archivo en la función ur_upload_profile_pic()

La función descifra los datos del archivo cifrado, que se especifica en la solicitud de guardado. Según estos datos, el archivo en la carpeta temporal se mueve y se renombra usando la rename()función php. Desafortunadamente, sin embargo, no hay verificación de tipo de archivo antes, lo que significa que el archivo de imagen se puede renombrar a un archivo con cualquier tipo de extensión, como .php, .phtml, .html y más.

¿Deseas proteger su sitio WordPress?

La seguridad en WordPress es muy importante porque si tu sitio web es hackeado, corres el riesgo de perder datos importantes, activos y credibilidad. Además, el incidente puede poner en peligro los datos personales y la información de contactos y/o facturación de tus clientes. Existen muchas formas de mejorar la seguridad en WordPress, como elegir un buen proveedor de alojamiento web, mantener actualizado el software y los plugins, utilizar contraseñas seguras y realizar copias de seguridad regularmente.

Contacta a nuestro equipo especializado en seguridad y monitoreo de aplicaciones:
Hablemos Escríbenos


Explotar posibilidades

Explotar la vulnerabilidad requiere varios pasos complejos, ya que se deben usar dos funciones y solicitudes separadas para cargar y mover el archivo:

  • Registrar un usuario
  • Inicie sesión como usuario (ya que solo es posible cargar una imagen de perfil para el usuario)
  • Cargue el archivo de imagen malicioso exploit.png
  • Recuperar los datos del archivo cifrado de la respuesta
  • Descifrar los datos del archivo
  • Modifique la extensión del archivo a php en el nombre del archivo
  • Cifrar los datos del archivo
  • Guarde el perfil con los datos del archivo cifrados y modificados

Dado que solo es posible cargar un archivo de imagen durante el proceso de carga, porque se verifica su extensión, el paso inicial consiste en cargar un archivo llamado, por ejemplo, exploit.png como imagen de perfil con la siguiente solicitud:

En este escenario, el atacante carga un archivo exploit.png, que en realidad es un script PHP, pero con una extensión .png:

La respuesta será una carga json que contenga el resultado cifrado devuelto por la profile_pic_upload()función. El parámetro ‘upload_files’ debe descifrarse con la clave codificada, que devolverá una matriz serializada, similar a esta:

Luego, el atacante cambiaría el nombre del archivo de exploit.png a exploit.php y volvería a cifrar la matriz. El resultado recién cifrado se puede usar al guardar el perfil en la siguiente solicitud:

El exploit cambia el nombre del archivo de imagen a php y lo mueve a la carpeta de imágenes de perfil.

El proceso completo de explotación se ve así:

Cortafuegos Wordfence

El siguiente gráfico muestra los pasos para la explotación que podría tomar un atacante y en qué punto el cortafuegos de Wordfence impediría que un atacante explotara con éxito la vulnerabilidad.

Cronograma de divulgación

19 de junio de 2023: descubrimiento de la vulnerabilidad de carga arbitraria de archivos en el registro de usuarios.
19 de junio de 2023: iniciamos contacto con el proveedor del complemento para pedirle que confirme la bandeja de entrada para manejar la discusión.
19 de junio de 2023: el proveedor confirma la bandeja de entrada para manejar la discusión.
19 de junio de 2023: enviamos los detalles de divulgación completos. El proveedor reconoce el informe y comienza a trabajar en una solución.
20 de junio de 2023: los usuarios de Wordfence Premium ,  Care y  Response reciben una regla de firewall para brindar protección contra cualquier explotación que pueda tener como objetivo esta vulnerabilidad.
29 de junio de 2023: Se lanza un parche parcial en la versión 3.0.2.
4 de julio de 2023: se lanza una versión completamente parcheada del complemento, 3.0.2.1.
20 de julio de 2023: los usuarios de Wordfence Free reciben la misma protección.

Conclusión

En esta publicación de blog, detallamos una vulnerabilidad de carga arbitraria de archivos dentro del complemento de registro de usuario que afecta a las versiones 3.0.2 y anteriores. Esta vulnerabilidad permite que los actores de amenazas autenticados con permisos de nivel de suscriptor o superiores carguen archivos arbitrarios, incluidas las puertas traseras de PHP, y ejecuten esos archivos en el servidor. La vulnerabilidad se ha solucionado por completo en la versión 3.0.2.1 del complemento.

Alentamos a los usuarios de WordPress a verificar que sus sitios estén actualizados a la última versión parcheada de Registro de usuario.


Ref: Interesting Arbitrary File Upload Vulnerability Patched in User Registration WordPress Plugin

Noticias Recientes

Copilot, el mayor cambio en la historia Windows

A lo largo de sus casi 40 años de vida, el sistema operativo Microsoft Windows ha cambiado mucho. Sin embargo, ninguna actualización alcanzó el impacto que puede tener Copilot. Quienes tuvieron la suerte de tener un ordenador personal en casa durante la década de 1990...