WordPress Activity Log 2.3.2 Cross Site Scripting
Posted on 06 August 2016
------------------------------------------------------------------------ Cross-Site Scripting vulnerability in search function Activity Log WordPress Plugin ------------------------------------------------------------------------ Edwin Molenaar, July 2016 ------------------------------------------------------------------------ Abstract ------------------------------------------------------------------------ A Cross-Site Scripting vulnerability was found in the Activity Log WordPress Plugin. This issue allows an attacker to perform a wide variety of actions, such as stealing users' session tokens, or performing arbitrary actions on their behalf. In order to exploit this issue, the attacker has to lure/force a victim into opening a malicious website/link. ------------------------------------------------------------------------ OVE ID ------------------------------------------------------------------------ OVE-20160718-0002 ------------------------------------------------------------------------ Tested versions ------------------------------------------------------------------------ This issue was successfully tested on Activity Log WordPress Plugin version 2.3.2. ------------------------------------------------------------------------ Fix ------------------------------------------------------------------------ This issue is fixed in Activity Log version 2.3.3 ------------------------------------------------------------------------ Details ------------------------------------------------------------------------ https://sumofpwn.nl/advisory/2016/cross_site_scripting_vulnerability_in_search_function_activity_log_wordpress_plugin.html The vulnerability exists in improper filtering of the search input parameter $search_data in the file aryo-activity-log/classes/class-aal-activity-log-list-table.php at line 483. The WordPress sanitize_text_field sanitizer is used, but this still allows us to use spaces, " and () to craft a Cross-Site Scripting payload. public function search_box( $text, $input_id ) { $search_data = isset( $_REQUEST['s'] ) ? sanitize_text_field( $_REQUEST['s'] ) : ''; $input_id = $input_id . '-search-input'; ?> <p class="search-box"> <label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label> <input type="search" id="<?php echo $input_id ?>" name="s" value="<?php echo $search_data; ?>" /> <?php submit_button( $text, 'button', false, false, array('id' => 'search-submit') ); ?> </p> When a search on the activity log is preformed, a CSRF token is added to the URL, however it is not checked. Consequently, it can be exploited by luring the target user into clicking a specially crafted link or visiting a malicious website (or advertisement). Proof of concept http://<target>/wp-admin/admin.php?page=activity_log_page&s=111"+onfocus=alert(document.domain)+"+autofocus="&paged=1 ------------------------------------------------------------------------ Summer of Pwnage (https://sumofpwn.nl) is a Dutch community project. Its goal is to contribute to the security of popular, widely used OSS projects in a fun and educational way.