La subestimada promesa de las extensiones de navegador como software hackeable (2019)
(geoffreylitt.com)- A diferencia de las plataformas móviles y de escritorio, las extensiones de navegador son un raro ecosistema de software hackeable que permite a los usuarios modificar las apps web de maneras no previstas por sus desarrolladores originales
- Las más de 180 mil extensiones en Chrome Store y la tasa de instalación cercana a la mitad de los usuarios de Chrome muestran que, si hay una forma sencilla, los usuarios comunes también arman por su cuenta una experiencia de uso personalizada
- La amplitud de usos de las extensiones surge de la apertura de la web, como el código cliente legible por humanos, el marcado significativo y los layouts web estándar, más que de APIs específicas por app
- Extensiones como ingreso de contraseñas, lectura de kanji, anotaciones, bloqueo de anuncios y reproducción a 2x funcionan como pequeñas herramientas en múltiples sitios, creando una experiencia de software distinta del modelo centrado en apps gigantes
- Aunque hay que seguir abordando las extensiones maliciosas y las invasiones a la privacidad, si se equilibra accesibilidad, compatibilidad y permisos, es posible preservar la extensibilidad que permite a los usuarios cambiar más profundamente el software que usan
Por qué las extensiones de navegador son especiales
- Las discusiones recientes sobre extensiones de navegador se han concentrado en las extensiones maliciosas que recopilan el historial web y en las restricciones de Google a los bloqueadores de anuncios, pero las extensiones siguen siendo un caso especial de software dirigido por el usuario
- Entre las principales plataformas de software, las extensiones de navegador son una rara excepción que permite y fomenta que los usuarios modifiquen las apps que usan todos los días fuera de las intenciones del desarrollador original
- En plataformas móviles y de escritorio, este tipo de cambios es raro o imposible, pero en el navegador se volvió una actividad cotidiana
- Las extensiones reviven la sensación de que los usuarios pueden controlar más profundamente la forma en que usan la computadora
Software que los usuarios arman por su cuenta
- Cuando una plataforma de software es lo bastante abierta, también cambia la manera en que los usuarios comunes se relacionan con el software
- Si instalas cuatro extensiones de Gmail y cambias desde el diseño visual hasta funciones clave, en cierto sentido armaste tu propio cliente de correo electrónico
- Los usuarios dejan de ser consumidores pasivos de apps prefabricadas y pueden configurar por sí mismos una forma personalizada de usar la computadora
- Chrome Store tiene más de 180 mil extensiones, y casi la mitad de los usuarios de Chrome instala extensiones de navegador
- Esta popularidad muestra que, cuando existe una forma sencilla de extender el software, muchos usuarios aprovechan realmente esa oportunidad
Una plataforma hackeable más que APIs específicas por app
- Las extensiones de navegador tienen casos de uso muy amplios: ingreso de contraseñas, lectura de kanji japonés, simplificación del diseño visual de Gmail, resaltado y anotación de artículos, guardado para leer después, reproducción de video a 2x, bloqueo de anuncios, entre otros
- La clave de esta amplitud de usos es que la mayoría de las extensiones modifican las aplicaciones de maneras que el desarrollador original no planeó específicamente
- Cuando un periódico japonés publica un artículo, la extensión puede funcionar aunque el medio no haya considerado la compatibilidad con una extensión de lectura de kanji
- Los desarrolladores de extensiones no quedan atados a APIs específicas por app que reflejan la perspectiva del desarrollador de la app sobre la extensibilidad, por lo que tienen mayor libertad creativa
- Varias características de la plataforma web hacen posible una extensibilidad no planificada
- La forma tradicional de distribución en la web entrega el código cliente al navegador en un formato legible por humanos
- Incluso cuando el código está ofuscado o compilado desde otro lenguaje, los source maps son importantes para conservar esta ventaja
- El modelo de layout de la web fomenta un marcado semántico estandarizado
- Las extensiones de gestores de contraseñas funcionan porque las páginas web usan de forma confiable la etiqueta
formpara enviar contraseñas, en lugar de implementaciones propias
- Aunque puede hacer falta alguna solución ingeniosa cuando un sitio no fue creado pensando en extensiones, por lo general es posible con una cantidad razonable de trabajo, sin años de ingeniería inversa
- Incluso si puede surgir tensión entre desarrolladores de sitios web y desarrolladores de extensiones, cuando los desarrolladores del sitio no tienen que hacer trabajo adicional, es más común que acepten extensiones creativas
- Las funciones de nicho que solo quiere una minoría de usuarios pueden ser creadas como extensiones por miembros motivados de la comunidad, lo que también reduce la carga para los desarrolladores de la aplicación
Herramientas pequeñas, no grandes apps
- Muchas extensiones de navegador funcionan como herramientas de propósito general que mejoran la experiencia de uso en todos los sitios web
- Una extensión de anotaciones puede usarse en cualquier sitio web, sin exigir una herramienta de resaltado distinta para cada artículo
- Como con un resaltador físico, puedes aprender una herramienta y luego aplicarla en muchos contextos para obtener un gran efecto multiplicador
- En muchas plataformas de software se asume que el sistema operativo ofrece herramientas transversales y que los terceros ofrecen apps independientes y aisladas, pero en las extensiones de navegador los terceros también agregan herramientas
- Las unidades pequeñas de software también cambian la economía
- La mayoría de las extensiones son gratuitas, y su alcance funcional puede ser demasiado pequeño para sostenerlas como un negocio completo
- Aun así, la gente crea extensiones y los usuarios obtienen grandes beneficios de esas pequeñas piezas de software
- Explorar una tienda de extensiones se parece más a un mercado de pulgas de barrio que a un supermercado
- El software grande creado por corporaciones gigantes no es la única forma posible
Las raíces de la apertura de la web
- Desde los inicios de la computación personal hubo una tradición filosófica que veía a las computadoras como un medio interactivo en el que los usuarios podían sumar sus propias ideas y crear sus propias herramientas
- Esta tradición se refleja en sistemas como Smalltalk, Hypercard y, más recientemente, Dynamicland
- Cuando Tim Berners-Lee creó la World Wide Web, imaginó un sistema dentro de esta tradición
- Su visión era “un sistema en el que compartir lo que uno sabe o piensa fuera tan fácil como aprender lo que otros saben”
- Él creía que el navegador web también debía ser un editor de sitios web, pero el navegador Mosaic ganó popularidad sin esa función, algo que lamentó
- La web terminó convirtiéndose en un lugar donde cualquiera puede publicar opiniones o fotos mediante plataformas de redes sociales
- Sin embargo, dentro de apps como Facebook hay que publicar en formatos definidos y usarlas de la manera que la app impone, incluidos los anuncios
- Las extensiones de navegador permiten ir más allá de escribir en un cuadro de texto provisto y cambiar profundamente la forma en que se usa cualquier aplicación de la web
- Aportan una descentralización que impide que las empresas que crean grandes sitios web decidan todos los detalles de la experiencia de usuario
Cómo hacer mejores las extensiones
- Es necesario trabajar para proteger a los usuarios y evitar que las extensiones maliciosas invadan la privacidad
-
Accesibilidad
- Hoy, pasar de usar extensiones a crearlas exige aprender bastante desarrollo web
- También es difícil desarrollar extensiones fácilmente dentro del navegador
- Podría ser posible una transición fluida: editar un sitio web en las herramientas para desarrolladores y luego publicar una pequeña extensión
-
Compatibilidad
- Como las extensiones se enganchan a sitios web de formas no soportadas oficialmente, una actualización del sitio puede romper temporalmente una extensión
- A veces los desarrolladores de extensiones deben corregirlas con urgencia para adaptarse a los cambios
- Hace falta una forma de conectar de manera estable a desarrolladores de sitios web y desarrolladores de extensiones sin depender de APIs explícitas de extensión
- El marcado semántico limpio, el CSS legible por humanos y los source maps son prácticas existentes que facilitan el desarrollo de extensiones
- Si, después del lanzamiento de una nueva versión de software en la nube, los usuarios pudieran seguir usando la versión anterior durante 3 meses, los desarrolladores de extensiones ganarían tiempo para actualizarse a la nueva versión
-
Permisos
- Las extensiones web pueden modificar ampliamente el cliente del navegador, pero no pueden tocar el servidor
- Si el servidor de una app de redes sociales solo ofrece un endpoint para consultar publicaciones en orden cronológico, una extensión de navegador no puede buscar todas las publicaciones por palabra clave
- Si se reconsidera la frontera cliente-servidor, las extensiones podrían hacer cambios más profundos
- Permisos más fuertes hacen más difíciles los problemas de seguridad y privacidad, pero hay que valorar la extensibilidad y encontrar un equilibrio
Posibilidades para la próxima plataforma
- Beaker Browser y la comunidad de la web descentralizada exploran formas en que la web funcione sin servidores centrales
- Este tipo de arquitectura puede dar a los usuarios un control más completo para modificar el lado “servidor” de una aplicación web
- El nuevo proyecto de Tim Berners-Lee, SOLID, incluye el principio de que los usuarios tengan mayor propiedad sobre sus propios datos
- Con más propiedad de los datos, los usuarios pueden manejarlos de forma flexible mediante extensiones y otro software, más allá de lo que permiten las APIs del servidor de la aplicación
- La computación todavía es joven y las plataformas cambian rápidamente
- Las extensiones de los navegadores modernos y las plataformas móviles apenas tienen alrededor de 10 años de existencia
- Qué tan abiertas serán las plataformas del futuro es algo que tendremos que decidir colectivamente
- Las extensiones de navegador son un ejemplo de un lugar donde los usuarios hackean cotidianamente el software que usan y lo hacen suyo
Actualización de 2024
- Al mirar hacia atrás cinco años después de haber escrito el artículo en 2019, se agregaron algunos proyectos relacionados
- Creé una popular extensión de navegador para Twitter y dejé un artículo sobre la experiencia de usar extensiones como forma de arreglar problemas del software que uso todos los días
- Durante mi doctorado con Daniel Jackson en MIT, desarrollé Wildcard, que permite a personas que no programan crear extensiones de navegador desde una hoja de cálculo
- Glen está trabajando en ExtensionPay, una plataforma de monetización para quienes quieren convertir una extensión de navegador en un proyecto sostenible
- Más recientemente, en el laboratorio de investigación Ink & Switch, estoy trabajando hacia el software maleable impulsado por IA
1 comentarios
Opiniones de Hacker News
Soy el autor. Escribí este artículo hace 5 años y, desde entonces, mi convicción sobre el valor del software personalizable ha crecido, aunque algunas de mis ideas cambiaron
Aun así, creo que la discusión sobre extensiones se enfoca demasiado en la seguridad a costa de otros valores. La posibilidad de personalización puede, en algunos casos, ser lo bastante importante como para tener prioridad sobre la seguridad. También hay varias soluciones posibles. En lugar de instalar extensiones de cualquier persona en internet, se pueden compartir dentro de relaciones de confianza, como colegas o amigos, o usar solo extensiones hechas por uno mismo. La programación asistida por IA puede hacer que crearlas uno mismo sea más realista, aunque introduce nuevos problemas de seguridad. También he conocido a personas con ideas de arquitectura de software que reducen esa tensión central; hay un ejemplo en https://www.wildbuilt.world/p/inverting-three-key-relationsh...
En el laboratorio donde trabajo ahora, Ink & Switch, estamos creando software local-first: software colaborativo donde los datos y el código están en tu dispositivo. Además de ventajas como la privacidad, creo que es la base correcta para extensiones más potentes, porque los datos y el código de la app no están encerrados en un servidor: https://www.inkandswitch.com/local-first/
Que en Android puedas crear tu propio teclado personalizado es genial, pero no es nada bueno que alguien pueda convencer a tus abuelos de instalar un teclado con un keylogger integrado. Las extensiones de navegador siempre han sido un ecosistema lleno de malware, y el chiste de borrar barras de herramientas de Internet Explorer en la computadora de tus padres cada vez que vuelves a casa por Acción de Gracias existe más o menos desde 1999
“Sí, puede leer el contenido de mi teléfono. Desde su punto de vista, eso es todo el contenido y no hay nada más. Pero desde mi punto de vista, es solo una carpeta, y está vacía. Es un teléfono nuevo.”
“Sí, esta es mi lista de contactos. Perdón, está casi vacía. Solo hay un número premium caro. Espero que su empresa matriz no llame ahí.”
“Sí, este es mi micrófono. Gracias. Imito bastante bien a Rick Astley.”
“¿Fotos del teléfono? Aquí están. Todas son fotos de nabos. ¿Le gustan?”
En particular, me interesa mucho que herramientas CRDT de propósito general como Automerge o Yjs se conviertan en el formato de archivo base del software local-first, con backends de sincronización y colaboración interoperables encima. Los usuarios podrían acceder directamente a los datos subyacentes con herramientas estándar, y los archivos podrían enlazarse, incrustarse, ramificarse y fusionarse entre sí. Podríamos crear una nueva plataforma hipermedia donde todos los documentos se puedan compartir, bifurcar y editar en tiempo real. Me encanta lo que hace Ink & Switch y espero con ganas sus próximos anuncios
No existe una función tipo “pon el código y el manifest en un directorio y el navegador lo usa”. En la época en que el viejo Greasemonkey simplemente cargaba archivos normales desde el subdirectorio gm_scripts/ del perfil del navegador, esa distribución sencilla hizo que yo creara muchísimos userscripts. En ese entonces extender sitios web era divertido y fácil, pero Mozilla eliminó todo eso
La distribución es realmente horrible. No pienso mandar mi extensión a algún lugar de internet para que la firmen cada vez que hago un cambio en código que escribí para usarlo en mi propia computadora. Además, la última vez que revisé, la herramienta de firmado era una app NPM/node de más de 100 MiB en la que había que confiar, incluso más grande que compilar el kernel de Linux
En 2024, el marco mismo de las extensiones de navegador es muy problemático. La mayoría de las extensiones de navegador son, por proporción, extensiones de Google Chrome, y Google Chrome está dejando claro, en su proceso de aumentar ingresos, que ninguna API está a salvo
Quien crea extensiones con la API de Chrome debe saber que probablemente está invirtiendo esfuerzo en algo que una megacorporación puede aplastar sin pensarlo. Como no quiero vivir en una situación estratégicamente ya perdida como esa, creo que la discusión debería tratar sobre extensiones de Firefox. Firefox tampoco tiene un historial impecable. El cambio a compatibilidad con Google Chrome de hace unos años todavía me molesta muchísimo. Aun así, cualitativamente es una parte mucho mejor con la que tratar
Durante 10 años usé algo llamado “Ad Limiter” tanto en Firefox como en Chrome, y el código era el mismo. El año pasado, cuando Google endureció más las restricciones contra los bloqueadores de anuncios, envió mensajes intimidatorios, y abandoné la versión para Chrome
Por supuesto, también se pueden usar API exclusivas de un navegador específico. Eso es realmente malo, como crear un sitio exclusivo para un solo navegador. Lo básico debería ser compatible. Además, como el código fuente de una extensión siempre se puede ver, puedes modificarlo a una versión que funcione bien en tu navegador y también volver a compartirlo
Muchas extensiones de navegador populares fueron adquiridas por data brokers y usadas para extraer el historial del navegador, así que es difícil decir que estén subvaloradas. El modelo de seguridad y privacidad de las extensiones fue, o sigue siendo, bastante deficiente, por lo que hay que tener mucho cuidado
Por ejemplo, sé que una extensión de capturas de pantalla como Awesome Screenshot absorbía el historial del navegador y lo enviaba a un data broker israelí. Probablemente sea mejor que funciones así existan como funcionalidad integrada del navegador
La frase “si no soy el cliente, soy el producto” es tan cierta que ya suena trillada. Pero ¿qué pasa si realmente soy el cliente? Creo que una parte importante de la desconfianza hacia las extensiones de navegador se debe a que es difícil monetizarlas directamente. Si no estás ganando dinero con una extensión y alguien aparece con un cheque decente para comprarla, es difícil rechazarlo, sobre todo si la extensión implica una carga de soporte para el desarrollador. Por supuesto, como casi todo el mundo, yo también tengo un precio, pero ahora tendría que ser de 7 cifras en dólares, quizá 8, y no creo que nadie vaya a pagar eso por mi extensión. Al ser de pago, la base de usuarios es relativamente pequeña, y justamente por eso tampoco representa una gran oportunidad para la recolección de datos ni para planes malvados
Claro que las apps de escritorio también tienen riesgos, pero históricamente este patrón de adquisición seguida de filtración de datos ha sido relativamente raro en apps de escritorio. Especialmente en macOS, las apps firmadas están en sandbox y no pueden hacer muchas cosas sin permisos del usuario
Por supuesto, muchas de estas extensiones son open source y se pueden auditar. Pero no tengo la habilidad para detectar código malicioso, así que me pregunto si no podría ser un buen caso de uso para la IA. Me gustaría saber si alguien tiene ideas sobre cómo crear buenos prompts para detección de malware
Me gustaría que las extensiones del navegador tuvieran permisos más granulares. Pero el problema de verificar si el software usa los permisos de forma maliciosa es difícil; basta ver el Obfuscated C Code Contest o el Underhand C Contest. También es difícil comunicar permisos con matices a los usuarios. La mayoría de los usuarios no lee o no entiende los detalles técnicos, y puede ser fácilmente inducida a error.
Hay un tip para usar extensiones de forma más segura al probarlas en Chrome. Ve a Profiles > Add profile > Continue without account para crear un perfil separado, y luego instala ahí la extensión que quieras; quedará completamente aislada de los inicios de sesión en pestañas, historial, cookies, etc. de tu perfil normal. Del mismo modo, también puedes usar Chrome Beta o Chrome Canary junto con Chrome normal para instalar extensiones.
Por ejemplo, podrías instalar en este perfil decenas de extensiones de desarrollo web potencialmente riesgosas, y mantenerlo separado, como en un sandbox, del perfil que usas para banca personal o para iniciar sesión en sitios web de tu empresa. No es práctico para todas las extensiones, pero yo lo hago así para desarrollo web y en el perfil personal uso solo unas pocas extensiones.
En la extensión de navegador que vendo, el permiso que realmente quisiera solicitar es “solo puede observar el tráfico de red enviado y recibido por su propia pestaña”, pero en la práctica tengo que pedir el permiso de “leer y escribir todos los datos”. Por eso comparto el tip anterior en la descripción: https://chromewebstore.google.com/detail/checkbot-seo-web-sp...
Espero que la transparencia sea una forma de superar esta barrera de confianza.
[1] Hay que hacer clic en “Details” de la extensión, cambiar la opción “Allow this extension to read and change all your data on websites you visit” a “On specific sites”, y luego agregar los sitios a la lista de permitidos.
Eso de que “las extensiones del navegador evocan la sensación de tener un control profundo sobre cómo se usa la computadora” probablemente hará que los usuarios de Linux quieran decir algo.
Más en general, se parece bastante a la pregunta que intenté discutir hace unos años en un texto titulado “Is Open Source a diversion from what users really want?”. El entusiasmo por poder “hackear” software sin tocar el sistema de build parece mucho mayor que el acceso completo, abierto y teóricamente infinito que ofrece FLOSS. Parece haber razones obvias para ello, pero aun así es un poco decepcionante.
Lo discutí aquí contrastando el enfoque scriptable pero de código cerrado de Reaper con el enfoque scriptable y open source de Ardour: https://discourse.ardour.org/t/is-open-source-a-diversion-fr...
Se pueden hacer hacks interesantes con cosas como LD_PRELOAD, pero no se acercan en absoluto a la flexibilidad y facilidad de acceso de las extensiones del navegador. Tienes derecho a modificar todo el software como quieras, pero la fricción para hacerlo en la práctica es relativamente alta.
Hice una extensión de Chrome recomendada en Chrome Web Store[1], y es realmente preocupante la cantidad de brokers de datos sospechosos que me escriben para comprar mi extensión y llenarla de spyware.
Un desarrollador ingenuo puede crear algo genial y venderlo pensando que alguien le dará mantenimiento, pero en realidad podría poner en riesgo a los usuarios. Google parece hacer bastante bien la revisión del uso de permisos, pero también hay extensiones, como la mía, que necesitan acceder a todo lo que hay en la página. Basta imaginar lo que un broker de datos podría hacer con eso. Hay que tener cuidado al instalar.
[1] https://chromewebstore.google.com/detail/css-selector-helper...
Creo que lo más necesario es un view source para las extensiones del navegador instaladas desde la tienda. Debería ser fácil ver el código fuente y extraer una extensión del navegador como carpeta.
También debería ser fácil saber a qué páginas web accede y qué modifica. El código minificado u ofuscado dentro de una extensión debería estar prohibido, y el código debería ser muy fácil de leer. Por ejemplo, esta extensión dice que “registra la actividad del usuario”, pero es difícil saber qué significa eso en la práctica: https://chromewebstore.google.com/detail/coffeelings/hcbddpp...
La lista completa de sitios web se puede ver en el popup de instalación de la extensión. Chrome Web Store ya prohíbe la ofuscación de código. La minificación está permitida porque no hay una forma significativa de imponer la calidad de los nombres de variables.
No ayudará con código ofuscado intencionalmente, pero debería servir para investigación de seguridad y privacidad en la mayoría de las extensiones.
No son extensiones completas, pero los userscripts y los estilos de usuario logran hacer bastante, y también hay extensiones que permiten a la gente crearlos y usarlos dentro del navegador. Por ejemplo, Tampermonkey[0] y Stylus[1].
Aunque no puedan hacer tantas cosas como una extensión, me parecen tremendamente importantes.
[0] https://www.tampermonkey.net/
[1] https://chrome.google.com/webstore/detail/stylus/clngdbkpkpe...
También los uso para redirigir la vista de “shorts” de YouTube a la vista de video normal y para eliminar el espacio tonto a la derecha de la barra de desplazamiento de Gmail.
No programo en JavaScript/TypeScript, pero sí programo, uso muchísimas extensiones y me considero un power user que jamás usaría un navegador sin el ecosistema de extensiones de Chrome/Firefox. También hice temas para Chrome y VSCode, pero sigo en este punto. Si te gustan el rosa y el cian, está aquí: https://marketplace.visualstudio.com/items?itemName=mikejk8s...
Solo con el aviso de Chrome no tengo ni idea de qué puede hacer, leer, ver o acceder una extensión. “Permitir acceso a los datos de todos los sitios web”: ¿eso realmente significa todos los datos? ¿También lo que escribo? ¿Sabe que navego de una URL a otra? ¿Solo lee recursos? ¿Hay APIs de Chrome que limiten el acceso y que yo pueda ver? No sé de qué debería preocuparme en la práctica.
Uso una extensión de zoom de video que permite ampliar cualquier video en cualquier sitio web; ¿tengo que auditar cada extensión personalmente para asegurarme de que no copie mis datos a algún lado? No tengo idea, y cómo podría saberlo un usuario no técnico.
Tendría especial cuidado con productos de startups de grabación de pantalla/sesión. Aunque no fuera por otra razón, podrían ser especialmente vulnerables a ataques a la cadena de suministro.
Por eso mantengo mi lista limitada a extensiones puntuales hechas por mí, extensiones grandes y conocidas, o cosas cuyo código audité personalmente.
Prefiero los bookmarklets. Son fáciles de editar, están inactivos hasta que haces clic, funcionan en todos los navegadores, también en móvil, y se integran bien con la UI.
Puedes moverlos como quieras, ponerlos en cualquier carpeta de marcadores y asignarles atajos de teclado. Hice un editor que facilita convertir entre código limpio y bookmarklets: https://www.gibney.org/bookmarklet_editor
Me pregunto si habrá buenos bookmarklets que valga la pena compartir.