Mostrando entradas con la etiqueta cookies. Mostrar todas las entradas
Mostrando entradas con la etiqueta cookies. Mostrar todas las entradas

viernes, febrero 16, 2024

Utiq Consent Hub: Cookies Publicitarias y Muros de Suscripción

Ya hemos visto muchas veces el debate de las cookies publicitarias en las páginas web de navegación en Internet. El poder controlar las cookies que hacen un perfilado de una persona hace que los anuncios sean más ajustados para el visitante de la web, y eso hace que para los anunciantes tenga más sentido anunciarse en las webs que mejor perfilan, y eso hace que los sitios webs ganen más dinero con los anuncios si son capaces de perfilar a los visitantes y tener el anuncio adecuado para cada navegante.

Figura 1: Utiq Consent Hub - Cookies Publicitarias y Muros de Suscripción

Hasta aquí todo fácil de entender. Perfilado implica Dinero. Así de sencilla es la ecuación, pero con la llegada de GDPR, muchas de las cookies dejaron de poder utilizarse para perfilar a los navegantes, porque las webs deben dar la opción de rechazar las cookies de perfilado y el consentimiento para compartir estos datos con terceros, y llegó el "Subscription Wall", es decir, acepta las cookies o suscríbete y paga.

Figura 2: Susbcription Wall 

El asunto es que las cookies no se han ganado mucho cariño por los ciudadanos de la red debido a lo difícil que ha sido poder controlarlas, saber qué hacen, y sentirse demasiado "perseguidos" por los anuncios sin poder librarse de ellas fácilmente. Así que muchos fueron los que empujaron por el mundo "Cookieless" que poco a poco está llegando.

Figura 3: Solución de Utiq en Marca.com

Una propuesta alternativa a este mundo es la que hace Utiq, una startup creada entre Orange, Vodafone, Deustche Telekom y Telefónica, donde se utilizan identificadores desde la red móvil con privacidad, que se pueden eliminar de manera sencilla a través de un gestor de consentimientos.

Figura 4: SMS con información de Utiq.

La idea es tan sencilla como que un sitio que utiliza Utiq y quiere dar las dos alternativas - Navegar Gratis o Pagar Suscripción -, puede darle al usuario la opción de ser perfilado por medio de estos identificadores de red. Los usuarios que aceptan utilizar Utiq, recibirán un SMS con información de Utiq, y la URL del Consent Hub de Utiq que es el panel en el que cuando el usuario lo desee, puede ir y eliminar el consentimiento de uso de ese identificador para ese sitio web. 
Al Consent Hub de Utiq  se accede desde tu conexión móvil, pero yo he accedido desde mi Mac haciendo una sesión de Internet Tethering con mi iPhone, por eso se ve la versión Web de escritorio en la imagen anterior. En la imagen siguiente se puede ver que tienes la opción de "No usar nunca Utiq" o de "Gestionar tus consentimientos" que ahora mismo está vacío. Es decir, no se ha generado ningún identificador de red de tu conexión para ningún sitio web.
Cuando se acepta el uso de Utiq en un sitio, por ejemplo en la web de ejemplo de marca.com, lo que tendremos es este domino en la lista de nuestros consentimientos concedidos, pero con un clic en la papelera, eliminamos este consentimiento desde ese instante en adelante.
De esta forma se intenta conseguir que los sitios de contenido gratuito que viven de la publicidad, puedan también garantizar al usuario que este tiene el control de sus identidades digitales y perfilado con un panel de control para todos. 

Si accedes desde el móvil a la URL de https://consenthub.utiq.com/ podrás acceder al panel de control delos consentimientos de Utiq que tienes en tu control.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


martes, febrero 16, 2021

Cómo gestionar tus cookies en tu web de forma inteligente, legal e incluso ser cookieless

¿Sabes ese momento en el que te unes a la masa y te pones a quejarte y protestar sobre algo, pero luego si te paras a pensar no tienes claro por qué protestas? Justo justo eso es lo que le pasa a mucha gente con el controvertido tema de las cookies. ¿Por qué deberías pensar en tus cookies? Verás, si tienes una web, analizas tráfico y/o realizas publicidad mediante Google Ads, Facebook, Instagram o cualquier plataforma de publicidad online, deberías pensar en las cookies que descarga tu web. 

Figura 1: Cómo gestionar tus cookies en tu web de
forma inteligente, legal e incluso ser cookieless

Y también en la información que recaban y en cómo gestionarlas de manera adecuada para no tropezar con la legalidad. Pero además, es preciso y necesario que aprendas a gestionarlas de forma inteligente. y ¿qué significa gestionar de forma inteligente las cookies? Pues muy sencillo, utilizar sólo las cookies que realmente necesitas, asegurarte de que tus cookies no te pongan en ningún momento en un brete legal, ni atropellen a tus usuarios malamente y que tampoco destrocen de forma sustancial tus mediciones ni tu cuenta de resultados si monetizas mediante anuncios. Y de cómo hacer esto y otras cosas te vamos a hablar en este artículo.

¿Qué deberías saber sobre las cookies?

¿De qué va todo esto de las cookies?¿Qué son esas pequeñas galletas diminutas y cansinas, esos cuadros de información tan molestos que nos asaltan sin descanso ni pudor? Y lo que es más importante aún: ¿a quién le importan las cookies?

Es evidente que si estás leyendo esto aquí, en el blog de Chema Alonso nada menos, explicarte qué es una cookie y lo que hace sería insultarte de mala manera y no será el caso. Lo que quizás no tengas tan claro es por qué se está regulando legalmente su uso y qué se supone que tenemos que hacer al respecto si queremos tener una web que cumpla la normativa regulatoria.

Todo comenzó con el famoso RGPD o GDPR (la normativa europea que regula el tratamiento de datos personales) que se tomó esto del consentimiento muy en serio y buscó erradicar los trucos y triquiñuelas para hacerse con los datos de las personas por la cara y hacer con ellos lo que más interesa al beneficio de la empresa.

Y como las cookies son finalmente pequeños archivos de datos que van recordando y persiguiendo a usuarios por la red, pues quedan reguladas dentro de la normativa de protección de datos y también por la LSSI-CE (Ley de la sociedad de la información y del comercio electrónico) y por el futuro “e-privacy”, el reglamento del Parlamento Europeo y del Consejo sobre el respeto de la vida privada y la protección de los datos personales en el sector de las comunicaciones electrónicas.

Sí, las comunicaciones electrónicas están reguladas fundamentalmente por este e-privacy, que debería haber sido de aplicación junto con el RGPD pero que lleva casi tres años de retraso por motivos que no viene a cuenta comentar hoy. Lo que es evidente es que en una economía desplazada hacia lo digital es imprescindible que las personas puedan confiar en que sus datos son privados, están seguros y son gestionados de forma lícita y consentida por las empresas que los recaban .

También es esencial que toda persona, independientemente de los productos o servicios que utilice en la red, pueda ejercer control sobre sus datos y decidir qué datos comparte y con quién, cómo, para qué y hasta cuándo. Esto, por supuesto, incluye la posibilidad de negarse a la publicación y al uso comercial de sus datos y su información personal. Y aquí es donde aparecen las cookies y toda la maquinaria persecutoria que supone su utilización.

¿Qué es lo legal en la gestión de cookies?

Muy sencillo. De forma breve, lo que se regula es el uso de las cookies de “Analítica” y “Marketing”, fundamentalmente. Concretamente, la normativa nos exige que informemos al usuario acerca del tipo de cookies que vamos a instalar en su navegador y que ofrezcamos mecanismos para tomar decisiones acerca de lo informado y esto se resuelve mediante un banner o pop-ups de advertencia de cookies.

Desde la perspectiva web, debemos incluir mecanismos de información por capas o multinivel. Esto significa que antes de recabar información personal debemos ofrecer a los usuarios información básica sobre el tratamiento de sus datos en una primera fase y permitir acceder a información completa o ampliada en una segunda fase o capa.

Y por eso estamos expuestos a tantos y variados banners de cookies, que no son otra cosa que esta primera capa informativa, resuelta de forma más o menos óptima o más o menos legal (aunque la mayoría sigue con un nivel muy comprometido de cumplimiento). Al ser archivos de datos personales, con las cookies aplican los mismos principios que en cualquier otro tratamiento de información personal:

1. Transparencia: debemos ser capaces de informar de manera clara y sencilla acerca del tipo de cookies que descarga nuestra web.

2. Consentimiento: debemos ofrecer opciones para que el usuario pueda elegir libremente qué cookies aceptas y qué cookies no, exceptuando las cookies que no sean técnicas o estrictamente necesarias para el funcionamiento de una web.

Por tanto, las webs que utilizan cookies no exceptuadas del deber de obtener consentimiento, deben necesariamente adaptar fórmulas de información y consentimiento que reúnan los requisitos de transparencia y control que exige la normativa, adaptándola al actual nivel de conocimiento de los usuarios.

La gestión ilegal y torticera de las cookies

El primer error es la incoherencia y la hipocresía respecto a la utilización de las cookies, que potencia el asalto continuado al usuario y sus derechos. Todos los avances y tendencias en marketing hablan de poner al usuario en el centro de todas las acciones de marketing a realizar. Hablamos de adoptar una filosofía Customer Centric", que indica que el valor de una empresa depende de cuán obsesionado esté con el cliente”. En este sentido lo ratifica el informe de Forrester con predicciones para EMEA 2021 y tienes un genial resumen en la publicación en LinkedIn de mi colega Alicia Rodríguez Ruiz Pues bien, en lo que respecta a las cookies, el usuario es el último mono del circo, lo explica con humor y genialidad mi compañero Santiago Alonso en este post.

Por otra parte, hay una especie de “Diógenes” con la información personal y los datos en general. Acumulamos ingentes cantidades de información que ni siquiera sabemos analizar, y esto forma parte de la ilegalidad y de la estupidez. ¿Necesitas de verdad todos esos datos? Porque siempre que recabas datos, asumes un compromiso con esa información que genera determinadas obligaciones.

Y aquí viene lo de la estupidez: ¿tiene algún sentido acumular compromisos para almacenar una información que no vas a utilizar? y en la parte legal: recabar información sin una causa que lo justifique, vulnera el principio de minimización de datos expresado en el RGPD, que indica que todos los datos deben ser adecuados, pertinentes y limitados a lo necesario en relación con los fines para los que son tratados. En el caso de las cookies, este es un error ilegal que se repite hasta la saciedad.

Otro despropósito que maltrata al usuario con mucha frecuencia es el de crear soluciones enrevesadas y nada recomendables que dejan al usuario atrapado en un bucle de fórmulas imposibles para que se vea forzado a aceptar sin remedio.

La gestión inteligente de las cookies

El dilema es claro: nos interesan “supuestamente” los usuarios y queremos tratarlos correctamente. Pero nos interesa aún más obtener la máxima información posible y convertirla en la divisa que mejor nos convenga. Por eso, gestionar “legalmente” las cookies puede suponer un gran entuerto. Y de hecho, lo es. El principio legal es muy claro: debe ser tan sencillo aceptar las cookies cómo rechazarlas. Y toda fórmula que no aplique este principio es ilegal, sin paliativos. Por eso, la gestión legal de cookies debe considerar estos “action items”:

1. Ofrecer información clara, específica y personalizable sobre el tipo de cookies de la web y su finalidad. Esta información se debe proporcionar de forma directa, clara y accesible, básicamente mediante un banner o pop-up de advertencia (primera capa).

2. Bloquear la carga de cookies analíticas y publicitarias hasta obtener consentimiento expreso del usuario.

3. Mantener un archivo de los consentimientos obtenidos, recuerda que los consentimientos deben ser verificables.

4. Permitir aceptar, consultar o rechazar cookies de manera sencilla.

Pero si además de legal, quieres que una gestión inteligente de las cookies, deberías centrarte en seleccionar sólo aquellas que realmente vayas a utilizar y que cuya información sepas utilizar. Y descartar estas opciones que siguen presentes en muchas webs rezagadas legalmente:

● Descargar cookies analíticas o publicitarias sin previa información y consentimiento de los usuarios.
● Utilizar la opción “seguir navegando” o scroll como forma de prestar el consentimiento.
● Utilizar “muros de cookies” y limitar el acceso a determinados servicios o contenidos.

Nadie mira las cookies, es mejor hacerse el sueco

Otro mito. Las sanciones por incumplimiento son abundantes y públicas. Y no solo a las grandes marcas y empresas. De hecho, están cayendo multas como panes a webs de empresas y autónomos muy normalitos. Como una de las últimas de 3.000 euros (que se quedó en 1.800€ por pronto pago) a una web muy común por incumplimiento del art 22.2 LSSI al no existir banner o información sobre las cookies que utilizaba. Y, además, sin realizar ninguna otra acción para la obtención del consentimiento o su rechazo, ya que se descargaban cookies no necesarias tanto propias como de terceros (Google.com)


La AEPD señala en su auto que tampoco existía en la 2ª capa, un mecanismo que permitiera rechazar todas las cookies y/o gestionarlas de forma granular y recuerda que remitir a la configuración del navegador del equipo puede ser considerada una opción complementaria para obtener el consentimiento pero no como único mecanismo.

Cómo cumplir sin comprometer la analítica y el bolsillo

El primer escollo siempre que hablamos de cumplir la legalidad con las cookies gira en torno al mismo tema: la pérdida de datos. Desde el lado de la analítica, uno podría sentirse “ciego” al reducir el número de datos registrados. En la práctica, siempre intento hacer la pregunta del millón: ¿realmente estás utilizando los datos que recopilas de tus usuarios?

Siguiendo con el hilo anterior del síndrome de Diógenes, durante todos estos años he encontrado decenas (o cientos) de empresas que tienen herramientas como Google Analytics para medir el comportamiento de sus usuarios, pero jamás han hecho caso de esos datos. Sin embargo, al mismo tiempo le estás “regalando” toda esa información y comportamiento de tus usuarios al proveedor en cuestión. Podemos llamarlo Google, Facebook o cualquier otro gigante que adora recopilar datos a gran escala.

A día de hoy existen soluciones que nos pueden ayudar a mantener el análisis más cuantitativo de nuestros usuarios sin tener que saltarnos a la torera los deseos de privacidad de nuestros usuarios. Hablo de soluciones de analítica sin cookies o cookieless

Analítica cookieless: ¿utopía, realidad o futuro?

Cuando hablamos de analítica, Google Analytics se ha convertido en un estándar de facto dentro del sector a la hora de analizar nuestros datos. Para muchos proyectos, abandonar Google Analytics o los sistemas de analítica más tradicionales sería una utopía difícil de cumplir. Pero, por otro lado, tampoco podemos ignorar la normativa vigente y, sobre todo, los deseos de nuestros usuarios con respecto a su privacidad.

Tenemos al usuario en el centro de toda estrategia de marketing y aquí no debemos hacer la excepción. ¿Se puede cumplir el RGPD, utilizar Google Analytics y además mantener datos de suficiente calidad para tomar decisiones de marketing? Sin duda. Y seguramente nos haga cambiar nuestro concepto de la analítica.

Soluciones híbridas

Te cuento mi experiencia: hemos realizado experimentos durante varios meses que nos traen una conclusión clara: acepten o no acepten las cookies, los usuarios se comportan de manera muy similar cuando los observamos como conjunto.

Figura 3: Comportamiento de usuarios que
aceptan (rojo) o no aceptan (azul) cookies

Esto es realmente muy importante. Antes de dar el paso a un entorno Privacy-first, nos permite plantear escenarios híbridos en cuanto a la analítica, aprovechando así la potencia de ambos mundos:

- Google Analytics para comportamientos cualitativos de aquellos usuarios que aceptan las cookies. 
 
- Soluciones cookieless, para mantener el análisis más cuantitativo, no perder el foco del volumen de tráfico real y marcar la estrategia.

Combinadas y extrapoladas nos permiten mantener una estadística fiable e incluso mejorada del comportamiento de nuestra web. En realidad, si te paras a pensar casi seguro que no necesitas saber qué hicieron el usuario A o el usuario B al entrar en tu web. Lo que te importa es cómo se comportaron esos usuarios, sin entrar al detalle de «ponerle nombre» como hacen las cookies. Justo esa forma de medir (más cuantitativa y de manera más global) es el principio que rige las herramientas de analítica cookieless.

Digamos que es la cuerda de seguridad hasta que te convenzas al 100% de que el futuro (cada vez más cercano) está en la privacidad y en las soluciones Privacy-first. En este grupo de herramientas cookieless tenemos ejemplos como Plausible, Fhatom Analytics (de Paul Jarvis y Jack Ellis) o la propuesta de la española Adinton, que propone además soluciones enfocadas hacia el comercio electrónico.

Quédate en el lado legal. Puedes hacerlo por ética, por preocuparte de la privacidad de tus usuarios o simplemente por evitar las multas. Puedes recabar el consentimiento y seguir usando herramientas con cookies o pasarte a una solución cookieless. Elijas la opción que elijas… cumple con el RGPD y usa tus cookies con inteligencia. Una mala gestión de cookies pone en evidencia el incumplimiento de una web y esto resta credibilidad y confianza a tus usuarios.

Comprometer la percepción que tienen los usuarios de tu web por hacerte el sueco, no parece ser una decisión muy inteligente. Si has venido hasta esta última parte buscando soluciones mágicas, déjame decirte que no existen. Igual que no hay herramientas para crear la campaña de publicidad perfecta en un clic ni el mejor diseño por arte de magia. Lo que sí podemos saber es qué debe tener la herramienta perfecta. Te las recuerdo:

1. Bloquea las cookies: vale, parece lo obvio. Pero hay cientos de herramientas que no cumplen este punto.

2. Es personalizable: para adaptarla al máximo nuestras necesidades, poder hacer experimentos y analizar cuál es la mejor implementación para nuestros usuarios.

3. Incluye botones de aceptar, rechazar y configurar cookies.

¿Has decidido darle a las cookies por fin la importancia que se merecen?


martes, agosto 25, 2020

Algunos consejos de seguridad para desarrollar un frontend web (Y son muchos los que se necesitan)

El mundo de las aplicaciones web está en constante renovación, se desarrollan nuevos frameworks y herramientas, se implementan nuevos patrones arquitectónicos como los MicroFrontEnds, de los que hemos hablado en un artículo anterior. Además, el usuario está tomando una interacción mayor y más compleja con la parte frontal, esta complejidad puede llegar a suponer una brecha de seguridad si no se tiene el suficiente cuidado al desarrollar los proyectos.

Figura 1: Algunos consejos de seguridad para desarrollar un frontend web
(Y son muchos los que se necesitan)


En este artículo os hablaré de las distintas amenazas que se pueden dar en nuestra estructura frontal y de cómo prevenirlas. Es decir, vamos a ver un resumen de cuáles son las técnicas de Hacking Web Applications desde el punto de vista de los Client-Side Attacks: XSS, CSRF, SSRF, XSPA o SSJS - para lo que os recomiendo que leáis el libro de Enrique Rando - y también contaré algunos consejos para desarrollar FrontEnds de forma segura para evitarlos.

Figura 2: Libro de "Hacking Web Applications: Client-Side Attacks"
de Enrique Rando en la editorial 0xWord.

En primer lugar, para conocer los puntos débiles más comunes que se pueden dar en nuestra aplicación, debemos conocer los tipos de ataques que se realizan sobre estas y como prevenirlos.

Resumen ligero de Client-Side Attacks

- XSS Cross-Site Scripting: Es un vector de ataque dirigido a una aplicación web o página web que puede permitir a un atacante inyectar código sin que este sea validado y así, conseguir acceso a información sensible, secuestro de sesiones de usuario o subyugar la integridad del sistema. Gracias a ataques XSS se pueden hacer ataques de Session Hijacking, ataques de Click-Jacking, Cross-Site Request Forgery, etcétera, todos aprovechándose de la posibilidad de inyectar código que se va a ejecutar en el cliente. Si dejamos de lado los XSS Google-Persistentes, existen tres tipos de XSS.


Figura 3: Conferencia de "Ataques XSS Google Persistentes" por Chema Alonso

- XSS Directo: Es conocido como XSS Persistente, se da en los formularios y se ejecuta cuando un usuario accede a la ruta donde se ha inyectado el código. Estos XSS Persistentes o Stored-XSS son muy peligrosos y aparecen periódicamente en plataformas de eCommerce, CMS, LMS, etcétera, sobre todo en plugins.

Figura 4: Esquema de una ataque XSS Directo

- XSS Indirecto: Es conocido como XXS Reflejado, la inyección de código se da en formularios, URLs o vídeos, entre otros. Su objetivo radica en modificar los valores que la aplicación web utiliza para comunicarse a nivel interno con dos de sus rutas.

Figura 5: Esquema de una ataque XSS Indirecto o XSS Reflejado
 
Evidentemente, para prevenir estos dos tipos de ataques de Cross-Site Scripting, al igual que para prevenir cualquier tipo de ataque de inyección, como son también los ataque de SQL Injection, se debe aplicar un filtro para validar todos los campos que utilicemos como input, ya sean por GET o por POST.  Como dijo Michael Howard en su libro de Writing Secure Code:

"All input is evil until it proves otherwise"

Para evitar estos ataques es importante que tu servidor web también haga uso de los Security Headers para utilizar todas las capacidades de los navegadores de hoy en día en la fortificación contra ataques XSS, para ello hay que configurar:

- X-XSS-Protection
- Content-Type
- X-Content-Type-Options
- X-FrameOptions
- Acces-Control-Allow-Origin

Para verificar las políticas de fortificación de tu web, y cómo están configurados los HTTP Security Headers, puedes usar la web de SecurityHeaders.io que te dará un informe de cómo está de bien configurada tu aplicación web.

- XSS DOM Based: Este tipo de XSS, en vez de darse en la parte HTML se da en el Document Object Model. En los dos tipos anteriores el payload se puede observar en la respuesta de la página o ruta. Sin embargo, en este tipo de XSS el código HTML y la respuesta serán exactamente iguales. El payload solo se podrá observar en tiempo de ejecución o investigando el DOM de la página. 

Figura 6: Esquema de ataque XSS DOM-Based

Para evitar los ataques XSS DOM Based en nuestra aplicación es recomendable utilizar un método de salida adecuado. Es decir, imagina que quieres que el usuario escriba un input en una etiqueta <Div>. En este caso en vez de utilizar innerHTML, utiliza innerText o textContent. De esta forma el usuario puede ejecutar la misma acción, pero evitando una vulnerabilidad XSS DOM Based.

- Ataques DoS/DDoS: Uno de los ataques de XSS, además de los citados en los párrafos anteriores, se basa en la capacidad de forzar al navegador a pedir una determinada URL si somos capaces de inyectar código en la página de respuesta. Esto se puede utilizar para llevar a un cliente con un navegador vulnerable a una web con un Kit de Exploits en un ataque de Watering Hole, o para hacer un ataque de DoS (Denial of Service)

En este último caso el objetivo es dejar sin recursos el servidor para evitar que los usuarios se conecten a este. Funciona sobrecargando el servidor con un gran número de peticiones en intervalos muy pequeños gracias a que muchos clientes le van a pedir recursos pesados de manera involuntaria desde sitios vulnerables a XSS.

Figura 7: Esquema de ataque DDoS. El atacante inyecta el XSS en el servidor web vulnerable y conecta los visitantes a su XSS-Botnet o JavaScript Botnet para hacer un DDoS. 

Estos ataques, cuando se basan en exploits XSS almacenados en sitios de gran cantidad de usuarios a los que se fuerza a pedir recursos pesados en el servidor de la víctima, da como consecuencia ataques DDoS (Distributed Denial of Service). Para el servidor atacado por las peticiones masivas es un problema, y por eso se utilizan soluciones como Cloudflare, AntiDDOS o captchas para proteger los recursos "pesados" para evitar estos ataques. Cada visitante del sitio con el exploit XSS se convierte en un bot de una XSS-Botnet, que funcionan de forma similar a las Javascript Botnets.

Figura 8: Owning bad guys {and mafia} with Javascript Botnets

- Ataques Cross-Site Request Forgery (CSRF): Este ataque se suele utilizar para realizar estafas. Consiste en intentar engañar a la víctima para envíe una solicitud HTTP maliciosa que el cliente no controla. Esto se puede hacer con un simple ataque de Phishing con un e-mail o haciendo un ataque de XSS. En cualquier caso, cuando esto ocurre, el atacante consigue que la víctima haga algo involuntario a ella en una plataforma a la que el atacante no tiene acceso.  Las posibilidades de estos ataques son muchas. Desde crearse un usuario, hasta borrar un contenido, forzar el cierre de sesión en una red social como Facebook o darse permisos desde la sesión de un administrador, o, como hemos visto muchas veces, conseguir votos involuntarios en concursos vulnerables a CSRF.

Figura 9: Esquema de ataque CSRF

La forma de prevenir un ataque CSRF es que la URL solo pueda ser llamada desde una web previa que tiene unos tokens que le autorizan como punto de llamada válido. Es decir, el servidor web protege la URL2 enviándole a la URL1 un token aleatorio Anti-CSRF. Cuando el usuario hace clic en un enlace de la web en la URL1 para navegar a la URL2 debe enviar los tokens AntiCSRF. La URL2 comprueba que son correctos y permite que se ejecute. Como el atacante no puede saber cuáles son los tokens AntiCSRF que genera el servidor web, entonces no puede hacer "a ciegas" que la víctima haga algo mediante una inyección de un exploit XSS o de un e-mail de phishing

Además de todo esto, hay que tener en cuenta que, al forzar una petición HTTP contra un servidor, se podrían enviar cookies asociadas en las peticiones HTTP al nuevo servidor, así que hay que fortificar las cookies para que el acceso solo sea Same-Site:Strict o Same-Site-Lax, como se explica en este artículo.

Algunos consejos para evitar los Client-Side Attacks

Ahora que ya hemos hablado de algunos de los tipos de vulnerabilidades y ataques más comunes, vamos a ver unos consejos importantes para tener en cuenta a la hora de realizar nuestro desarrollo. 
  • Desarrollo Seguro: En primer lugar, desarrollar de forma segura siempre debe formar parte del proceso de desarrollo ya que solventar un problema de seguridad cuando una aplicación está desplegada, es mucho más costoso y dañino para el usuario final, que analizar el código y realizar los cambios a priori. Para ello, es mejor trabajar con patrones de diseños conocidos y estudiados que resuelven problemas concretos, en lugar de reinventar la rueda constantemente, y usar soluciones lo más estandarizadas posibles.
  • Despliegue Seguro:No solo hay que hacer que la seguridad esté dentro del ciclo de vida de creación del software, así como en el despliegue de las nuevas releases, así que no solo la seguridad debe estar en el código, sino en los procesos de DevOps, pasando a ser SecDevOps.
Figura 11: Docker "SecDevOps"

  • Fortificación: Las reglas de la fortiticación son Mínimo Privilegio Posible, Mínima Superficie de Exposición y Defensa en Profundidad. Si aplicamos la segunda regla al desarrollo de fontends de aplicaciones web, compartimentar una aplicación, puede ser una buena forma de mitigar el impacto de una vulnerabilidad por lo que se de be optar por patrones como los MicroFrontEnds como una alternativa.
Contenido de Terceros Controlado: En caso de utilizar librerías de terceros, hemos de ser selectivos a la hora de elegir cual implementar ya que esto puede prevenir una o varias brechas de seguridad en nuestra aplicación. Se aconseja buscar librerías respaldadas por la comunidad y en las que se realice un mantenimiento habitual. También, si utilizamos recursos almacenados en servidores CDN, es muy recomendable utilizar el Tag Integrity que nos asegura la no alteración y la integridad del recurso que estamos utilizando. 

Figura 12: Ejemplo de uso de la Tag Integrity

Librerías vulnerables: Auditar las dependencias de nuestros proyectos es una buena práctica. Con el comando npm audit se mostrará una lista de los paquetes vulnerables que existen en nuestro proyecto y podremos ver cual de estas dependencias requieren una actualización.

Content Security Policies: Por último y no menos importante, recomendaros encarecidamente el uso de Content Security Policy. Es el nombre de la HTTP Header que utilizan los servidores web para sacar el máximo de partido de las opciones de fortificación que tienen los navegadores para mejorar la seguridad de una aplicación o página web.

Figura 13: CSP en la web de Facebook 

También se puede implementar vía meta tag. Las CSP suelen ser difíciles de configurar para que se ajusten a todos los comportamientos de todas las webapps en todos los navegadores, pero desde luego son la mejor opción para desplegar de forma fortificada una aplicación web, aunque sea en modo Reporting como hizo Google.

Figura 14: Etiqueta CSP como meta HTTP

Conclusiones

Fortificar una WebApp implica fortificar el end-point, así que desde el servidor web debemos utilizar todas las opciones no solo para fortificar nuestro código y las aplicaciones o frameworks server-side que utilicemos para soportar nuestra arquitectura, sino que deberemos también preocuparnos de todas las opciones de fortificación de los navegadores. Estos son solo algunos ejemplos de algunos ataques que se pueden dar client-side, y el número de cosas que hay que mirar en una aplicación web para tener la fortificación mejor posible es muy alta. 


Como podéis ver, un XSS se le puede escapar hasta a la propia Apple en Apple.com. Por eso, se recomienda tener cualquier WebApp expuesta en Internet, bajo un servicio de Pentesting Persistente, como el que hacemos desde ElevenPaths con el servicio Faast, donde miramos constantemente no solo las vulnerabilidades, sino también las debilidades en la fortificación del servidor y el cliente. Recuerda, si tú no auditas tu web, otro lo hará por ti... gratis.

Autor: Luis E. Álvarezdesarrollador y miembro del equipo Ideas Locas CDCO de Telefónica.

Figura 16: Contactar con Luis Eduardo Álvarez en MyPublicInbox

martes, octubre 15, 2019

Google Chrome forzará la política de SameSite=Lax para proteger tus cookies contra los ataques CSRF

Los ataques Client-Side en los navegadores de Internet han ido disminuyendo un poco, pero solo un poco, debido a la cantidad de mejoras de seguridad que se han ido añadiendo para fortificar el navegador. Por desgracia, no siempre son entendidas todas las protecciones por todos los arquitectos de sitios web, ni por supuesto son configuradas en todas las aplicaciones web que visitas. Un ejemplo de ello son las políticas CSP (Content Security Policies) que tan pocos sitios aún configuran, o la política SameSite que Google Chrome ha optado por forzar por defecto.

Figura 1: Google Chrome forzará la política de SameSite=Lax
para proteger tus cookies contra los ataques CSRF

Para entender su funcionamiento hay que ver cuál es el origen de dicha política de seguridad, entendiendo cuáles son los ataques que intentan bloquear. Para ello, la recomendación es que te leas y estudies en detalle el libro de Hacking Web Applications: Cliente-Side Attacks que explica en detalle ataques como XSS, CSRF, CSSP, SSRF, XSPA & SSJS que escribió Enrique Rando (y con el que también puedes contactar vía MyPublicInbox)

Figura 2: Libro de Hacking Web Applications: Client-Side Attacks

El ataque en concreto que busca mitigar el uso de la política SameSite es el de Cross-Site Request Forguery o XSRF, utilizado para forzar acciones en aplicaciones web hechas por usuarios sin que estos sean conscientes, como vimos en votaciones por Twitter donde gente se aprovechaba de este bug para conseguir mejor posición.

CSRF en un minuto

Supongamos que un usuario tiene abierta la página de su aplicación web para ver sus fotografías, donde puede gestionarlas con unos botones de acción que envían por GET la acción. Por ejemplo, para borrar la foto podía ser algo como.
https://www.miweb.com/gestionarfoto.PHP?id=111&accion=eliminar
Lógicamente, esta acción estaría protegida por una cookie de sesión, lo que hace que si alguien conoce ese enlace, pero no tiene iniciada una sesión válida en miweb.com no enviaría la cookie correcta al servidor y por tanto no se podría ejecutar.

Figura 3: Gmail fue afectado por ataques CSRF en sus inicios

Los ataques CSRF se basan en conseguir que sea la víctima del ataque con una sesión iniciada la que envíe esa petición. Para ello el atacante solo necesita saber cuál es la URL que desea ejecutar y hacérsela llegar a la víctima para que ella voluntariamente mediante un engaño haga clic en ese enlace o involuntariamente mediante una vulnerabilidad en cliente que permita forzar la navegación de la víctima a esa URL. Así de sencillo.

¿Cómo protegernos de los ataques CSRF?

Las aproximaciones para evitar este tipo de ataques han sido varias. Primero, poner el envío de acciones como estas en métodos GET no parece la mejor de las ideas. Al ser una URL toda la información GET queda registrada, así que las aplicaciones modernas utilizan más el método POST para evitar que sea tan fácil de capturar e invocar una acción con solo conocer una URL, eso quita gran cantidad de ataques XSS, que por otro lado son mitigados también con los filtros Anti-XSS en los navegadores.

La segunda de las opciones se basa en hacer que la URL por GET no sea tan predecible, para lo que se crean los tokens Anti-CSRF que se añaden en las páginas autorizadas para poner un enlace de este tipo. Es decir, imaginemos que tenemos una herramienta de administración que tiene un panel para pintar la opción de borrar la imagen. Antes de pintarse esa opción, se solicita desde la página web unos tokens Anti-CSRF al backend, y este los entrega a esa URL del panel. Si alguien quiere invocar la URL de borrar, tiene que conocer esos tokens. Si no, el backend lo desecha.

Figura 4: Ejemplo de token Anti-CSRF en OWASP

Es decir, en la petición POST, o en la GET si así fuera, se añaden los tokens CSRF y se evita que el atacante sea capaz de predecirlos. Por supuesto, es necesario que el backend los compruebe, porque hay muchas webs que los añaden pero no los comprueban en el servidor, lo que hace que poniendo cualquier valor, cuele.

La última protección es evitar que vaya la cookie de sesión pegada a la petición. Es decir, evitar que el navegador envíe la cookie de sesión autenticada al servidor si detecta cualquier problema. Y esto es lo que evita la política de SameSite.

Protección de cookies

Como sabéis, el servidor puede establecer que una cookie que él ha generado la entregue el navegador solo a un determinado dominio, a un determinado path, solo bajo métodos HTTP, y bajo conexiones seguras. Son los famosos flags HTTPOnly, Secure y Path. Esto haría que fuera mucho más difícil robar cookies en ataques de Session Hijacking usando JavaScript o suplantación de servidores en ataques de phishing.
Set-Cookie: Elladodelmal=1; Path=/; HTTPOnly; Secure;
Pero no evitan ningún ataque CSRF, en el que el problema es que la petición al backend se hace desde otra pestaña del navegador. Es decir, desde otro origen distinto al que tiene la sesión abierta. Para ello, se creo la política SameSite. Es decir, si la cookie no se ha creado en esa pestaña, a pesar de que se haga un POST al dominio que creo la cookie, el navegador no debería sacarla del Cookie Jar y enviarla. 

Para eso, en la creación de la cookie se añade la política SameSite y el nivel de restricción, que puede ser Strict o Lax. El primero le dice al navegador que bloquee el envío de la cookie desde otra pestaña sea cuál sea el método HTTP que esté utilizando, mientras que con Lax se permite enviar la cookie si el método es GET.
Set-Cookie: Elladodelmal=1; Path=/; HTTPOnly; Secure; SameSite=Strict;
Esto es así, porque muchas aplicaciones web - especialmente redes sociales - viven de referencias en sitios de terceros y exigiría que el usuario tuviera que iniciar sesión cada vez que hiciera un clic en un enlace. Los que tienen esa forma de funcionar, las acciones importantes las configuran siempre por POST y dejan el método GET para eso, para navegaciones internas entre contenidos. Por eso se creo SameSite=Lax
Set-Cookie: Elladodelmal=1; Path=/; HTTPOnly; Secure; SameSite=Lax;
Pero... no mucha gente ha configurado en sus cookies la política Same-Site, así que Google Chrome ha optado por forzarlo de la siguiente manera.

Google Chrome Same-Site-By-Default-Cookies

A partir de la versión de Google Chrome 78 estará activada la opción que está disponible en modo test desde Google Chrome 76 que, si una cookie no tiene la política SameSite, por defecto será como si llevara la opción de SameSite=Lax. Por lo que puede que si tu web utiliza URLs GET sin SameSite para administrar cosas, tal vez te dejen de funcionar comportamientos que son comunes en tus usuarios.

Figura 5: Flags en Google Chrome 77

Lo suyo es que tengas en mente por qué se utiliza SameSite=Lax y veas si puedes mejorar la seguridad de tu web, pero si no, que sepas que Google Chrome va a forzarlo por defecto. Siempre puedes entrar en Google Chrome, y en los flags de configuración cambiar el valor de la opción Same-Site-By-Deafult-Cookies y Deshabilitarlo, pero lo mejor sería que revisaras tu web.

Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)

lunes, mayo 08, 2017

Apache: Server-Side Session Hijacking con Virtual Hosts hackeados (2 de 2)

Tras haber concluido la primera parte de este artículo, espero haberte dejado intrigado y con ganas de saber cómo se podría hacer un Server-Side Session Hijacking en esa aplicación corriendo sobre un servidor Apache con PHP que hemos dejado bastante fortificado, así que espero que la segunda parte te responda a esa pregunta con algo de información nueva.

Figura 21: Server-Side Session Hijacking con Virtual Hosts Hackeados (2 de 2)

El truco que se puede utilizar es uno bastante sencillo, que está ahí, en muchos servidores Apache que corren sobre servidores GNU/Linux, y consiste en usar una de las características más conocidas de estos sistemas operativos.

Valor simbólico

Hay, al menos, una forma de "traernos" la aplicación víctima al servidor del atacante. Y la que se me viene a la cabeza utiliza una característica del sistema de ficheros: los enlaces. El usuario "net" no puede crear un enlace duro (hard link) al script "index.php" de la aplicación víctima ya que carece de los permisos necesarios. Pero no hay problema para crear enlaces simbólicos. De modo que si ejecutara un comando como el que sigue:
ln -s /var/www/html/com/index.php /var/www/html/net/app.php
...creando un enlace en el virtual hosts del atacante que respondería ante una petición del tipo:
http://danger.example.net/app.php
... entonces el servidor Apache se encontraría con el enlace simbólico:
 "/var/www/html/net/app.php".
Y en esa situación, lo que pueda hacer con él dependerá de la configuración que tenga establecida. Lo más frecuente, y lo que me encuentro en este caso, es que esté activada la opción FollowSymLinks. Esto quiere decir que Apache seguirá el enlace simbólico que le llevará a "/var/www/html/com/index.php".

Y lo abrirá con los permisos de su propietario, "com", y comenzará a interpretarlo. Pronto llegará a una sentencia que da más de pensar de lo que a primera vista parece:
require_once "include/login.inc.php";
Vale. Necesitamos leer el fichero "include/login.inc.php". Pero ¿de qué directorio? La documentación de PHP señala que, para cosas como "require_once" que leen ficheros, existen tres posibilidades:
- Que la ruta de fichero sea absoluta. Del tipo "/var/www/html/index.php". En este caso, está claro el fichero que hay que leer. 
- Que la ruta de fichero comience con "./" o "../", para el caso de sistemas *nix, o ".\" o "..\" para Windows. Entonces la ruta se considera relativa al directorio actual. 
- En otro caso, PHP utiliza una variable de configuración llamada "include_path" que contiene una lista de directorios. Si no encuentra el fichero a cargar en ninguno de ellos, lo intenta con el directorio en el que se encuentra el script. Y, si aún sigue sin encontrarlo, busca en el directorio de trabajo actual.
En el caso de la aplicación víctima tenemos esta última situación. Con una condición curiosa:
- El directorio del script, el que se pidió a Apache, es "/var/www/html/net", controlado por el atacante. 
- El directorio de trabajo es "/var/www/html/com". El de la aplicación víctima.
Gracias a esto, el atacante podría redefinir algunos de los ficheros utilizados en los "require", "require_once", etcétera.

Figura 22: Documentación de inlude & require en PHP

Para ello le basta con crear en su directorio una estructura de directorios similar a la de la aplicación, crear en ella los ficheros que necesite "ajustar" a sus necesidades y asegurarse de que el usuario "com" puede acceder a todo ello. Para lo que necesite la aplicación y no se halle en los directorios del atacante, ahí estará PHP, que se encargará de buscarlo en el directorio de la propia aplicación víctima.

Al ataque

Ya sabemos lo que hay que hacer, de modo que tomamos la shell PHP y nos ponemos a ello. En este caso, redefinimos sólo el fichero "login.inc.php" en el lado de la aplicación atacante para que, sin necesidad de hacer nada, nos cree una sesión con privilegios de administrador:

Figura 23: Creando el login.inc.php alternativo

Aunque los nuevos "app.php" y "login.inc.php" estarán alojados en "/var/www/html/net", el usuario "com" podrá leerlos. Ahora, si visitamos "http://danger.example.net/app.php"...

Figura 24: Accediendo a las opciones de administración

En la imagen superior puede observarse que hemos conseguido acceder a las funcionalidades de administración de la aplicación. Además, la información de diagnostico indica que el proceso está ejecutándose con la cuenta "com".

Por otro lado, en la parte inferior se aprecia que se han usado las herramientas para desarrolladores para obtener el valor de la cookie que se acaba de recibir. Una cookie a la que el usuario "com" sí podrá acceder, pues fue él mismo quien la creó. De modo que, si ahora cargamos "http://webserver.example.com" y se la forzamos:

Figura 25: Forzado de la cookie de sesión

Y ahora, si recargamos la página, obtenemos las opciones de administración.

Figura 26: Hemos hecho el Server-Side Session Hijacking desde
un virtual host hackeado en un Apache con seguridad mejorada.

Y podremos seguir con nuestra sesión sin problemas. Y con privilegios de administración. Así que la fortificación de Apache no ha sido todo lo eficaz que deberíamos esperar, y hay que hacer alguna cosa más para evitar este tipo de ataques. Vamos a ver qué se podría hacer.

Tratar de arreglar las cosas

En casos como éste, poner soluciones es tarea tanto de los desarrolladores de la aplicación como de los administradores del servidor. Y, además, ambos deben tratar de afrontar todos los posibles problemas: ni los desarrolladores deben dar por supuesto que los administradores han configurado el equipo de forma segura. Ni los administradores deben confiar en que las aplicaciones que instalan están bien desarrolladas.

Los desarrolladores podrían haber cambiado las rutas de las que se hace el "require_once" y haberlas convertido en absolutas. Con valores como "/var/www/html/com/include/login.inc.php", poco margen habría quedado para la manipulación.

Debe señalarse que en este caso de nada habría servido que las rutas se hubieran indicado de forma relativa comenzando con "./". Como en "./include/login.inc.php". De hacerlo, las peticiones realizadas a "http://danger.example.net/app.php" serían servidas tomando "/var/www/html/net" como directorio base y al atacante le habría bastado con redefinir - o crear enlaces simbólicos a - todos los ficheros en el directorio "include" de la aplicación víctima.

Figura 27: SymLinksIfOwnerMatch en documentación de Apache

En cuanto a los administradores, hay que recalcar que el uso de "FollowSymLinks" podría haber sido sustituido por "SymLinksIfOwnerMatch", que sólo sigue los enlaces simbólicos si el propietario del enlace es el mismo que el del fichero de destino. Algo que, por otro lado, aparece etiquetado muchas veces como poco recomendable en Internet por sus efectos sobre el rendimiento.

Otra importante mejora sería utilizar "ruid2" en modo "config". Para ello, en el fichero "apache.conf" habría que sustituir el RMode stat por RMode config y añadir unas líneas a la configuración de cada sitio virtual en el fichero "/etc/apache2/sites-enabled/000-default.conf", dejándolo como sigue:

Figura 28: Configuración de sitios virtuales modificada

De este modo se asegura que todo lo que se pida usando el nombre de servidor "danger.example.net" va a ser procesado usando los privilegios de la cuenta "net" y el grupo "net", lo cual evitaría la escalada de privilegios mostrada anteriormente.

Pero quizá pudiera hacer posible otras). Por ejemplo, si se pudiera crear un fichero en una carpeta cualquiera de otro host... ¿quién sabe?. Y pueden presentarse otros ataques de naturaleza diferente que pudieran terminar consiguiendo el mismo efecto. U otro distinto. Puestos a aislar, quizá lo mejor sea dejarse de complicaciones y utilizar una máquina, posiblemente virtual, para cada aplicación. Y, aún así, nunca se sabe.

Conclusión

Al final, la aplicación sí era vulnerable. Muy vulnerable. Al menos, bajo ciertas condiciones. Algo que no es poco frecuente. Los desarrolladores crean un producto y, según lo finalizan, suelen perder control sobre él. No pueden determinar completamente en qué circunstancias está siendo utilizado, qué configuraciones le dan soporte, qué entorno lo rodea, etcétera.

Todo esto que no pueden controlar, deben tratar de preverlo en las etapas de diseño. Ponerse siempre en el peor de los casos: cuando todo falla y, además, hay alguien que intenta sacar partido.

Hablando de la aplicación utilizada en este artículo, los desarrolladores posiblemente deberían, entre otras cosas, haber tomado medidas que evitaran el acceso a las variables de sesión, tanto para lectura como para escritura, por parte de otras aplicaciones. Quizá, cifrando su contenido y manteniendo un hash que permitiera detectar cualquier cambio no autorizado.

Al fin y al cabo, estamos hablando de "confidencialidad" e "integridad". Y eso es parte de la seguridad. Pero, ¿cómo de frecuente es encontrarse estas medidas de protección? ¿y cómo de habitual el no encontrarlas? Si tienes experiencia, tú tendrás una buena estimación.

ANEXO: La aplicación

Solo por responder cualquier duda que pudiera salir, os dejo los códigos utilizados en esta aplicación, para que podáis tener toda la información de lo que se ha presentado en este entorno

Figura 29: Index.php

Figura 30: include/Login.inc.php

Figura 31: include/app.inc.php

Figura 32: include/diag.inc.php

Figura 33: js/1.js

Autor: Enrique Rando, escritor de los libros "Hacking con Buscadores", Hacking Web Applications: SQL Injection y "Hacking Web Technologies" de 0xWord.

Entrada destacada

Hacking IA: Jailbreak, Prompt Injection, Hallucinations & Unalignment. Nuestro nuevo libro en 0xWord

Pocas veces me ha hecho tanta ilusión que saliera un nuevo libro en 0xWord como con este libro de " Hacking IA: Jailbreak, Prompt Inje...

Entradas populares