Persistent Cross-Site Scripting (XSS) en Advanced Custom Fields de WordPress

Información Importante Sobre el Contenido

Estas accediendo al contenido antiguo del blog. Este artículo "Persistent Cross-Site Scripting (XSS) en Advanced Custom Fields de Wordpress" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.

acf_wp

Advanced Custom Fields es un plugin para WordPress para manejar campos personalizados. De acuerdo a la información entregada por WordPress, se encuentra instalado y activo en más de 1 millón de sitios, su última actualización fue el 17 de Septiembre de 2015 y se encuentra en la versión 4.4.3, por lo tanto se trata de un plugin activo y utilizado.

Durante una revisión de código me di cuenta que no realiza validaciones a los parametros de entrada que recibe mediante POST/GET, por lo tanto busqué justo una línea donde obtenga datos mediante algun formulario e intenté explotarla. El resultado fue un Cross-Site Scripting Persistente.
Para poder explotar esta vulnerabilidad es necesario que tengamos acceso al wordpress con privilegios limitados y podremos elevar privilegios atacando una sesión de administrador.

Para la prueba de concepto usé dos usuarios: admin y zerial. El primero tiene permisos de administrador y el segundo editor. Basicamente, el usuario zerial crea o edita un custom field con el código malicioso y el usuario administrador, el ingresar a un post o bien al ingresar a los custom fields, se ve afectado por el código incrustado por el usuario editor.

Cuando ingresamos como adminsitrador, podemos ver en el menú izquierdo la sección de los Custom Fields, sin embargo, cuando ingresamos como usuario editor el menú no aparece.


wpcustom01wpcustom02
Para poder ingresar a la administración de los Custom Fields como usuario editor, debemos acceder directamente desde la URL https://sitioweb.com/wordpress/wp-admin/post.php?post=5&action=edit.

wpcustom03

Editaremos el campo “Hola” e inyectaremos un código html simple: Hola <em>FOOO</em>.

wpcustom04

El siguiente paso es intentar incrustar un código javascript, a modo de ejemplo ejecutaremos la típica instrucción “alert()”. Como usuario editor generaremos un alert y veremos como se le ejecuta al adminsitrador.

wpcustom05

 

Ahora como usuario administrador, vamos a iniciar sesión y editar algun post.

wpcustom06

 

Es posible escalar privilegios solo como usuario editor, ya que para los otros perfiles wordpress valida correctamente el acceso a las funcionalidades del custom fields.

Última versión estable: 4.4.3
Versiones probadas: <= 4.4.3

Información Importante Sobre el Contenido

Estas accediendo al contenido antiguo del blog. Este artículo "Persistent Cross-Site Scripting (XSS) en Advanced Custom Fields de Wordpress" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.

2 comentarios

  1. The version you have tested is 4.3.3, not 4.4.3?

  2. Zerial

    octubre 5, 2015 a las 8:21 pm

    Hi “user”,

    I’ve tested latest version (4.4.3)

    https://wordpress.org/plugins/advanced-custom-fields/

    typo error 🙂

Los comentarios están cerrados.