Evadir Restricciones De Datos Enviados Por El Usuario En Formularios HTML

Las aplicaciones usualmente utilizan controles en el lado del cliente para restringir los datos enviados por los clientes. Los formularios HTML son la manera más sencilla y simple de capturar datos desde el usuario y enviarlos hacia el servidor. Los usuarios escriben datos dentro de campos de texto nombrados, los cuales son enviados hacia el servidor como pares de nombre/valor. Los formularios también pueden imponer restricciones o realizar verificaciones de validación sobre los datos proporcionados por el usuario.

Cuando una aplicación emplea controles en el lado del cliente como mecanismo de seguridad para defenderse contra entradas maliciosas, estos controles pueden usualmente ser fácilmente evadidos, dejando a la aplicación potencialmente vulnerable a ataques.

Limites en la Longitud

El siguiente formulario impone una restricción del campo “login_usrname” a una longitud de 20 caracteres. maxlenght=”20”. Mencionar la utilización de “Firebug” para visualizar estos datos.

Esto puede ser fácilmente evadido modificando el valor del campo de nombre “maxlenght” a una longitud de 30 o más.

Es factible también utilizar Zed Attack Proxy para interceptar los datos enviados en el formulario, realizar una modificación sobre estos, para luego enviarlos hacia el servidor. En la siguiente demostración se define un valor de gran longitud para el campo de nombre “name”.

Validación con Scripts

Es también común el validar los datos ingresados por el usuario mediante la utilización de scripts. Analizar la linea resaltada en la siguiente fuente HTML. El atributo “onsubmit” de la etiqueta “form “instruirá al navegador a ejecutar la función “submitForm” cuando el usuario haga clic en el botón “Submit” y enviar el formulario solo si la función retorna un valor verdadero. Este mecanismo permite a la lógica en el lado del cliente interceptar un intento de envío del formulario, realizar verificaciones de validación personalizadas sobre la entrada del usuario, y decidir si aceptar la entrada.

En este caso la función “submitForm” verifica la existencia de datos en los campos “txtUserName” y “txtPassword”. Caso contrario será mostrado un mensaje de alerta indicando la no existencia de estos. Si el ingreso de datos es correcto, se envían los datos ingresados hacia el servidor.

Para evadir esto sería factible deshabilitar JavaScript en el Navegador. En firefox se debe definir a falso “javascript.enabled”. Pero esta acción puede romper o generar funcionamientos anómalos en la aplicación web. Una forma mas elegante de evadir la validación con JavaScript es completar los datos en el formulario, interceptar el envío con Zed Attack Proxy, modificar los datos y enviarlos hacia el servidor.

Se ingresan datos en ambos campos de formulario y se hace clic en el botón “Login”.

Se interceptan los datos y se borran los valores definidos para los campos “txtUserName” y “txtPassword”. Esto será enviado hacia el servidor, lo cual supuestamente no debería ser factible de realizar debido a la validación de la función “submitForm”.

Elementos Deshabilitados

Si un elemento en un formulario HTML está deshabilitado este será mostrado el color gris, no siendo factible tampoco su edición o utilización. A modo de demostración se ha incluido el código “disabled=’true’” en la entrada correspondiente al botón “Clear” del formulario.

Esta información sobre el elemento abre un nuevo vector de ataque a la aplicación web, pues este podría ser habilitado simplemente eliminando esa definición. En otros escenarios podría sugerir la presencia de parámetros utilizados por la aplicación web.

Para todos los escenarios descritos, la explotación satisfactoria de vulnerabilidades en la aplicación web no solo son dependientes de las validaciones realizadas en el lado de cliente, sino también de las realizadas en el lado del servidor.

Fuentes:

http://getfirebug.com/
http://www.w3schools.com/jsref/event_onsubmit.asp
https://support.mozilla.org/en-US/questions/994809

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s