Vulnerabilidad XSS persistente en un plugin de Wordpress para usar Google Analytics

Google Analytics por Yoast es un plug-in para monitorizar el tráfico en  WordPress con Google Analytics. Con aproximadamente siete millones de descargas es uno de las más populares.

Una vulnerabilidad XSS persistente en el plug-in permite a un atacante no autenticado almacenar HTML arbitrario, incluyendo JavaScript en el Dashboard del administrador de WordPress. El JavaScript se ejecutará cuando un administrador visite el panel de configuración del plug-in. No se requiere ninguna intervención del usuario.

Según la configuración predeterminada de WordPress, un usuario malintencionado puede aprovecharse de este problema para ejecutar código arbitrario PHP en el servidor a través de los plugins o editores de temas. Alternativamente, el atacante podría cambiar la contraseña del administrador, crear nuevas cuentas de administrador, o hacer cualquier otra cosa que el administrador actualmente registrado pueda hacer.

El error fue encontrado por el finlandés Klikki Oy a finales de febrero, aunque no se vio el impacto real hasta una investigación más detallada en marzo.


Digamos que la vulnerabilidad es una combinación de dos problemas subyacentes. En primer lugar, la falta de control de acceso permite a un usuario no autenticado modificar algunos de los parámetros asociados con el plug-in. Es posible sobrescribir las credenciales OAuth2 existentes que utiliza el plug-in para recuperar datos de Google Analytics, y de este modo conectar el plug-in con la propia cuenta de Google Analytics del atacante.

En segundo lugar, el plug-in renderiza un menú desplegable HTML basado en los datos descargados desde Google Analytics. Estos datos no son saneados o escapados por HTML. Si el atacante pone código HTML como <script> en las propiedades de configuración de su cuenta de Google Analytics, este aparecerá en el Dashboard del WordPress objetivo y se ejecutará cada vez que alguien vea la configuración.

Por ejemplo el siguiente fragmento de HTML podría ser utilizado para secuestrar la cuenta de Google Analytics de un sitio web que ejecuta una versión vulnerable del plug-in:

<a href="http://YOUR.BLOG/wp-admin/admin-post.php?reauth=1">reauth</a>
<br><br>
<form method=POST action="http://YOUR.BLOG/wp-admin/admin-post.php">
<input type=text size=100 name="google_auth_code">
<input type=submit>
</form>

Primero el atacante hará clic en el enlace reauth. La acción no requiere ningún tipo de autenticación. Reseteará algunas de las configuraciones del plugin y redireccionará al atacante a un diálogo OAuth de google.com, donde conseguirá un código de autenticación.

A continuación, el atacante tendrá que copiar y pegar el código en el formulario de arriba y publicarlo. Esto actualizará el código en la configuración del plugin - de nuevo sin necesidad de autenticación. El plugin recuperará ahora los datos de la cuenta de Google Analytics del atacante.

El payload real del script sería puesto en el Google Analytics propio del atacante en https://www.google.com/analytics/web/?hl=en#management/Settings/

Un ejemplo de un nombre de propiedad:

   test"><script>alert('stored XSS')</script>

Esto dispararía un cuadro de alerta cada vez que un administrador vea la página de configuración de Google Analytics en el dashboard del sitio de WordPress objetivo.

Un ataque en el mundo real probablemente utilizará un atributo src para cargar un script más sofisticado de un sitio externo. Podría encadenar llamadas ajax para cargar y enviar formularios administrativos, incluyendo los del editor del plugin para escribir código PHP del lado del servidor, y finalmente ejecutarlo.

La solución: Ya hay una actualización disponible de corregir el problema: la 5.3.3.

Fuentes:
- Google Analytics by Yoast stored XSS
- GA plugin security update & more (aviso Yoast)
- YouTube demo

Comentarios