Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Prevenir Cross Site Scripting Usando ESAPI

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en Java al prevenir cross site scripting utilizando ESAPI. ESAPI es una librería de control que permite implementar medidas de seguridad contra distintos ataques en una aplicación web.

Necesidad

Prevenir XSS en aplicaciones Java EE usando ESAPI.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se dispone de un programa realizado en Java EE 1.5 o superior.

Solución

Cross Site Scripting o, por su abreviación, XSS es una vulnerabilidad en el sistema de validación de HTML la cual permite inyectar, en páginas web, código JavaScript u otro lenguaje similar (ej: VBScript).

Por lo general, esta vulnerabilidad es explotada con el fin de tener acceso a cualquier cookie, tokens de sesión u otra información sensible retenida por el navegador y usada con en el sitio vulnerable. Es más, estas secuencias de comandos pueden, incluso, reescribir el contenido de una página HTML.

Por su parte, ESAPI (The OWASP Enterprise Security API) es una librería de control para implementar seguridad en una aplicación web en Java. ESAPI proporciona la clase Encoder del paquete org.owasp.esapi para codificar la salida a un formato especifico como es HTML, XPATH, CSS, VBSCRIPT, URL, SQL, LDAP, JavaScript, entre otros. Actualmente se encuentra disponible la versión 2.0 de ESAPI la cual soporta Java 1.5 y superior [1].

Para prevenir Cross Site Scripting utilizando ESAPI 2.0 se debe seguir los siguientes pasos:

  1. Descargar la versión 2.0 de ESAPI y seguir el manual de instalación [1].

  2. Importar las clases org.owasp.esapi.ESAPI y la interfaz org.owasp.esapi.Encoder.

    esapi.java
    1
    2
    import org.owasp.esapi.ESAPI;
    import org.owasp.esapi.Encoder;
    
  3. Especificar el tipo de codificación. Cuando se necesita insertar un dato no confiable directamente dentro del cuerpo HTML de un documento, la entrada debe ser codificada en formato HTML [2].

    1
    2
    3
    4
    //Reemplazar (para el caso particular)
    String unSafe = request.getParameter("input");
    //Por
    String safe = ESAPI.encoder().encodeForHTML( request.getParameter( "input" ) );
    
  4. Para este caso, la función encodeForHTML codifica caracteres especiales como & < > " '/ para evitar el cambio en cualquier contexto de ejecución. Por ejemplo, cuando la entrada de datos contiene scripts inyectados.

  5. Si el dato de entrada no confiable se inserta como un valor de un atributo de un elemento HTML como aparece a continuación:

    1
    2
    3
    4
    5
    6
    <div attr=...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...>content</div>
      dentro de un atributo sin comilla
    <div attr='...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...'>content</div>
      dentro de un atributo con comilla simple
    <div attr="...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...">content</div>
      dentro de un atributo con comilla simple
    
  6. Se debe considerar la siguiente instrucción de código para que se codifiquen caracteres especiales dentro de los atributos.

    1
    String safe = ESAPI.encoder().encodeForHTMLAttribute( request.getParameter("input"));
    

Para concluir, es bueno saber que está vulnerabilidad puede presentarse de dos formas: XSS almacenado, y XSS reflejado. En el primero, el código inyectado es almacenado en el servidor de la aplicación, de tal manera que cuando cualquier persona entre a la parte de la página donde se ha inyectado el código, éste se ejecute extrayendo o modificando la información de la víctima.

Por su parte, en el XSS reflejado el código malicioso no se almacena en el servidor, sino que existe de forma temporal cuando se abre la página web vulnerable, logrando de esta forma, entre otras cosas, obtener información sensible de la víctima. En este caso, se debe forzar a la víctima que visita el sitio web vulnerable que sea ella misma quien ejecuta la inyección de código.




Haz un comentario

Estado de los servicios - Términos de Uso