<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alex Concha &#187; stats</title>
	<atom:link href="http://alex.buayacorp.com/tag/stats/feed" rel="self" type="application/rss+xml" />
	<link>http://alex.buayacorp.com</link>
	<description>Blog focused on web security, computer science and work experiences</description>
	<lastBuildDate>Fri, 25 Sep 2009 22:21:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SQL Injection in WordPress.com Stats plugin</title>
		<link>http://alex.buayacorp.com/sql-injection-in-wordpresscom-stats-plugin.html</link>
		<comments>http://alex.buayacorp.com/sql-injection-in-wordpresscom-stats-plugin.html#comments</comments>
		<pubDate>Mon, 06 Aug 2007 15:09:16 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[security]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[automattic]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[stats]]></category>
		<category><![CDATA[wordpress.com]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://alex.buayacorp.com/sql-injection-in-wordpresscom-stats-plugin.html</guid>
		<description><![CDATA[Overview
WordPress.com Stats is a plugin developed by Automattic, it lets self-hosted WordPress bloggers use the same traffic metrics system they provide to WordPress.com users. It tracks post and page views, referrers, search terms, and clicks on external links.
While testing this plugin I found a critical SQL Injection vulnerability that may allow an attacker to retrieve [...]]]></description>
			<content:encoded><![CDATA[<h3>Overview</h3>
<p><a href="http://wordpress.org/extend/plugins/stats/">WordPress.com Stats</a> is a plugin developed by <a href="http://automattic.com/">Automattic</a>, it lets self-hosted <a href="http://www.buayacorp.com/archivos/novedades-de-wordpress-23/">WordPress</a> bloggers use the same traffic metrics system they provide to WordPress.com users. It tracks post and page views, referrers, search terms, and clicks on external links.</p>
<p>While testing this plugin I found a critical SQL Injection vulnerability that may allow an attacker to retrieve credentials from any user of a WordPress blog &#8212; the attacker only needs to know a valid user ID.</p>
<p><a href="http://andy.wordpress.com/2007/07/26/wordpresscom-stats-plugin-11/">WordPress.com Stats 1.1</a> and previous versions are affected.</p>
<h3>Technical Details</h3>
<p><a href="http://wordpress.org/extend/plugins/stats/">WordPress.com Stats</a> plugin registers two new methods (<code>wpStats.get_posts</code> and <code>wpStats.get_blog</code>) on the WordPress XMLRPC server. The vulnerable method is <code>wpStats.get_posts</code> that interally maps to <code>stats_get_posts</code>.</p>
<div class="hiliter"><strong>php:</strong><div class="php" style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">function</span> stats_get_posts<span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$args</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<a href="http://www.php.net/list"><span style="color: #000066;">list</span></a><span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$post_ids</span> <span style="color: #66cc66;">&#41;</span> = <span style="color: #0000ff;">$args</span>;<br />
<br />
<span style="color: #0000ff;">$r</span> = <span style="color: #ff0000;">'include='</span> . <a href="http://www.php.net/join"><span style="color: #000066;">join</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">','</span>, <span style="color: #0000ff;">$post_ids</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #0000ff;">$posts</span> = get_posts<span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$r</span> <span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #0000ff;">$_posts</span> = <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
<br />
<span style="color: #b1b100;">foreach</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$post_ids</span> <span style="color: #b1b100;">as</span> <span style="color: #0000ff;">$post_id</span> <span style="color: #66cc66;">&#41;</span><br />
<span style="color: #0000ff;">$_posts</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$post_id</span><span style="color: #66cc66;">&#93;</span> = stats_get_post<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$post_id</span><span style="color: #66cc66;">&#41;</span>;<br />
<br />
<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$_posts</span>;<br />
<span style="color: #66cc66;">&#125;</span></div></div>
<p>Due to the lack of validation in <code>stats_get_posts</code>, an attacker can prepare a special XMLRPC request to pass arbitrary parameters and values to <code>get_posts</code> method &#8212; it&#8217;s posible because get_posts can receive a query string as a parameter.</p>
<p><code>get_posts</code> accepts the following variables (defined in <code>$defaults</code> array).</p>
<div class="hiliter"><strong>php:</strong><div class="php" style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">function</span> get_posts<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$args</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<a href="http://www.php.net/global"><span style="color: #000066;">global</span></a> <span style="color: #0000ff;">$wpdb</span>;<br />
<br />
<span style="color: #0000ff;">$defaults</span> = <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><br />
<span style="color: #ff0000;">'numberposts'</span> =&gt; <span style="color: #cc66cc;">5</span>, <span style="color: #ff0000;">'offset'</span> =&gt; <span style="color: #cc66cc;">0</span>,<br />
<span style="color: #ff0000;">'category'</span> =&gt; <span style="color: #cc66cc;">0</span>, <span style="color: #ff0000;">'orderby'</span> =&gt; <span style="color: #ff0000;">'post_date'</span>,<br />
<span style="color: #ff0000;">'order'</span> =&gt; <span style="color: #ff0000;">'DESC'</span>, <span style="color: #ff0000;">'include'</span> =&gt; <span style="color: #ff0000;">''</span>,<br />
<span style="color: #ff0000;">'exclude'</span> =&gt; <span style="color: #ff0000;">''</span>, <span style="color: #ff0000;">'meta_key'</span> =&gt; <span style="color: #ff0000;">''</span>,<br />
<span style="color: #ff0000;">'meta_value'</span> =&gt;<span style="color: #ff0000;">''</span>, <span style="color: #ff0000;">'post_type'</span> =&gt; <span style="color: #ff0000;">'post'</span>,<br />
<span style="color: #ff0000;">'post_status'</span> =&gt; <span style="color: #ff0000;">'publish'</span>, <span style="color: #ff0000;">'post_parent'</span> =&gt; <span style="color: #cc66cc;">0</span><br />
<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #0000ff;">$r</span> = wp_parse_args<span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$args</span>, <span style="color: #0000ff;">$defaults</span> <span style="color: #66cc66;">&#41;</span>;<br />
<a href="http://www.php.net/extract"><span style="color: #000066;">extract</span></a><span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$r</span>, EXTR_SKIP <span style="color: #66cc66;">&#41;</span>;<br />
<br />
...<br />
<span style="color: #66cc66;">&#125;</span></div></div>
<p>An attacker can prepare a special XMLRPC call to exploit the vulnerability:</p>
<div class="hiliter"><strong>code:</strong><div class="code" style="font-family: monospace;">&amp;meta_key=%<span style="">27</span><span style="color:#008800; font-weight:bold;">&#41;</span> SQL INJECTION HERE/*&amp;meta_value=<span style="">1</span></div></div>
<h3>Solution</h3>
<p>Upgrade to the latest version or apply the following <a href="http://alex.buayacorp.com/wp-content/uploads/2007/07/statsphpdiff.txt" title="Patch to avoid SQL Injection attacks on WordPress.com Stats plugin">patch to avoid SQL Injection attacks on WordPress.com Stats plugin</a>.</p>
<div class="hiliter"><strong>diff:</strong><div class="diff" style="font-family: monospace;">Index: stats.php<br />
===================================================================<br />
<span style="color: #888822;">--- stats.php&nbsp; &nbsp;<span style="">&#40;</span>revision <span style="">15884</span><span style="">&#41;</span></span><br />
<span style="color: #888822;">+++ stats.php&nbsp; &nbsp;<span style="">&#40;</span>working copy<span style="">&#41;</span></span><br />
<span style="color: #440088;">@@ <span style="">-233</span>,<span style="">6</span> <span style="">+233</span>,<span style="">7</span> @@</span><br />
function stats_get_posts<span style="">&#40;</span> $args <span style="">&#41;</span> <span style="">&#123;</span><br />
list<span style="">&#40;</span> $post_ids <span style="">&#41;</span> = $args;<br />
<br />
<span style="color: #00b000;">+&nbsp; &nbsp; &nbsp; &nbsp;$post_ids = array_map<span style="">&#40;</span> 'intval', <span style="">&#40;</span>array<span style="">&#41;</span> $post_ids <span style="">&#41;</span>;</span><br />
$r = 'include=' . join<span style="">&#40;</span>',', $post_ids<span style="">&#41;</span>;<br />
$posts = get_posts<span style="">&#40;</span> $r <span style="">&#41;</span>;<br />
$_posts = array<span style="">&#40;</span><span style="">&#41;</span>;<br />
&nbsp;</div></div>]]></content:encoded>
			<wfw:commentRss>http://alex.buayacorp.com/sql-injection-in-wordpresscom-stats-plugin.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.528 seconds -->
