<?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>Sigh &#187; Frikadas</title>
	<atom:link href="http://www.denibol.com/blog/category/frikadas/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.denibol.com/blog</link>
	<description>Espera lo inesperado</description>
	<lastBuildDate>Tue, 20 Jul 2010 22:08:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Vulnerabilidad en Menéame</title>
		<link>http://www.denibol.com/blog/2007/07/20/vulnerabilidad-en-meneame/</link>
		<comments>http://www.denibol.com/blog/2007/07/20/vulnerabilidad-en-meneame/#comments</comments>
		<pubDate>Fri, 20 Jul 2007 18:43:13 +0000</pubDate>
		<dc:creator>Croc</dc:creator>
				<category><![CDATA[Frikadas]]></category>

		<guid isPermaLink="false">http://www.denibol.com/blog/2007/07/20/vulnerabilidad-en-meneame/</guid>
		<description><![CDATA[Revisando el código de Meneame (en su última versión del CVS) he encontrado un fallo importante de seguridad que permite suplantar la identidad de cualquier usuario registrado en el portal de forma arbitraria.
El código vulnerable se encuentra en el fichero libs/login.php en la función/constructor UserAuth.
[...]
switch ($userInfo[2]) {
        case &#8216;3&#8242;: if (($this-&#62;now &#8211; $cookietime) &#62; 864000)                 $cookietime = [...]]]></description>
			<content:encoded><![CDATA[<p>Revisando el código de Meneame (en su última versión del <strong>CVS</strong>) he encontrado un fallo importante de seguridad que permite suplantar la identidad de cualquier usuario registrado en el portal de forma arbitraria.</p>
<p>El código vulnerable se encuentra en el fichero <strong>libs/login.php</strong> en la función/constructor <strong>UserAuth</strong>.</p>
<blockquote><p><em>[...]</em></p>
<p ALIGN="left"><font COLOR="#339966">s</font><font COLOR="#339966">witch</font> ($<font COLOR="#3366ff">userInfo</font>[2]) {<br />
<strong>        </strong>case &#8216;3&#8242;: if (($this-&gt;now &#8211; $cookietime) &gt; 864000)   <strong>              </strong>$cookietime = &#8216;expired&#8217;;<br />
<strong>               </strong>$<font COLOR="#3366ff">key</font> = md5($dbuser-&gt;user_email.$site_key.$dbusername.$dbuser-&gt;user_id.$cookietime);<br />
<strong>               </strong>break;<br />
<strong>        </strong>case &#8216;2&#8242;:<br />
<strong>                </strong>$<font COLOR="#3366ff">key</font> = md5($dbuser-&gt;user_email.$site_key.$dbusername.$dbuser-&gt;user_id);<br />
<strong>                </strong>$cookietime = 0;<br />
<strong>                </strong>break;<br />
<strong>         </strong>default:<br />
<strong>               </strong>md5($site_key.$dbusername.$dbuser-&gt;user_id);<br />
<strong>                </strong>$cookietime = 0;<br />
}</p>
<p><font COLOR="#339966">if</font> ( !$dbuser || !$dbuser-&gt;user_id &gt; 0 || <strong>$<font COLOR="#3366ff">key</font> !== $<font COLOR="#3366ff">userInfo</font>[1] </strong>|| $dbuser-&gt;user_level == &#8216;disabled&#8217; || empty($dbuser-&gt;user_validated_date)) {<br />
<strong>        </strong>$this-&gt;Logout();<br />
<strong>       </strong>return;<br />
}<br />
<em>[...]</em></p>
</blockquote>
<p>El problema radica en el que el &#8220;<em>default</em>&#8221; de la estructura &#8220;<em>switch</em>&#8221; no se asigna la variable <em>$key</em>, por lo que una cookie preparada maliciosamente permite pasar la comprobación de tipos y contenido en la siguiente condición &#8220;<em>$key !== $userInfo[1]</em>&#8220;, únicamente consiguiendo que <em>$userInfo[1]</em> sea <em>NULL</em>.<br />
Modificando la cookie &#8220;<strong>mnm_user</strong>&#8221; para que contenga el usuario víctima y la cookie &#8220;<strong>mnm_key</strong>&#8221; el mismo usuario pero codificado en <em>base64</em>, el ataque tiene éxito, ya que al hacer el &#8220;<em>explode</em>&#8221; de &#8220;<em>mnm_key</em>&#8220;, todos los elementos del array &#8220;<em>$userInfo</em>&#8221; quedan a <em>NULL</em> excepto el primero.</p>
<p>Para corregirlo únicamente habría que modificar</p>
<blockquote><p>md5($site_key.$dbusername.$dbuser-&gt;user_id);</p></blockquote>
<p>por</p>
<blockquote><p>$key = md5($site_key.$dbusername. $dbuser-&gt;user_id);</p></blockquote>
<p>La vulnerabilidad fue encontrada e informada al responsable del código y más tarde corregida en el mismo día (<a HREF="http://svn.meneame.net/index.cgi?rev=856&amp;view=rev" TARGET="_blank">diff</a>), tanto en el <em>CVS</em> como en el código usado por meneame.net. Todos aquellos portales que se hayan basado en su código <em>desde el día 2 de julio de 2007 hasta hoy</em> contienen dicha vulnerabilidad (<a HREF="http://svn.meneame.net/index.cgi/branches/version2/www/libs/login.php?rev=797&amp;r1=462&amp;r2=797" TARGET="_blank">diff</a>), ya que fue introducido entonces de forma accidental.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.denibol.com/blog/2007/07/20/vulnerabilidad-en-meneame/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
