Las extensiones de los navegadores y algunos consejos sobre su seguridad

Libro. There is a cat con the internet!

En Attacking browser extensions un nuevo recordatorio de que las extensiones del navegador son programas externos que ejecutamos en nuestra máquina y que deberíamos prestarles atención.

Una extensión del navegador es un conjunto de ficheros HTML, CSS, y JavaScript que realizan conjuntamente algún tipo de transformación para ‘mejorar’ nuestra navegación.

A browser extension is a group of HTML, CSS, and JavaScript files that work together to enhance the browsing experience.

También tienen un fichero de configuración manifest.json donde se pueden especificar algunas cuestiones como el contexto de ejecución (contenido, ventanas emergentes -popup-, y de fondo).

In the manifest.json file, we can specify the context that a file will run. The three major contexts are the webpage/content script, the popup and the background.

El contexto de fondo es el más potente, porque permite el acceso a la mayoría de APIs de extensiones del navegador, dándole control sobre la experiencia de navegación, con muchas capacidades.

The Extension APIs give an extension a lot of control of the user’s browsing experience, with the ability to arbitrarily control tabs, read from the websites, or modify and read cookies, to name a few.

También hay un sistema de permisos, que permite limitar este control.

Luckily, these abilities are each locked behind permissions, requested in the manifest.json file under the “permissions” key.

Habría que fijarse en permisos como el de pestaña activa (activeTab), que puede ser bastante peligroso.

This activeTab is interesting for exploitation and malicious extensions alike due to its immense power.

Por su parte. los permisos relacionados con el contenido pueden afectar porque interactúan con el DOM (modelo de objetos de la página), escuchar las interacciones del usuario, y reaccionar ante ellas.

The frontend of an extension is just as important as the backend when extensions want to interact with the DOM of the pages visited by the user

The content script may also listen for user interaction on the current page, allowing an action to be taken based on the user interaction.

Finalmente el contexto de las ventanas emergentes tiene que ver con la ejecución de JavaScript que interactuará con la extensión, permitiendo cambios en la configuración, realización de peticiones…

… the popup will let the user directly interact with the functionality of the extension, usually allowing them to change settings and make requests to backend servers that are tied to the extension.

Naturalmente, con acceso a las APIs de extensiones, con las correspondientes consecuencias.

Like the background script, the JavaScript running in the popup page can use all the Extensions APIs that the extension has permissions for and any JavaScript runs in the domain of the extension.

Por lo tanto, las extensiones pueden ser la causa de:

  1. Aceptar contenido proporcionado por un atacante y utilizarlo de forma insegura.

The extension takes attacker-supplied input from the website and uses it in some unsafe way.

  1. Otra extensión o un sitio web envían un mensaje a la extensión y ésta la utiliza de forma peligrosa.

Another extension or a website sends a message to the extension and the extension uses that input in a dangerous way.

  1. La extensión utiliza algunos de los parámetros de la URL cuando se carga y los utilizar para realizar alguna operación con privilegio para realizar acciones peligrosas. Para que esto sea posible debería haber algún problema en la configuración.

The extension takes in URL parameters when it is loaded, and those parameters are used to do a privileged operation. This requires a vulnerable configuration.

La primera consecuencia es que pueden ocurrir cosas malas pero que, en general, no es tan fácil.

why browser extensions are generally pretty secure, because it often requires multiple points of failure in order to introduce an exploitable vulnerability

Sobre las posibles vulnerabilidades que podrían ocurrir son las esperables: cross-site scripting, server-side request forgery e inyección en el API de extensiones (Extension API injection).

Entre las mitigaciones, los navegadores implementan aleatorización de los identificadores (UUID randomization) de forma que un ataque en el HTML tenga menos posibilidades de éxito.

Firstly, many browsers have randomized the ID of the extension, so that attacking exposed HTML files is no longer a threat, unless a leak of the internal ID, called the UUID, can be found.

Modelado con herramientas como CodeQL (proporcionado por GitHub, de cuyo blog es el artículo), que permiten detectar comportamientos maliciosos de algunos flujos de ejecución.

CodeQL’s code injection query gets a RemoteFlowSource (any Javascript APIs that potentially take in data from an external system or user) and looks for flow into Javascript code injection sinks such as eval.

Interesante. Los ‘malos’ sólo tienen que encontrar una de todas las vías de entrada que existen.

Los generadores de números seudoaleatorios y la seguridad

Los dados del r5

Esta es la edición de final de año del recordatorio de que los números aleatorios y las computadoras no se llevan bien. En esta ocasión de la mano de John D. Cook, y RNG, PRNG, CSPRNG.

Empieza recordándonos que la mayoría de generadores de números aleatorios son generadores de números seudoaleatorios (pseudorandom number generators PRNGs).

Most random number generators are pseudorandom number generators (PRNGs). The distinction may be pedantic or crucial, depending on context. In the context of cryptography, it’s critical.

Y la vuelta de tuerca es que para la criptografía (y seguridad en general) no nos basta con estos números (que sería suficientes para simulaciones, integración numérica, juegos, …) sino que necesitamos los llamados generadores criptogr´ficos seguros de números seudoaleatorios (cryptographically secure pseudorandom number generator, CSPRNG).

A PRNG may be suitable for many uses—Monte Carlo simulation, numerical integration, game development, etc.—but not be suitable for cryptography. A PNRG which is suitable for cryptography is called a CSPRNG (cryptographically secure pseudorandom number generator).

¿La razón? Hay técnicas de análisis criptográfico muy pontentes, que pueden ayudar si hay sesgos o la calidad de los números generados no es buena por algún motivo.

If a PRNG fails statistical tests, it has some sort of regularity that potentially could be exploited by cryptanalysis.

Los generadores de números seudoaleatorios tienen buenas propiedades desde el punto de vista de la estadística, pero no tienen por qué ser seguros.

A PRNG may have excellent statistical properties, and pass standard test suites for random number generators, and yet be insecure.

Un generador de números aleatorios físico, con buenas propiedades estadísticas podría tener, sin embargo, buenas propiedades desde el punto de vista de la seguridad. Nombra el conocido caso de las lámparas de lava de Cloudflare (How do lava lamps help with Internet encryption?)

I suspect that a physical RNG with good statistical properties will have good cryptographic properties as well, contrary to the usual case. Cloudflare famously uses lava lamps to generate random bits for TLS keys.

Pero también puede ocurrir que los sistemas generadores físicos fallen las pruebas estadísticas (por ejemplo, que aparezcan sesgos).

A physical RNG might fail statistical tests. For example, maybe the physical process is truly random but biased.

¿Alguien de estadística en la sala?

Los vehículos, los nuevos servicios y los mismos fallos de siempre

La gilda del norte

Creo que venimos hablando de este tema desde las primeras versiones de este sitio, desde varios puntos de vista:

  • Las diferentes industrias que se digitalizan cometen los mismos errores que las que lo hicieron anteriormente y no aprovechan lo que se ha aprendido en estos años. No sólo eso, sino que a pesar de desarrollar nuevas plataformas, no lo hacen con los principios adecuados, que garanticen que se hace bien.
  • La industria del automóvil ya ha pasado varias veces por estos problemas (diez años va a cumplir, por ejemplo, este: [PFD] Remote Exploitation of an Unaltered Passenger Vehicle a cargo de Charlie Miller (uno de los primeros en ganar notoriedad con estos temas) y Chris Valasek, también curtido en estas batallas.

Em Hacking Kia: Remotely Controlling Cars With Just a License Plate Sam Curry nos hablan del caso del conocido fabricante Kia y una serie de fallos que permitirían a un atacante controlar algunas funciones importantes del vehículo conociendo su matrícula.

… a set of vulnerabilities in Kia vehicles that allowed remote control over key functions using only a license plate.

Esto incluía, claro, obtener información personal:

Additionally, an attacker could silently obtain personal information, including the victim’s name, phone number, email address, and physical address.

La cuestión es que con instrucciones y métodos muy sencillos era posible realizar los ataques porque casi todo parece estar mal: un identificador que es fácil de conocer, pero también otros fallos de acceso a los sistemas que realizaban las acciones. En el artículo se detallan las ideas principales.

¿De quién es la responsabilidad de los fallos de seguridad?

Decoración navideña

Llevamos mucho tiempo (tal vez demasiado) en el que hacer programas inseguros no era algo que preocupara mucho a nadie. Desde hace algún tiempo venimos escuchando llamadas a la responsabilidad, regulaciones y tímidas amenazas para mejorar el tema. En CISA boss: Makers of insecure software must stop enabling today’s cyber villains Jen Easterly, directora de la Cybersecurity and Infrastructure Security Agency (CISA) de los EEUU ha ido un poco más allá, diciendo que los vendedores son los que están creando problemas, abriendo la puerta a los malos para atacar a sus víctimas.

“The truth is: Technology vendors are the characters who are building problems” into their products, which then “open the doors for villains to attack their victims,” declared Easterly during a Wednesday keynote address at Mandiant’s mWise conference.

Ya puestos, se quejaba también de darles nombres ‘molones’ a los grupos criminales, dándoles aspectos ‘glamourosos’.

Easterly also implored the audience to stop “glamorizing” crime gangs with fancy poetic names. How about “Scrawny Nuisance” or “Evil Ferret,” Easterly suggested.

Y no sólo eso, porque también afirmaba que el nombre de vulnerabilidades de los programas (software vulnerabilities) contribuía a difuminar la responsabilidad y que deberían llamarse defectos de los productos (product defects). No se trata de señalar las víctimas por no actualizar, sino a los autores por desarrollar productos que requieren esas actualizaciones Ya puestos, se quejaba también de darles nombres ‘molones’ a los grupos criminales, dándoles aspectos ‘glamourosos’.

Easterly also implored the audience to stop “glamorizing” crime gangs with fancy poetic names. How about “Scrawny Nuisance” or “Evil Ferret,” Easterly suggested.

Y no sólo eso, porque también afirmaba que el nombre de vulnerabilidades de los programas (software vulnerabilities) contribuía a difuminar la responsabilidad y que deberían llamarse defectos de los productos (product defects). No se trata de señalar las víctimas por no actualizar, sino a los autores por desarrollar productos que requieren esas actualizaciones.

Even calling security holes “software vulnerabilities” is too lenient, she added. This phrase “really diffuses responsibility. We should call them ‘product defects,’” Easterly said. And instead of automatically blaming victims for failing to patch their products quickly enough, “why don’t we ask: Why does software require so many urgent patches? The truth is: We need to demand more of technology vendors.”

Muy interesante.

Modestamente, ese mensaje también lo decíamos en En las Mesas de Debate AICAR ADICAE sobre ciberseguridad , aunque creo que es un mensaje que hay que trasladar cuidadosamente en determinados sitios porque hay gente que tiene comportamientos casi ‘suicidas’ y no deberíamos formentar tampoco eso.