【wordpress 漏洞修复代码】终于搞清楚之前博客的问题了

【wordpress 漏洞修复代码】终于搞清楚之前博客的问题了

今天wordpress强制更新了!更新了一个小版本,从4.96更新到了4.97版本,主要是修复一些BUG,其中有一条引起来我的注意!

 

《【wordpress 漏洞修复代码】终于搞清楚之前博客的问题了》

WordPress versions 4.9.6 and earlier are affected by a file deletion issue where a user with the capability to edit and delete media files could potentially manipulate media metadata to attempt to delete files outside the uploads directory.

大概的意思就是WordPress版本4.9.6及更早版本受文件删除问题的影响,其中具有编辑和删除媒体文件功能的用户可能会操纵媒体数据以尝试删除上载目录之外的文件。

原来如此,在本博客BUG那天,有一个哥们在我的博客注册了,9点就G了,无奈了!《【wordpress 漏洞修复代码】终于搞清楚之前博客的问题了》

就是记录下,也提醒各位博主赶紧升级到最新版本!或者修复下漏洞一下是修复漏洞的方法!最新版本就不用看了!以下代码来自于【老D博客】

该漏洞出现的原因是由于在WordPress的wp-includes/post.php文件中wp_delete_attachement()函数在接收删除文件参数时未进行安全处理,直接进行执行导致。

  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. switch($action) {
  2.     case ‘editattachment’:
  3.         check_admin_referer(‘update-post_’ . $post_id);
  4.         …
  5.         // Update the thumbnail filename
  6.         $newmeta = wp_get_attachment_metadata( $post_id, true );
  7.         $newmeta[‘thumb’] = $_POST[‘thumb’];
  8.         wp_update_attachment_metadata( $post_id$newmeta );

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

修复建议:
可将下面的代码加载到当前主题的function.php中进行弥补:

  1. add_filter( ‘wp_update_attachment_metadata’, ‘rips_unlink_tempfix’ );
  2. function rips_unlink_tempfix( $data ) {
  3.     if( isset($data[‘thumb’]) ) {
  4.         $data[‘thumb’] = basename($data[‘thumb’]);
  5.     }
  6.     return $data;
  7. }

 

点赞
  1. 猫鼬博客说道:

    还有这个坑?我没开放注册。。。

    1. 张晔璇说道:

      要不是中招了!我也不知道!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据