
CVE-2026-74970 · Omisión del aislamiento de sitios Fission en Firefox WebRender
Severidad de seguridad: moderada. CWE 862 y CWE 284. Corregido en Firefox 154 y ESR 153.1. Bugzilla 2056558.
Bajo Fission, cada proceso de contenido posee un espacio de nombres de PipelineId. Esto son los 32 bits altos de wr::PipelineId. WebRenderBridgeParent::AddPipelineIdForCompositable se ejecuta en el proceso de GPU. Comprobaba la guardia del pipeline raíz y la pertenencia a su propio conjunto. Nunca comprobaba que el espacio de nombres de PipelineId perteneciera al proceso emisor. Las rutas de claves de imagen, fuente y blob en el mismo archivo ya aplican esa comprobación. Un proceso de contenido comprometido puede registrar un PipelineId en el espacio de nombres de otro proceso y sobrescribir ese pipeline de imagen asíncrona de ese origen en el administrador compartido.
Falta la comprobación MatchesNamespace que las rutas de claves de recursos aplican en la ruta de PipelineId y en RemovePipelineIdForCompositable. AddAsyncImagePipeline protege la unicidad solo con MOZ_ASSERT. Eso es una operación nula en las compilaciones de lanzamiento. Por lo tanto, el AsyncImagePipelineManager compartido sobrescribe silenciosamente el pipeline víctima en lugar de rechazar el duplicado.

El modelo de amenaza es un proceso de contenido comprometido. El PoC es un parche del lado del contenido protegido por XRE_IsContentProcess. Forja el espacio de nombres de PipelineId. Se distribuye con una página de prueba que tiene un lienzo WebGL y un iframe fuera de proceso de origen cruzado.
apply poc.patch to mozilla-central and build
MOZ_POC_FORGE_WR_NAMESPACE=999999 ./mach run --temp-profile poc.html
Observado en una compilación de lanzamiento.
[POC-2056558] ACCEPTED cross-namespace PipelineId: sender-namespace=4 pipeline-namespace=999999 (should have been rejected)
Confusión de renderizado de origen cruzado y denegación de servicio entre pestañas. Esto es un bypass de autorización de aislamiento de sitio de Fission. No es corrupción de memoria. Los consumidores posteriores están protegidos contra punteros nulos y cuentan con recuento de referencias, por lo que no permite la ejecución.
Aplica la misma comprobación de propiedad del espacio de nombres que usan las rutas de claves de recursos.
if (!MatchesNamespace(aPipelineId)) {
return IPC_FAIL(this, "PipelineId namespace does not belong to the sending process");
}
Abdulaziz Alasaiqah · https://azoz.my/writeups.html