Español | English
rss facebook linkedin Twitter

La semilla del mal

Envueltos como estamos en el uso de gran cantidad de software y viendo que si revisamos las listas de vulnerabilidades observamos que cada día nos obsequian con una buena y nueva ración de las mismas. Es posible que el lector en algun momento se pregunte ¿cuál es el motivo subyacente en la gran mayoría de estos fallos? Es lo que, hemos apodado "La semilla del mal", y esto es, el tratamiento de cadenas.

Nótese que cualquier aplicación (tanto un binario nativo como una aplicación script para web) no es más que un conjunto de algoritmos que, en base a un estímulo (solicitud, acción) realizan un proceso sobre un cojunto de datos para devolver una respuesta. Aquí es donde entra en juego nuestra semilla, y es que, por regla general, los estímulos en muchas ocasiones son cadenas. Si observamos el escenario web, observaremos que, cuando introducimos un comentario en un foro lo que estamos enviando son una serie de cadenas de texto las cuales incluirán, probablemente, una cadena que nos identifica como usuario registrado del foro y una cadena que contiene nuestro comentario. Dichas cadenas serán almacenadas y se mostrarán cuando otro estímulo haga que la aplicación muestre dichos datos.

Imaginemos otro escenario, supongamos una aplicación en ejecución en nuestro sistema con más privilegios que los de nuestro usuario. Dicha aplicación nos ofrece un interfaz para rellenar un formulario de datos. Lo que se introduzca en dicha interfaz será procesado por esa aplicación o un web service, que recibe una solicitud.. ¿Cómo está relacionado esto con nuestra semilla del mal? Básicamente todo gira alrededor de un tratamiento incorrecto de la información que se recibe de entrada, la gravedad de la vulnerabilidad queda sólo en manos de lo complicado que sea realizar dicha acción (si desde local o remoto, o se necesitan requisitos previos como un usuario) y de lo que pueda llegar a producir la acción. Como tratamiento incorrecto de la información, entenderemos una situación no contemplada en el código que compone la aplicación ante una información con formato incorrecto que pueda derivar en el mal funcionamiento del mismo. Por ejemplo, si tomamos como referencia el ejemplo web y teniendo en cuenta que, el software que representa la página muestra los datos previamente insertados (el post en el supuesto foro) y tambien ejecuta el propio código de la página en si (para darle su formato, etc). ¿Podríamos insertar en nuestro inocente comentario código script que fuera ejecutado por dicho software? claro, y de esta forma ejecutar un script en el servidor que nos muestre por ejemplo el hash de la contraseña de administrador de la web. ¿Podríamos introducir en el interfaz de la aplicación una cadena que excediera la longitud máxima permitida sobreescribiendo así parte de la memoria y permitiendonos de esa forma alterar el flujo del programa? ¡Por supuesto!. Afortunadamente, las aplicaciones se realizan (o al menos eso quiero pensar) teniendo en cuenta estas circunstancias y dotando al algoritmo de unos filtros previos para eliminar o atajar cualquier información incorrecta que pudiera lograr un mal funcionamiento del mismo.

El problema reside en que no siempre es así y uno es más consciente de ello al ver vulnerabilidades como la reciente de Quicktime+Firefox ( http://www.securityfocus.com/archive/1/479179/30/0/threaded ) o bien, el simple robo de contraseña de una cuenta de Second Life ( http://hackademix.net/2007/09/16/ie-non-bug-vs-second-life/ ) aunque estos son ejemplos de masas, cualquier aplicación de intranet, cualquier formulario externo, cualquier sistema de petición de datos de cualquier empresa puede ser comprometido sólo por alguien curioso con ganas de probar.

¿Es su aplicación segura?

(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login