1 puntos por GN⁺ 2025-07-13 | 4 comentarios | Compartir por WhatsApp
  • La actualización MV3 de Chrome elimina el permiso webRequestBlocking para debilitar la funcionalidad de los bloqueadores de anuncios existentes
  • El autor descubrió en 2023 un bug que permitía eludir webRequestBlocking incluso en el entorno MV3
  • Este bug se producía por una estructura débil en los bindings de JavaScript y porque código antiguo seguía presente
  • Al manipular el ID de instancia de WebView, era posible eludir la verificación de permisos y usar funciones de bloqueo incluso en el entorno MV3
  • Actualmente ya se aplicó un parche, por lo que este método de evasión ya no funciona

MV3 y los cambios en los bloqueadores de anuncios

  • Chrome está eliminando gradualmente las extensiones MV2 y avanzando en la transición hacia MV3
  • MV3 elimina el permiso webRequestBlocking, impidiendo que los bloqueadores de anuncios bloqueen dinámicamente solicitudes de red mediante scripts
  • En lugar de ese permiso, se añadió la API declarativeNetRequest, pero no ofrece el mismo nivel de flexibilidad
  • Como resultado de este cambio, el rendimiento de los bloqueadores de anuncios se redujo de forma significativa

Limitaciones de la estructura de bindings de JavaScript

  • Aunque el núcleo de Chrome está desarrollado en C++, las extensiones funcionan con JavaScript y también acceden a las API de extensiones mediante bindings de JS
  • Hasta 2015~2016, las API se inicializaban y validaban insertando archivos JS (módulos de bindings de extensiones) en los sitios
    • Este enfoque era vulnerable al override de funciones globales y prototipos de JS, lo que provocó varios bugs de Universal XSS
  • Después, Google migró los bindings principales a C++, pero algunos archivos de bindings en JS aún permanecen
  • Incluso hoy, ciertas API como chrome.webRequest siguen usando una estructura de bindings en JS

Evasión usando la clase de eventos de solicitudes web

  • En MV2, el bloqueo de solicitudes web podía implementarse con el siguiente código

    chrome.webRequest.onBeforeRequest.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking'])
    
  • En MV3, la opción blocking está prohibida, por lo que el bloqueo normal no es posible

  • Sin embargo, es posible crear un objeto de evento arbitrario mediante .constructor del evento webRequest

  • Internamente, una clase wrapper especial de los bindings de JS administra ese objeto de evento

  • Si se especifica opt_webViewInstanceId, uno de los parámetros del constructor, es posible saltarse la lógica de permiso exclusiva para apps de plataforma y evadir la verificación del permiso de bloqueo

    let WebRequestEvent = chrome.webRequest.onBeforeRequest.constructor
    let fakeEvent = new WebRequestEvent("webRequest.onBeforeRequest", 0, 0, 0, 1337)
    
    fakeEvent.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking'])
    
  • Aunque estaba diseñado para que solo lo usaran apps de plataforma, la validación deficiente del ID de WebView permitió su abuso por extensiones normales

Resultado y parche de seguridad

  • Gracias a esta vulnerabilidad, en la práctica sí era posible desarrollar un bloqueador de anuncios completo incluso en el entorno MV3
  • El autor reportó este bug a Google en 2023, y en Chrome 118 fue corregido verificando correctamente la propiedad de los permisos de WebView
  • No se pagó recompensa, debido a la naturaleza estructural del problema, que solo permitía evadir permisos sin exponer datos adicionales
  • Este caso muestra que modificar unas cuantas decenas de líneas de código puede inutilizar una actualización de seguridad de una gran empresa

Conclusión y referencia

  • El bug ya fue corregido y ya no funciona
  • Como caso similar e interesante de vulnerabilidades relacionadas con extensiones de Chrome, también existe un issue que recibió un número CVE y una recompensa de $10,000 (ver una entrada de blog aparte)

4 comentarios

 
hhcrux 2025-07-14

Probablemente, después de esa actualización, las empresas de bloqueadores de anuncios aumentaron aún más sus ingresos.
Las apps independientes que bloquean por completo a nivel de red solo se pueden usar de forma pagada, así que seguramente se vendieron bastante.

 
crawler 2025-07-14

Subir una vulnerabilidad que ya no significa nada después de 2 años, y encima decir que no le pagaron... en lo personal no me parece muy cool.
Pero supongo que también hay que escribir este tipo de cosas en un blog para demostrar el propio valor, ¿no?
Sinceramente, yo también quisiera aprender esa mentalidad y escribir mucho más en mi blog.

 
ndrgrd 2025-07-14

Simplemente usen Firefox. En los últimos 1 o 2 años se ha vuelto mucho más rápido, así que no está nada mal.
Yo lo he usado como navegador principal durante años y de vez en cuando lo comparo con Chrome; sobre todo últimamente siento que Firefox ya es lo suficientemente bueno para usarse sin problema.
Incluso las páginas web que ignoraban los estándares web, como los bancos de Corea, últimamente han corregido bastante eso, así que la mayoría también funciona bien en Firefox.
Además, la personalización es mucho más fácil en Firefox.

 
GN⁺ 2025-07-13
Comentarios de Hacker News
  • Aunque me gustaría probar Firefox, los bugs ocasionales al cargar sitios web y el hecho de que no se puedan instalar PWA (Progressive Web Apps) son el mayor obstáculo. Chrome y los navegadores derivados lo soportan desde hace mucho tiempo, y no entiendo bien por qué Firefox todavía no lo implementa. Encontré una extensión de terceros (PWAs for Firefox), pero me da desconfianza usarla por temas de privacidad

  • Aunque exista una forma de esquivar lo que hace Google, no creo que esa sea la dirección correcta. Si la gente no está de acuerdo con los movimientos de Google, la única forma correcta es abandonar por completo Chrome y todos los navegadores basados en Chromium. Es importante golpear el monopolio de Google y quitarle el control sobre el rumbo futuro de la web

    • Creo que los monopolios de hoy existen porque todos olvidaron la lección que debimos aprender con IE. La causa es no aprender estándares web y seguir distribuyendo Chrome junto con las aplicaciones
    • Ese no es el punto del artículo; de hecho, el artículo menciona que este bypass fue parcheado en Chrome 118
    • Dan ganas de responder con sarcasmo y preguntar si alguna vez cambió algo de verdad por decir “hay que golpear el monopolio”
    • Siendo realistas, eso no va a pasar
    • Mucha gente cree que cambiarse a un navegador Chromium sin el rastreo de Google no es suficiente, pero en realidad creo que ese es justamente el marco que Google quiere imponer. Firefox es claramente distinto de Chrome y no es tan fácil pasarse desde Chrome. En cambio, Brave, Chromium personalizado, Vivaldi y otros son prácticamente iguales a Chrome, pero sin el rastreo de Google. La idea de que “no sirve porque Google todavía controla Chromium” me parece precisamente el tipo de FUD (miedo, incertidumbre y duda) que convendría difundir desde la perspectiva de Google
  • La verdadera solución es usar Firefox. uBlock Origin funciona mejor en Firefox
    uBlock Origin works best on Firefox

    • Como siempre he usado Firefox, ni siquiera sabía que esto estaba pasando. Me di cuenta porque mi esposa estaba viendo anuncios en YouTube, a pesar de que yo le había instalado uBlock hace tiempo
  • También dudo que MV3 sea realmente más seguro que MV2 para Google. No parece que cambiar a MV3 refuerce la seguridad de forma esencial

    • Sinceramente, me sorprende que haya gente que realmente se crea eso. El propio artículo empieza con un conflicto de interés bastante claro. Permitir que una extensión conozca los sitios que visita el usuario y la información de sus solicitudes ciertamente crea un entorno vulnerable. Aun así, confío más en uBO que en las empresas de publicidad y recolección de datos, así que lo sigo usando así
  • Sobre el caso de alguien que encontró una forma de saltarse el adblocker y fue a avisarle a Google, hubo una reacción del tipo: “lo descubre y va corriendo a delatarlo con Google, genial”

    • En realidad, si un adblocker hubiera empezado a usar esto, Google lo habría parcheado de inmediato y ese desarrollador no habría obtenido ningún beneficio. La ironía es que al final igual no habría ganado nada
  • OP reportó a Google un “issue” que no le causaba ningún problema y así bloqueó una forma en que los desarrolladores de extensiones podían saltarse las limitaciones de MV3. Ojalá haya valido al menos $0

    • Estos bypasses habrían sido eliminados por Google en menos de un día. De hecho, OP incluso pudo haber recibido una recompensa económica, así que me parece una decisión bastante razonable. No lo criticaría
    • No estoy de acuerdo con esa conclusión. Toda la responsabilidad recae en Google. Si OP no hubiera reportado el issue, incluso si otro adblocker hubiera usado ese método más adelante, Google igualmente lo habría prohibido muy rápido. Incluso podrían haber tomado una medida extrema como eliminar por completo esa extensión de la Web Store
    • Si un adblocker que la gente realmente usara hubiera implementado este método, Google obviamente lo habría bloqueado enseguida. No era una especie de cheat code utilizable para siempre
    • Yo también lo veo así. OP básicamente trabajó gratis para una megacorporación y terminó haciendo la web más incómoda para todos. ¿La razón? Bueno... “por seguridad”, supongo. Increíble
  • Desde que empecé a usar Brave, no extraño Chrome para nada
    Brave

    • De hecho, Brave me parece más incómodo que Chrome. Más allá del problema con Brendan Eich, tiene demasiada basura metida en el navegador: funciones arbitrarias, el bloqueo de anuncios (Brave Shields) que ni siquiera se puede desactivar por completo, elementos relacionados con criptomonedas, botones de descarga de web apps que no se pueden quitar, UI imposible de limpiar, etc.
    • Brave sigue siendo una empresa con fines de lucro y por defecto trae demasiadas funciones innecesarias, así que es comprensible que genere rechazo. Aun así, no faltan contenidos con consejos para adelgazar la configuración, como "Cómo poner a dieta a Brave"
    • Al final el motor sigue siendo Blink, así que no deja de ser un cambio cosmético. Nunca he visto un navegador Blink que mantenga Manifest V2 de forma permanente. Y aunque existiera, sería un soft fork y no duraría mucho
    • Brave también está basado en Chromium, así que en la práctica es casi lo mismo que Chrome. Manifest V3 tarde o temprano terminará aplicándose
    • También existe una postura crítica que dice que no deberías usar Brave browser
      Stop using Brave browser
  • Frente a la afirmación de que “los adblockers necesitan sí o sí webRequestBlocking, y como Google gana dinero con la publicidad, quitar esa función fue algo muy intencional”, también hay quien opina que “eso no es cierto; cualquiera puede usar uBlock Origin Lite en Chrome y en manifest v3, rinde bien y no noto diferencia con el uBlock Origin de antes. Todo se filtra en C++, así que es mucho más rápido. Claro, existe un límite máximo de reglas, pero por ahora sigue siendo totalmente manejable”

    • Aun así, Lite es Lite, así que sus posibilidades son limitadas. Por definición no es el adblocker original, así que no es exactamente lo mismo
  • Fuera de la laptop del trabajo, casi nunca uso Chrome y en mi día a día sigo con Firefox. Aun así, me da pena no poder usar uBlock Origin en la navegación laboral, donde sí me ayudaba mucho para investigar, consultar documentación y cosas así

  • Si lo único que quieres es un bypass, basta con instalar Firefox

    • Creo que Firefox deja bastante que desear tanto como navegador web como plataforma base. Lástima que Zen no use Chromium