WordPress 插件模块任意目录遍历漏洞补丁

2016年10月22日 2683点热度 0人点赞 2条评论

一直以来都使用阿里云ECS,个人觉得很稳定,安防方面也比一般的做得好。因此,非常推荐大家使用。如果想要使用阿里云ECS的朋友,可以使用我们提供的推荐码:GO3K0C 可享九折优惠

在此之前,收到阿里云云盾关于WordPress后台插件更新模块任意目录遍历漏洞的消息,原以为可以使用阿里云提供的补丁修复,但是,基础版云盾是不提供修复补丁,只有升级云盾的安骑士才能够使用自动修复。于是,只好自己寻求解决方法。

漏洞描述

wordpress后台文件/wp-admin/includes/ajax-actions.php中,对代码插件路径的输入参数plugin未进行正确的规范化转义,导致黑客可传入特殊路径,造成拒绝服务。【注意:该补丁为云盾自研代码修复方案,云盾会根据您当前代码是否符合云盾自研的修复模式进行检测,如果您自行采取了底层/框架统一修复、或者使用了其他的修复方案,可能会导致您虽然已经修复了改漏洞,云盾依然报告存在漏洞,遇到该情况可选择忽略该漏洞提示】

修复方法步骤:

1、如果是WordPress 4.5.4版本:

在文件/wp-admin/includes/ajax-actions.php的3068行附近:
$plugin = urldecode( $_POST['plugin'] );  
在这行代码后面加上:
$plugin = plugin_basename( sanitize_text_field( wp_unslash( $_POST['plugin'] ) ) ); 
2、如果是WordPress 4.5.4之前版本
在文件/wp-admin/includes/ajax-actions.php中,找到以下代码:


if ( $plugin_update_data === true ) {   
    wp_send_json_error( $status );   
} 

修改为:


if ( $plugin_update_data === true ) {   
$status['error'] = __( 'Plugin update failed.' );   
wp_send_json_error( $status );   
} 

再找到以下内容:


if ( is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {   
  $status['error'] = $wp_filesystem->errors->get_error_message();   
    }   
wp_send_json_error( $status );   
 }   
} 

修改为:


if ( is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {   
     $status['error'] = $wp_filesystem->errors->get_error_message();   
   }   
wp_send_json_error( $status );   
} else {   
// An unhandled error occured   
$status['error'] = __( 'Plugin update failed.' );   
wp_send_json_error( $status );   
}   
} 

到此,这个漏洞被成功修复。

WordPress补丁

注意事项

WordPress 版本不同,需要修改的代码不完全相同,可能只需要改其中一处,或者需要改三处。因此,建议对比修改内容进行修复。或者升级到最新版本 WordPress 4.6.1。

WPTalk

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论