Vulnerabilidad en el plugin Custom Contact Forms

En Webmasters por

Esta vulnerabilidad fue publicada el día 7 de Agosto de 2014 y aunque ya llegamos un poco tarde para anunciarla, si es necesario pararse a analizar la vulnerabilidad en el plugin Custom Contact Forms para no cometer los mismos errores. La versión 5.1.0.3 de Custom Contact Forms es vulnerable y el problema se ha corregido con la actualización 5.1.0.4, por lo que sino has actualizado, hazlo inmediatamente.

Vulnerabilidad en el plugin Custom Contact Forms

Muchos de los blogs que usan este plugin son blogs antiguos y bastante descuidados, ya que en la actualidad existen otros plugins más completos y con una mejor funcionalidad. Desde Vozidea recomendamos el uso de un plugin gratuito como puede ser Contact Form 7.

Otro aspecto importante a la hora de elegir los plugins en el repositorio de WordPress.org es comprobar que el equipo de desarrollo del plugin es activo. En el caso de Custom Contact Forms, los desarrolladores no respondieron a la petición para solucionar la vulnerabilidad hasta que intervino el propio equipo de seguridad de WordPress. Teniendo en cuenta que este plugin tiene más de 600.000 descargas, no tener un equipo de desarrollo activo puede poner en peligro la seguridad de muchas páginas web.

Análisis de la vulnerabilidad en el plugin Custom Contact Forms

La vulnerabilidad encontrada en Custom Contact Forms permite a un usuario malintencionado descargar y modificar la base de datos de forma remota y no es necesario que el atacante disponga de algún tipo de permisos o autorización.

En la auditoría de código el problema comienza en el uso de la función is_admin() que fue precisamente donde se encontró la vulnerabilidad en el plugin MailPoet.

El problema reside en que cuando se hace una llamada a esta función, se crea una instancia de la clase CustomContactFormsAdmin(). Después se hace una llamada a la función adminInit() en la que podemos encontrar código con las dos siguientes funciones:

  • downloadExportFile(): función que crea un backup SQL de los parámetros del plugin.
  • runImport(): función que importa un backup SQL de los parámetros del plugin.

Atendiendo a las funciones anteriores, un usuario malintencionado puede descargarse un backup de los parámetros del plugin para después modificarlo con código SQL, que por ejemplo agregue un nuevo usuario con permisos de administrador y por último restaurar este backup modificado y ganar acceso de administrador a nuestro blog.

Como vemos es una vulnerabilidad crítica y de nuevo el agujero de seguridad está en un plugin para WordPress.