CVE:CVE-2007-3543
CNNVD:CNNVD-200707-044
"WordPress是一款免费的论坛Blog系统。
WordPress处理用户提交的数据时存在漏洞，远程攻击者可能利用此漏洞非授权操作文件。
WordPress允许上传有限的文件附件组，其中名称、标题等以post_type=attachment存储到了wp_posts表中，而路径和其他文件属性以名为_wp_attached_file和_wp_attachment_metadata的特殊字段被存储到了wp_postmeta表中。
WordPress还允许在正常的张贴或页面中添加自定义字段，该自定义字段也被存储到了wp_postmeta表中，但没有检查正常的张贴中是否添加了附件的这个特殊的meta-data字段。
wp-app.php中的以下函数允许上传任意文件：
function put_file($postID) {
  $type = $this->get_accepted_content_type();
  // first check if user can upload
  if(!current_user_can('upload_files'))
    $this->auth_required(__('You do not have permission to upload files.'));
  // check for not found
  global $entry;
  $this->set_current_entry($postID);
  // then whether user can edit the specific post
  if(!current_user_can('edit_post', $postID)) {
    $this->auth_required(__('Sorry, you do not have the right to edit this post.'));
  }
  $location = get_post_meta($entry['ID'], '_wp_attached_file', true);
  if(!isset($location))
    $this->internal_error(__('Error ocurred while accessing post metadata for file location.'));
  $fp = fopen("php://input", "rb");
  $localfp = fopen($location, "w+");
  while(!feof($fp)) {
    fwrite($localfp,fread($fp, 4096));
  }
  fclose($fp);
  fclose($localfp);
  log_app('function',"put_file($postID)");
  $this->ok();
}
这个函数主要用于加载第一个附件的路径，并写入张贴到wp-app.php的内容，因此如果攻击者能够用合适的文件名覆盖第一个元数据附件的值，就会向该文件写入所有的内容。"
solution:Upgrade wordpress wordpress to a higher version than 2.2.0,and avoid the version (,2.2.0]; Upgrade wordpress wordpress_mu to a higher version than 1.2.2,and avoid the version (,1.2.2]