WordPress <= 4.9.6 任意文件删除漏洞(尚未修复)

  • A+
所属分类:网络安全文章

Wordpress <= 4.9.6 任意文件删除漏洞(尚未修复)

WordPress是如今使用最为广泛的一套内容管理系统。根据 w3tech 统计,全世界大概有30%的网站运行着WordPress程序。

昨日RIPS团队公开了一个Wordpress的任意文件删除漏洞(需要登录),目前该漏洞仍然未修复(2018年06月28日),该漏洞影响 WordPress 最新版 4.9.6.

漏洞分析

文件wp-includes/post.php中:

  1. function wp_delete_attachment( $post_id$force_delete = false ) {
  2.     ...
  3.     $meta = wp_get_attachment_metadata( $post_id );
  4.     ...
  5.     if ( ! emptyempty($meta['thumb']) ) {
  6.         // Don't delete the thumb if another attachment uses it.
  7.         if (! $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE %s AND post_id <> %d", '%' . $wpdb->esc_like( $meta['thumb'] ) . '%', $post_id)) ) {
  8.             $thumbfile = str_replace(basename($file), $meta['thumb'], $file);
  9.             /** This filter is documented in wp-includes/functions.php */
  10.             $thumbfile = apply_filters( 'wp_delete_file', $thumbfile );
  11.             @ unlink( path_join($uploadpath['basedir'], $thumbfile) );
  12.         }
  13.     }
  14.     ...
  15. }

$meta['thumb']来自与数据库,是图片的属性之一。代码未检查$meta['thumb']的内容,直接带入unlink函数,如果$meta['thumb']可控则可导致文件删除。
文件/wp-admin/post.php中:

  1. ...
  2. switch($action) {
  3. ...
  4.     case 'editattachment':
  5.         check_admin_referer('update-post_' . $post_id);
  6.         ...
  7.         // Update the thumbnail filename
  8.         $newmeta = wp_get_attachment_metadata( $post_id, true );
  9.         $newmeta['thumb'] = $_POST['thumb'];
  10.         wp_update_attachment_metadata( $post_id$newmeta );
  11. ...

$newmeta['thumb']来自于$_POST[‘thumb’],未经过滤直接将其存入数据库,即上一步的$meta['thumb']可控。

CE安全网耗时82分钟已完成修复,累死小编了~

CE安全网

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: