Refuerzo de la seguridad de memoria en las fuentes web
(developer.chrome.com)- Skrifa es una nueva biblioteca de procesamiento de fuentes escrita en Rust, desarrollada para reemplazar a FreeType y permitir que Chrome procese fuentes de forma más segura
- Gracias a la seguridad de memoria de Rust, se reducen los problemas de seguridad y mejora la velocidad de avance de la tecnología de fuentes
- Al pasar de FreeType a Skrifa, mejoró la calidad del código y se redujo el tiempo necesario para corregir problemas de seguridad
Razones para reemplazar FreeType
-
En el entorno web, es necesario poder obtener recursos no confiables desde distintos orígenes y usarlos de forma segura
-
En Chrome ya se aplicaban varias medidas de seguridad para usar fuentes web de manera segura
- Sandboxing: como el código no es seguro y las fuentes no son confiables, se ejecutan en un entorno de protección separado
- OpenType Sanitizer: limpia e inspecciona las fuentes antes de procesarlas
- Fuzzing: prueba de forma exhaustiva las bibliotecas relacionadas con el procesamiento de fuentes
-
FreeType se usa como biblioteca predeterminada de procesamiento de fuentes en Android, ChromeOS y Linux
- Si aparece una vulnerabilidad de seguridad, existe el riesgo de afectar a una gran cantidad de usuarios
Principales problemas de seguridad detectados en FreeType
- 1. Uso de un lenguaje no seguro
- Como FreeType está escrito en C, pueden producirse vulnerabilidades como errores de memoria y desbordamientos de búfer
- 2. Problemas propios del proyecto
- Falta de tipos de tamaño explícitos debido al uso de macros
- Las macros (
FT_READ_*,FT_PEEK_*) ocultan tipos de tamaño explícitos (int16_t, etc.)
- Las macros (
- Aparición repetida de bugs en código nuevo
- Se detectaron problemas al agregar soporte para COLRv1 y OT-SVG
- Falta de pruebas
- Como es difícil generar fuentes de prueba complejas, surgieron carencias en las pruebas
- Falta de tipos de tamaño explícitos debido al uso de macros
- 3. Problemas de dependencias
- Se presentaron problemas recurrentes en bibliotecas usadas por FreeType como bzip2, libpng y zlib
- 4. Límites del fuzzing
- Los archivos de fuentes, por sus estructuras de datos complejas, pueden contener problemas que el fuzzing no detecta
- Las fuentes incluyen reglas compuestas y máquinas de estados (state machine)
- Como es difícil generar estructuras válidas, resulta complicado realizar un fuzzing efectivo
- Los archivos de fuentes, por sus estructuras de datos complejas, pueden contener problemas que el fuzzing no detecta
Introducción de Skrifa y proceso de adopción en Chrome
- Skia, la biblioteca gráfica usada por Chrome, utiliza FreeType para los metadatos y el renderizado de fuentes
- Para reemplazar FreeType por Skrifa, Chrome reconstruyó el backend de fuentes de Skia
Etapas de adopción de Skrifa
- Chrome 128 (agosto de 2024):
- Implementación piloto de Skrifa para formatos de fuente menos usados, como las fuentes a color y CFF2
- Chrome 133 (febrero de 2025):
- Adopción completa de Skrifa para el procesamiento de fuentes web en Linux, Android y ChromeOS
- En Windows y Mac, se usa como procesador alternativo cuando el sistema no admite un formato de fuente
Refuerzo de seguridad y rendimiento
- 1. Mayor seguridad de memoria
- Rust garantiza la seguridad de memoria de forma predeterminada
- Sin embargo, por motivos de rendimiento se usa la biblioteca bytemuck
- Se emplea cuando es necesario reinterpretar bytes mediante estructuras de tipos fuertes
- Cuando futuras actualizaciones de Rust permitan conversiones seguras, se planea migrar a esa funcionalidad
- 2. Mejora de la exactitud
- Skrifa refuerza la legibilidad del código, la mantenibilidad y el rendimiento en multihilo al garantizar la inmutabilidad de las estructuras de datos
- La calidad del código se verifica con aproximadamente 700 pruebas unitarias
- Con la herramienta fauntlet se comparan las salidas de FreeType y Skrifa → se verifica si coinciden en calidad visual
- 3. Pruebas amplias y fortalecimiento de la seguridad
- Desde junio de 2024 se realizan pruebas de fuzzing sobre Skrifa y el código de integración
- Hasta ahora se encontraron 39 bugs → no son vulnerabilidades de seguridad (errores visuales o fallos controlados)
- Se confirmó una mejora en la calidad del código sin derivar en problemas de seguridad
- Desde junio de 2024 se realizan pruebas de fuzzing sobre Skrifa y el código de integración
Conclusión y planes futuros
- La adopción de Skrifa, basado en Rust, fortaleció la seguridad y mejoró la calidad del código
- Aumentó la productividad del desarrollo y ofrece a los usuarios un entorno de fuentes más seguro
- En el futuro se planea aplicar Skrifa al procesamiento de fuentes del sistema en Linux y ChromeOS
2 comentarios
La vez pasada fue zlib, esta vez freetype…
Que los veteranos de toda la vida vayan siendo desplazados uno por uno… se parece bastante al mundo en el que vivimos.
Comentarios de Hacker News
En Google se necesita al menos 0.25 de un ingeniero de software para resolver los problemas encontrados mediante fuzzing
La verdadera fuerza de Rust está en la transición gradual hacia la seguridad y en su capacidad de integrarse en proyectos existentes
Estoy aprendiendo sobre cómo se renderizan las fuentes según la disposición de subpíxeles del panel del monitor
Skia es una biblioteca avanzada que realiza composición tipográfica avanzada y almacena glifos en caché
Las fuentes pasan por OpenType Sanitizer antes de ser procesadas