Security Scanner Error #101: Uso de HTML en Webforms #GeneXus

Este es el primero de una serie de post sobre el uso del Security Scanner en KB GeneXus.

Empezamos un proyecto de análisis de seguridad de una aplicación GeneXus. Dicho análisis incluye un estudio de la KB con el Security Scanner y el estudio y la corrección de algunas de las vulnerabilidades encontradas. Es importante notar que no alcanza solo con esto, pero es un muy buen punto de partida.

La metodología de trabajo que encaramos fue la de hacer una corrida del Security Scanner, generar una planilla con los errores y luego pasar dichos errores a los desarrolladores de dicha KB.

Lo que vimos  es que si bien hay bastante documentación sobre las distintos tipos de vulnerabilidades de la OWASP es que estaba faltando recetas sencillas para solucionar los problemas que plantea el Security Scanner.

Los problemas de seguridad son complejos y lo que pretendo solucionar son los casos mas sencillos y no seria bueno crearse una falsa sensación de seguridad por corregir estos problemas, pero es bueno para que todos los desarrolladores GeneXus empiecen a tener mas nociones de seguridad, tema que no tiene mucha relevancia en la comunidad.

#101: Uso de HTML en Webforms GeneXus. 

Este uno de los avisos que brinda el Security Scanner para los atributos, dominios y controles dentro de webpanels y transacciones.

Lo que lista son los atributos o controles que tengan la propiedad Format en "HTML" o "Raw HTML"

Cual es el riesgo de tener controles con formato HTML?

Pongamos un ejemplo, que es mas fácil de mostrar. Tengo una transacción sencilla de Productos, con

* ProductoId      N(3)
  ProductoDsc   Varchar   con la propiedad FORMAT en HTML.





Le aplico el patrón WorkWith y se genera el WWProducto



La descripción se muestra como HTML.

Como puede afectarme?


Ejecuto la transacción, y doy de alta el producto de código 3 y

<a href="http://www.microsoft.com/">PRODUCTO 3</a>

en la descripción.
Cuando ejecuto nuevamente el WWProducto, en la descripción del producto 3, muestra un link a www.microsoft.com. 

Esto muestra un link no deseado a un sitio externo desde nuestra aplicación. 

Dando de alta el producto 4, y pongo la descripción 

<iframe src='https://www.microsoft.com'></iframe>

Al ejecutar
Entonces, por tener la descripción de productos con formato HTML se posibilitan este tipo de inclusión de contenido externo en mi aplicación. 

Otro ejemplo, como poner una imagen externa en nuestro sistema, es poniendo una descripcion de la forma 

<img id="irc_mi" src="http://image.brazilianbikinishop.com/images/products/RiodesolBikiniMiami1.jpg" class="irc_mut" width="268" height="401" style="margin-top: 0px;">

Con lo cual se mostrará


Como ven, es muy fácil mostrar contenido externo en nuestros sistemas. 

Cual es la solución?

La solución en este caso, es pasar la descripción a format Text y entonces se va a mostrar de la forma:

La recomendación es usar Text por defecto en todos nuestros controles de pantallas WEB. 
Debemos recorrer todos los objetos y controles que lista el Security Scanner con el error 101 y pasar la propiedad Format a Text.  

Si alguno necesita HTML, hacer una sanitizacion del contenido que se va a mostrar, por ejemplo sacando los Tags que puedan ser peligrosos de forma que no nos puedan incluir código nocivo. 

UPDATE: Los ejemplos de codigo HTML que puse, son los mas sencillos que se me ocurrieron. 
No quise avivar a los giles, pero probando con html mal formados y otros codigos mas avanzados, pueden hacerse cosas mas dañinas. 

Comentarios

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.