[ASP.NET] Conociendo los ataques XSS

Posted on Actualizado enn


Cuando comenzamos el desarrollo de una nueva aplicación Web, generalmente pasamos por encima el tema de seguridad, pensando que con implementar un sistema de autenticación nuestro sistema es los suficientemente seguro para responder a cualquier ataque por pequeño que sea… y en realidad no es así. Es por eso que iré mostrando (tan seguido como el tiempo me lo permita) algunos de esos ataques que puede recibir un sitio Web, no intento decir que soy un hacker ni mucho menos, y tampoco que soy un experto en seguridad, pero quiero dar algunos aportes al tema, una cosa importante que deseo aclarar es que los puntos que voy a ir mostrando si los vas a probar no deben hacerlos sobre sitios en la Web, como bien sabrán estos temas de seguridad son bastantes delicados con los temas legales.

Entonces iniciemos, y que es eso de XSS?, según la Wikipedia:

XSS, del inglés Cross-site scripting es un tipo de inseguridad informática o agujero de seguridad típico de las aplicaciones Web, que permite a una tercera parte inyectar código JavaScript en páginas web vistas por el usuario, evitando medidas de control como la Política del mismo origen.

Y en resumen, es simplemente atacar utilizando código JavaScript, pero para entenderlo mejor vamos a realizar un sencillo ejemplo. En el ejemplo el usuario podrá ingresar un nombre de usuario en un campo de texto y al dar click en el botón de enviar el texto ingresado será mostrado en un label, simple no? y ustedes dirán que es algo muy sencillo, pero realmente nos podemos complicar la vida, en resumen el HTML de nuestro ejemplo sería:

   1:  <form id="form1" runat="server">
   2:      <h1>XSS</h1>
   3:      <div>
   4:          <b>Nombre:</b>
   5:          <asp:TextBox ID="txtNombre" runat="server"></asp:TextBox><asp:Button ID="btnEnviar" runat="server" Text="Enviar" />
   6:          <hr />
   7:          <b>Nombre ingresado: </b><asp:Label ID="lblNombre" runat="server"></asp:Label>
   8:      </div>
   9:  </form>

Listo, luego de tener nuestro “complejo” formulario listo, vamos a agregar una pequeña lógica al evento click del botón, el cual simplemente tomará el texto ingresado en el campo de texto y lo mostrará en el label inferior:

   1:  protected void btnEnviar_Click(object sender, EventArgs e)
   2:  {
   3:      lblNombre.Text = txtNombre.Text;
   4:  }

Ahora si ingresamos el texto “julitogtu” y damos click en el botón que sucede? pues nada raro, ese texto se muestra en el label sin problema (lo cual era lógico verdad??), pero ahora vamos a cambiar un el texto ingresado por: <script>alert(‘Mensaje JavaScript’);</script> y nuevamente damos click en el botón de enviar y vemos que ahora obtenemos una pantalla digamos que de error, la cual es:

Imagen1

Y que ha pasado?? simple, el usuario está intentando enviar un pequeño código JavaScript, y por default toda aplicación Web realizado con ASP.NET lo considera peligroso, lo cuál es completamente cierto, pero bueno si nos detallamos un poco más en la imagen vemos que nos sugiere dos pasos:

    1. Modificar el Web.configla etiqueta httpruntime y establecer el valor de la propiedad requestValidationMode="2.0".
    2. En las directivas de la página establecer el valor de la propiedad validateRequest en false.

Así que hagámoslo, entonces el Web.config quedaría (y no olvides el punto 2):

   1:  <?xml version="1.0"?>
   2:  <configuration>
   3:      <system.web>
   4:          <compilation debug="true" targetFramework="4.0"  />
   5:          <httpRuntime requestValidationMode="2.0"/>
   6:      </system.web>
   7:  </configuration>

Luego de realizar los dos cambios anteriores, vamos a probar de nuevo, y que pasa en este caso? pasa que al ingresar el valor: <script>alert(‘Mensaje JavaScript’);</script> en el campo de texto y dar enviar se esta mostrando un alert de JavaScript, si el que se ingreso en el campo de texto!! y en nuestro label no se está mostrando nada Triste:

Imagen2

Y ahora si podemos ver el problema verdad?? y eso que en el ejemplo solo se ha ingresado un simple alert… pero como todo tiene solución simplemente vamos a utilizar una función que nuestro querido framework nos provee, y es el HtmlEncode, entonces reescribiendo el código del click del botón tenemos:

   1:  protected void btnEnviar_Click(object sender, EventArgs e)
   2:  {
   3:      lblNombre.Text = HttpUtility.HtmlEncode(txtNombre.Text);
   4:  }

Y al volver a intentar ahora si el comportamiento es el esperado, sin embargo quiero aclarar que establecer el valor de la propiedad validateRequest en false no es la mejor práctica, peor ya veremos en otro post más de este tema, espero esta introducción les sea de interés.

Saludos!

3 comentarios sobre “[ASP.NET] Conociendo los ataques XSS

    [ASP.NET] Conociendo los ataques XSS | MSDN Blogs escribió:
    05/22/2012 en 16:59

    […] [ASP.NET] Conociendo los ataques XSS […]

    […] [ASP.NET] Conociendo los ataques XSS […]

    Resumen Post 2012 « Todo en ASP.NET escribió:
    12/19/2012 en 22:04

    […] [ASP.NET] Conociendo los ataques XSS […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s