Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + Tecnología especializada
DXST - SAST - IAST - SCA - DevSecOps
Caja blanca - Caja gris - Caja negra
Atacando Aplicaciones Web, APIs, Apps Móviles,
Cliente Servidor, Servidores, Redes, Dispositivos IoT
IoT SCI: Sistemas de Control Industrial

Habilitar HttpOnly

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en Java EE al generar cookies con HTTPOnly. Las cookies deben ser aseguradas debido a que contienen información que puede ser usada por un atacante para suplantar la identidad de un usuario.

Necesidad

Habilitar HTTPOnly en Java.

Contexto

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

  1. Se está desarrollando una aplicación en Java.

  2. Se utilizan cookies de sesión.

  3. Se utiliza un servidor de aplicaciones compatible con Java EE.

Solución

Una cookie o galleta es una pequeña porción de información enviada por un sitio o servidor web y almacenada en el navegador del usuario. Las principales funciones o utilidades de las cookies son:

  • Gestión de Sesiones: de esta manera es posible diferenciar los usuarios que acceden a una aplicación web, permitíendole al servidor llevar un control de los mismos y en consecuencia actuar de diferente forma dependiendo de estos.

  • Personalización: con las cookies es posible almacenar la información sobre los hábitos de navegación del usuario, preferencias, temas y otras configuraciones. Esto con el fin de ofrecer una funcionalidad acorde a los gustos específicos de cada usuario.

  • Rastreo: esto se hace para guardar y analizar el comportamiento del usuario, de tal manera que sea posible crear y mantener estadísticas de uso o también para crear perfiles de usuarios que luego se usarán para orientar campañas publicitarias.

Para la primera función, gestión de sesiones, se crean las cookies de sesión al momento en que un usuario inicia o realiza el proceso de login ante una aplicación web, de igual manera, cuando el usuario cierra o destruye la sesión, las cookies creadas se eliminan.

No obstante, las cookies se pueden utilizar para realizar ataques contra la seguridad del sitio web y de los usuarios que lo frecuentan.

El principal ataque que aprovecha el uso de las cookies es el robo de las mismas, es decir, obtener el valor de la cookie de sesión de otro usuario para suplantarlo e ingresar a la aplicación web como él.

La manera más común de lograr dicho robo es mediante un ataque XSS. Dicho ataque permite a una tercera persona inyectar en páginas web visitadas por el usuario código JavaScript u otro lenguaje similar.

Entonces, para evitar el robo de cookies mediante este ataque, se recomienda establecer el atributo HttpOnly a las cookies de sesión. Este atributo lo que hace es indicarle al navegador que una cookie no puede ser consultada nunca por medio de JavaScript y que sólo debe usarse cuando se vaya a utilizar en una petición HTTP.

  1. Para servidores de aplicación compatibles con Java EE 6 (Servlet 3.0), tal como GlassFish, la opción HttpOnly se puede configurar desde el archivo web.xml.

    web.xml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    <web-app>
      <session-config>
        <cookie-config>
          <!--
            Specifies whether any session tracking cookies created
            by this web application will be marked as HttpOnly
          -->
          <http-only>true</http-only>
        </cookie-config>
      </session-config>
    </web-app>
    
  2. Para habilitar el uso de HttpOnly en Apache Tomcat se debe usar el contexto de las aplicaciones web.

    1
    2
    3
    <Context useHttpOnly="true">
     ...
    </Context>
    
  3. Para el servidor de aplicaciones Adobe Coldfusion 9.0.

    1
    2
    3
    4
    5
    6
    7
    8
    <cfcomponent>
      <cfset this.sessionmanagement = true>
      <cfset this.setclientcookies = false>
      <cffunction name="onSessionStart">
        <cfcookie name="CFID" value="#session.cfid#" httponly="true">
        <cfcookie name="CFTOKEN" value="#session.cftoken#" httponly="true">
      </cffunction>
    <cfcomponent>
    



Haz un comentario

Estado de los servicios - Términos de Uso