Crass 1.0.8 corrige un bypass de sanitización CSS en sus consumidores
CVE-2026-116695 afecta a Crass anterior a 1.0.8: una discrepancia al interpretar una URL CSS inválida podía hacer que un sanitizador basado en la biblioteca dejara pasar reglas que el navegador sí aplicaría. La corrección ya está en Crass 1.0.8; el riesgo depende del uso de Crass dentro del filtro CSS de una aplicación.

Crass 1.0.8 corrige un fallo de análisis que podía debilitar a algunos sanitizadores de CSS cuando una aplicación acepta estilos no confiables y los vuelve a emitir. CVE-2026-116695 afecta a las versiones anteriores a 1.0.8; el riesgo práctico depende de cómo el software consumidor use la biblioteca, no de que Crass ejecute contenido por sí sola.
Dos analizadores, una política distinta
Crass es un tokenizador CSS escrito en Ruby: divide la hoja de estilos en piezas que otra lógica puede inspeccionar o transformar. El fallo aparece al procesar una URL mal formada que contiene una barra invertida escapada. Después de esa secuencia, el paréntesis de cierre debía terminar el token de URL inválida, pero Crass podía tratarlo como escapado y seguir consumiendo caracteres que un navegador compatible con la especificación habría interpretado como CSS normal.
-SecureCrew dice: el navegador no firma el mismo contrato de lectura que el parser; si cada uno pone el paréntesis en un sitio distinto, la política queda escrita sobre arena.-
La diferencia importa cuando una aplicación usa Crass para decidir qué CSS permite y después serializa el resultado. Si el filtro no rechaza los tokens de URL inválida en todas las posiciones relevantes, puede creer que ciertas declaraciones siguen dentro de la URL mientras que el navegador las ve como reglas activas. El aviso cita casos en Sanitize, Loofah y rails-html-sanitizer, bajo las condiciones concretas descritas para sus funciones de limpieza; no implica que cualquier instalación de esas bibliotecas sea explotable.
-SecureCrew dice: aquí el bypass no necesita convencer al navegador de una regla nueva; basta con que el filtro crea que ya la descartó cuando el navegador todavía puede leerla.-
Qué podría cambiar en una aplicación
El resultado descrito es CSS que supera un filtro con una interpretación distinta. Según la hoja y el sanitizador implicados, puede permitir cambios visuales engañosos, cargar recursos externos o facilitar exfiltración basada en CSS. El aviso especifica que este fallo no permite ejecutar JavaScript en navegadores modernos: llamarlo XSS directo borraría una distinción técnica importante y exageraría el efecto demostrado.
El requisito central es que la aplicación procese CSS no confiable mediante Crass, tome decisiones de permitir o denegar contenido con ese análisis y vuelva a emitirlo sin rechazar el token defectuoso. Una aplicación que no expone ese recorrido no hereda automáticamente el impacto por tener la gema en su árbol de dependencias. La dependencia transitiva importa solo si participa en esa ruta de limpieza; por eso conviene identificar quién carga Crass y para qué.
La corrección ya estaba publicada
La versión corregida es Crass 1.0.8. La publicación del proyecto describe el error del paréntesis tras la barra invertida y la posibilidad de que filtros CSS basados en Crass dejen pasar reglas que luego se aplican. El registro CVE se hizo público el 27 de octubre, mientras que el proyecto había etiquetado 1.0.8 el 21: el parche precedió al registro público del identificador.
La recomendación del aviso es actualizar Crass a 1.0.8 o posterior, también cuando llegue como dependencia de otro sanitizador. Después, hay que comprobar la versión realmente resuelta y volver a probar la política de CSS no confiable en la aplicación afectada. No hay una mitigación práctica equivalente: rechazar toda entrada con la secuencia de barra invertida bloquea el disparador conocido, pero puede descartar CSS legítimo y no sustituye al parche.
-SecureCrew dice: el número de versión en el archivo de dependencias no siempre es el que termina ejecutándose; que el arreglo esté publicado no significa que ya haya cruzado el despliegue.-
Diccionario de la Crew
Tokenizador CSS — componente que separa una hoja de estilos en tokens para que otra lógica pueda analizarla.
Sanitizador CSS — filtro que permite, elimina o transforma CSS no confiable antes de devolverlo al navegador.
Token de URL inválida — unidad que el analizador asigna a una URL mal formada según las reglas de sintaxis CSS.
Dependencia transitiva — paquete que llega a una aplicación a través de otra biblioteca, aunque no se declare como dependencia directa.


