2 puntos por GN⁺ 2024-03-07 | 1 comentarios | Compartir por WhatsApp
  • Under New Management es una extensión que verifica periódicamente si la información del desarrollador de las extensiones de navegador instaladas ha cambiado en Chrome Web Store o Firefox Add-ons
  • Si la información del desarrollador cambia, muestra una insignia roja en el ícono de la extensión para que el usuario pueda notar el cambio de propiedad
  • La necesidad surge del problema de que los desarrolladores de extensiones reciben con frecuencia ofertas de adquisición, y en casi todos los casos el comprador intenta aprovecharse de los usuarios existentes
  • Es posible que los usuarios no sepan que la propiedad de una extensión instalada cambió y que podría haber sido comprometida, por lo que esta herramienta les da la oportunidad de decidir con más criterio
  • Como el navegador impone restricciones para modificar dominios de marketplaces de extensiones, la verificación de la información del desarrollador se delega al servidor API de ExBoost

Detección de cambios de propiedad de extensiones

  • Under New Management verifica de forma intermitente si la información del desarrollador de las extensiones instaladas ha cambiado en Chrome Web Store o en la tienda de Firefox Add-ons
  • Si hay cambios, se muestra una insignia roja en el ícono de la extensión para que el usuario pueda reconocer el cambio de propiedad
  • El objetivo es dar a los usuarios la oportunidad de tomar una decisión informada sobre el software que usan

Por qué es necesario

  • Los desarrolladores de extensiones reciben constantemente ofertas para comprar sus extensiones
  • El README afirma que en casi todos los casos el comprador busca engañar a los usuarios existentes
  • Es posible que los usuarios no sepan que la propiedad de una extensión instalada cambió y que ahora podría haber sido comprometida

Cómo instalar

Compilar desde el código fuente

  • Under New Management usa Plasmo
  • pnpm install: instala las dependencias
  • pnpm dev: ejecución local
  • pnpm build --zip: compilación de release
  • pnpm build --target=firefox-mv3: compilación para Firefox

Por qué se necesita un servidor externo

  • El navegador aplica reglas especiales para modificar dominios de marketplaces de extensiones
  • Por ejemplo, no se pueden configurar reglas declarative_net_request para chromewebstore.google.com
  • Por eso, la verificación de la información del desarrollador se delega al servidor API de ExBoost

1 comentarios

 
GN⁺ 2024-03-07
Comentarios en Hacker News
  • El ID de la extensión se deriva de la clave privada que el desarrollador subió junto con la app la primera vez a la tienda, y si después el ZIP subido contiene otro key.pem, el ID cambia
    Sin embargo, si no hay key.pem, el ID de la extensión se mantiene igual. Así que, si el ID cambia, es posible que haya cambiado el propietario, pero también podría ser que el dueño original le haya entregado la clave privada al nuevo propietario. Google no exige la clave privada en cada subida, así que el nuevo propietario puede distribuir cambios sin esa clave
    El ecosistema de extensiones es interesante, así que también estoy creando herramientas para este ámbito. Quiero hacer un repositorio de GitHub para una extensión específica, registrar cada actualización como cambios en el repositorio y luego ejecutar analizadores estáticos y un análisis dinámico de contaminación para rastrear si entradas del usuario fluyen hacia sinks peligrosos como eval o postMessage: https://github.com/milesrichardson/crxmon

    • Hace tiempo una extensión para Opera llegó a la portada y se volvió popular, y alguien ofreció comprarla por una suma bastante grande
      Durante la negociación dije que retiraría la extensión y entregaría todo el código fuente para que la distribuyeran ellos mismos, pero la otra parte esperaba que también entregara las credenciales de la cuenta de extensiones de Opera. Al final cancelé el trato, y aunque este tipo de herramienta puede ser útil hasta cierto punto, coincido en que sería mejor un escáner de malware para extensiones
    • Esto no es cómo funciona una infraestructura de clave pública (PKI). Dudo que en las extensiones de Chrome realmente se suba una clave privada como archivo PEM
      El desarrollador debería firmar la extensión o el manifiesto con la clave privada, y compartir la clave pública o incluirla en la subida. Las actualizaciones también deberían seguir firmándose con la misma clave privada, y mientras la clave no cambie, se puede verificar con la clave pública de la primera subida que se usó la misma clave privada. Que las subidas posteriores incluyan o no la clave pública no es esencial. Si se vende o comparte la clave privada, otra persona puede crear actualizaciones legítimamente firmadas, pero ese riesgo existe porque el firmante no mantiene secreta la clave privada. Si Google o quien sea comparte la clave privada, la garantía de procedencia de la extensión se rompe
    • Si cambia el ID de la extensión, habría que instalar explícitamente la nueva versión, y no se actualizaría automáticamente
      Pero de verdad me pregunto si es posible que Google permita que un nuevo propietario distribuya cambios sin la clave privada. Chrome Web Store es extremadamente quisquilloso incluso con cosas menores, así que suena raro que no le importe algo así
      Uso 3 extensiones publicadas solo para testers, y las uso sin modo desarrollador ni rsync/robocopy para instalarlas fácilmente en varias máquinas. Pero este fin de semana Chrome deshabilitó todas en una sola máquina con el motivo de que “no están registradas en Chrome Web Store y podrían haberse agregado sin que el usuario lo supiera”. Ni siquiera puedo forzarlas a activarse; en la tienda aparecen como “deshabilitadas” y sale “activar ahora”, pero solo desaparece el banner y al refrescar vuelve a aparecer. Ese perfil de Chrome inició sesión con una cuenta de lista permitida
      La insignia de la página de Chrome Web Store muestra que mi cuenta de desarrollador no tiene sanciones y está en buen estado. Si no hubiera iniciado sesión con el correo de la lista permitida, ni siquiera podría ver esa página. No me convence que “se preocupen tanto” por esto y aun así permitan actualizaciones sin clave
    • La forma descrita sí es posible, pero no es la forma obligatoria ni la habitual en que se genera el ID de una extensión. Normalmente el desarrollador solo sube un archivo ZIP en el primer envío, y la Chrome Web Store genera y guarda la clave privada que se usará para la firma de distribución pública
      CWS nunca debe cambiar el ID de una extensión existente, porque el ID identifica de forma única a la extensión. Si el ID cambia, el cliente de Chrome no puede solicitar actualizaciones para esa extensión, y ni CWS ni Chrome admiten una función para migrar usuarios de una extensión a otra
      Hasta donde sé, CWS rechazará un ZIP que incluya key.pem después del primer envío. Si el ID de la extensión cambió, entonces no es la misma extensión. Que el nuevo propietario pueda distribuir cambios sin el PEM es en general correcto, pero si el desarrollador firmó directamente la extensión enviada a CWS, no podrá actualizarla sin el PEM. Sinceramente no sé si eso sigue siendo posible hoy; antes era una trampa enorme donde los desarrolladores perdían la base instalada al perder la clave privada que usaron para sus subidas
    • Si alguien comprara una extensión con malas intenciones, también querría la clave privada
      Casi todos aceptarían al final si el precio fuera el correcto; la única diferencia entre personas sería cuánto tendrían que pagarles
  • Hace unos meses hice una extensión gratuita y de código abierto para saltar rápido los anuncios de YouTube, la compartí aquí y llegó a la portada.
    En menos de una semana, alguien que había comentado en mi post de Show HN la copió y promocionó su versión en Reddit; se volvió viral y superó los 300 mil usuarios: https://github.com/rkk3/ad-accelerator/blob/main/lessons_pos...
    Me pregunté por qué había decidido copiar una extensión gratuita y de código abierto en vez de enviar un PR, pero unas semanas después estaba tratando de venderla por una suma de cinco cifras en varios sitios. Puede que todavía la tenga, pero también me llamó la atención que el desarrollador registrado en Chrome Store ya no era el mismo que en el lanzamiento inicial.

    • Viendo la versión del otro lado, el contexto cambia un poco: https://news.ycombinator.com/item?id=38463233
      No entiendo todo el trasfondo, pero esa extensión en realidad es básicamente un JavaScript trivial de 50 líneas. Es bastante osado decir que alguien la robó. La idea en sí no tiene valor, y también es difícil afirmar que fuera algo muy novedoso. Incluso asumiendo que la otra parte se inspiró, la cronología de quién hizo qué primero no está del todo clara.
    • Dijiste que “la próxima vez la promocionarías de forma más agresiva”, pero creo que todavía podrías hacerlo ahora. La extensión sigue existiendo, así que aún puedes promocionarla.
      Aunque cuánto tiempo YouTube y Chrome permitirán que siga funcionando ya es otro tema, y puede que a ellos tampoco les guste.
    • Ojalá esto termine bien, pero si no, quizá la actitud de Jeff Tweedy pueda ayudar.
      “…si el mundo entero canta tu canción / y todos cuelgan tu pintura / recuerda que lo que era tuyo ahora es de todos / no es que esté bien o mal / puedes aferrarte a eso todo lo que quieras / pero el único que se pondrá ansioso serás tú…” — “What Light” de Wilco
    • Me intriga por qué nunca escribes el handle del usuario de HN como texto y solo lo pones en imágenes. No me queda claro qué modelo de amenaza estás asumiendo al mencionar explícitamente el nombre del usuario copiado en este comentario o en la entrada del blog.
    • A eso parece que le llaman que te hayan “zuckered”.
  • Esto es realmente útil, pero como ya dijo otra persona, debería ser una función integrada del navegador.
    Todavía no he revisado el código fuente a fondo, pero me da curiosidad si avisa automáticamente cuando hay un cambio de propiedad. No tiene que ser en tiempo real, pero si lo notifica al arrancar, o si hay que ejecutar manualmente algún comando de verificación.
    Hace unos meses este tema también fue muy comentado: https://news.ycombinator.com/item?id=36233068
    Como decía el comentario destacado en ese momento, Firefox y Chrome harían bien en cambiar su política de actualización automática de extensiones en situaciones así. Si una extensión revela un cambio de propiedad, la actualización debería requerir aprobación del usuario; y si no lo revela, el usuario debería poder reportarla como maliciosa. Además, probablemente el título debería llevar “Show HN”.

    • Soy el creador. La comprobación se ejecuta automáticamente cada hora, y si detecta cambios aparece una insignia sobre el ícono de la extensión.
      Consideré que una notificación más fuerte sería demasiado intrusiva.
    • Si se pusiera un tope de velocidad que obligara a los usuarios a aprobar explícitamente las actualizaciones por cambios en la propiedad de la empresa, una proporción considerable de usuarios se perdería.
      Eso reduce el valor del producto o de la empresa al momento de venderla. Es favorable para el usuario, pero desfavorable para el creador que tiene que pagar las cuentas.
  • Esto no es ninguna broma.
    Durante varios años fui dueño de una extensión de Chrome de código abierto bastante popular, y el total de donaciones no alcanzaba ni para pagar el café de un mes.
    Pero recibí muchísimas ofertas para vender la extensión, y por montos absurdos, con fines claramente maliciosos, incluso en casos donde lo decían abiertamente. Las rechacé todas, pero no es una postura sensata esperar que la moralidad del desarrollador original sea el único sistema de seguridad y privacidad en una situación así.

    • La parte realmente maliciosa no sería detectada por la herramienta del post. Eso se debe a que exigen no solo la propiedad de la extensión y del código, sino incluso la transferencia de la cuenta de desarrollador.
  • Entiendo bastante el objetivo y también las limitaciones técnicas, pero que envíe la lista completa de extensiones del usuario a una red publicitaria centrada en extensiones se ve un poco sospechoso
    Dicen que necesitan un servidor externo porque el navegador tiene reglas especiales para modificaciones en dominios de mercados de extensiones como chromewebstore.google.com, así que delegan la verificación de la información del desarrollador al servidor API de ExBoost
    https://www.extensionboost.com/
    ExBoost se describe como una red de colaboración entre extensiones de navegador que quieren más usuarios y reseñas. Funciona poniendo un espacio de ExBoost dentro de la UI de la extensión para mostrar promoción de extensiones similares o solicitudes de reseña

    • Buen hallazgo. Revisando un poco más, por ahora no envían metadatos vinculados al navegador, solo una lista de IDs de extensiones separada por comas. Claro, la IP se puede usar fácilmente
      Si ves el resultado del API para una extensión instalada, aparecen metadatos relacionados con el desarrollador. Probé la API de Chrome chrome.management.get(id), pero no devuelve esa información, y tampoco parece haber una forma de obtener programáticamente el contenido de manifest.json. Así que, para hacer lo que esta extensión intenta hacer ahora mismo, sí hace falta una fuente externa
      https://github.com/classvsoftware/under-new-management/blob/...
      https://api.extensionboost.com/v1/developer?extension_ids=gh...
    • ExBoost también parece ser un proyecto del autor de la publicación original. Viéndolo con buena fe, probablemente ya tenía los datos necesarios para extraer metadatos como el propietario a partir del ID de la extensión, así que usó ese servidor API
    • Hice algunas extensiones pequeñas por diversión, y hace unas semanas recibí un correo de ExBoost con el asunto “Collaboration To Grow Our Extensions”
      Básicamente decía que pusiera su código en mi extensión, y era algo como “si tú muestras lo mío, yo muestro lo tuyo. Costo 0, todos ganan”. Me pareció sospechoso, lo marqué como spam, y no se veía distinto de otros correos basura que recibía de estafadores
    • Es una conexión inesperada para un proyecto de este tipo. Sorprende
    • No entiendo por qué tendría que conectarse a un servicio externo. Yo pensaba que si cambiaba el propietario, cambiaba el ID de la extensión, así que bastaría con seguir el ID localmente y mostrar un aviso cuando aparezca uno nuevo. Puede que esté entendiendo algo mal
  • Las extensiones de Firefox tienen el programa de extensiones recomendadas de Mozilla, y dicen que antes de ser incluidas pasan por una revisión técnica estricta por parte de expertos de seguridad del personal: https://support.mozilla.org/en-US/kb/recommended-extensions-...
    Aun así, solo con el documento de soporte no queda claro si todas las actualizaciones se revisan antes de publicarse. Si las revisan cada vez, eso resolvería en parte este problema para las extensiones populares, aunque también me pregunto cuánto retraso generaría cuando haga falta una actualización de seguridad urgente

    • Revisan todas las actualizaciones. Incluso extensiones muy populares como uBlock Origin a veces quedan bloqueadas
      Mi política personal actual es permitir que solo esas extensiones curadas se ejecuten en todos los sitios y pestañas
    • Suena a que estaría bien tener un “marketplace” algo engorroso, con reglas y con aplicación real de esas reglas
      Una estructura donde incluso organizaciones muy populares o conocidas puedan ser vetadas si incumplen repetidamente las reglas o intentan saltarse el funcionamiento del marketplace
  • En los casos realmente maliciosos, muchas veces cuando una extensión cambia de manos lo que venden son directamente las credenciales de la cuenta de desarrollador de Google, así que en esos casos esto no lo detecta

    • ¿De entrada está permitido vender una cuenta de desarrollador completa?
  • Hace mucho instalé adblock y me encantó
    Compré una máquina nueva y tuve que instalarlo de nuevo, y fue entonces cuando vi los permisos por primera vez; eran de locos. Tiene lógica que, para bloquear anuncios, tenga que poder ver lo que yo veo, pero nunca lo había pensado seriamente
    Ahora uso Pi-hole y no uso ninguna extensión

    • Pi-hole no bloquea anuncios ni rastreadores tan eficazmente como uBlock Origin
      Aun así, está bueno que haya opciones para quien las quiera, y cada persona tiene un perfil de riesgo y preocupaciones distintas
    • Una de las razones de los cambios de permisos que llegan con Manifest V3 es justamente reducir el alcance de lo que las extensiones pueden tocar desde el principio
      Algunas extensiones son de código abierto y confiables, pero muchas no, y parece que a la gente le cuesta verificarlas
    • Safari tiene una interfaz especial que permite que los bloqueadores de contenido funcionen sin ningún permiso
      Tú proporcionas la lista de bloqueo y el navegador hace el bloqueo directamente. No sé si en Firefox se puede también: https://developer.apple.com/documentation/safariservices/cre...
    • Me pregunto a cuál extensión adblock te refieres aquí. Por ejemplo, uBlock usa listas de bloqueo locales
    • ¿Y en móvil cómo lo haces?
  • Si yo fuera comprador de extensiones maliciosas, pensaría en mantener igual el nombre del desarrollador para evitar esto. ¿O la Chrome Extension Store controla estrictamente los nombres de desarrollador?

    • Es difícil impedir de verdad que un creador de extensiones deshonesto entregue la contraseña por fuera y luego se lave las manos con un “ups, me hackearon”, para dejarle la extensión a un comprador sospechoso
      Por ejemplo, un actor estatal malicioso podría ofrecerle decenas de millones de dólares al autor de uBlock para conseguir mucho acceso a navegadores. No sé si cerraría económicamente, pero extensiones más de nicho seguramente se podrían apuntar por mucho menos
    • Probablemente sea una violación de los Términos de Servicio de Chrome Web Store
  • Me pregunto si este problema es peor en Chrome que en otros navegadores
    La única extensión de navegador que uso es HonorLock, un software de supervisión de exámenes, y estoy obligado a usarlo. La extensión solo funciona en Chrome, así que a veces uso Chrome por culpa de HonorLock. Si abres el enlace de instalación desde Safari, te dice que instales Chrome: https://app.honorlock.com/install/extension
    Me pregunto si hay alguna característica que solo tengan las extensiones de Chrome que haga posible el caso de uso de HonorLock y que al mismo tiempo vuelva más útil la herramienta de este artículo

    • Solo fue elegido como un vector de ataque de extensiones porque Chrome es el navegador más popular
    • Si solo usas HonorLock, no sé cómo sobrevives sin AdBlock