3 puntos por GN⁺ 2025-03-21 | 2 comentarios | Compartir por WhatsApp
  • 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.)
    • 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
  • 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

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

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

 
iolothebard 2025-03-22

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.

 
GN⁺ 2025-03-21
Comentarios de Hacker News
  • En Google se necesita al menos 0.25 de un ingeniero de software para resolver los problemas encontrados mediante fuzzing

    • Me gusta la forma de medir este trabajo adicional
    • Ojalá hubiera una forma de usar por completo las instrucciones de hinting de TTF incluso sin usar FreeType
    • Parece que en Windows y macOS ya no hay forma de habilitar un hinting adecuado
    • FreeType también establece por defecto un hinting inadecuado desde la versión 2.7
    • Si tienes curiosidad por cómo se ve un texto con hinting adecuado, puedes consultar las capturas de pantalla
    • Sospecho que Windows abandonó el hinting de fuentes desde XP
    • El escalado de la interfaz y ver imágenes rasterizadas en pantallas de distintas resoluciones provoca borrosidad
  • La verdadera fuerza de Rust está en la transición gradual hacia la seguridad y en su capacidad de integrarse en proyectos existentes

    • Se pueden migrar componentes uno por uno sin una reescritura a gran escala
  • Estoy aprendiendo sobre cómo se renderizan las fuentes según la disposición de subpíxeles del panel del monitor

    • Windows asume que todos los paneles usan una disposición RGB y el software ClearType renderiza las fuentes según esa suposición
    • En los nuevos tipos de pantalla aparece fringing en el texto
    • Existen herramientas de terceros como MacType o Better ClearType Tuner, pero no funcionan en Chrome ni en Electron
    • A medida que las nuevas tecnologías de panel se vuelven comunes, hace falta un esfuerzo para definir un estándar que transmita la disposición de subpíxeles a la capa gráfica
    • En Blur Busters se ve algo de esfuerzo, pero todavía falta conciencia por parte de los proveedores
  • Skia es una biblioteca avanzada que realiza composición tipográfica avanzada y almacena glifos en caché

    • Skia está escrita en C++ y fue creada por Google
    • FreeType mide y renderiza glifos, y admite varios modos de antialiasing y hinting
    • FreeType está escrito en C y no fue creado por Google
    • Me pregunto por qué FreeType fue reescrito primero en Rust
  • Las fuentes pasan por OpenType Sanitizer antes de ser procesadas

    • Me pregunto si el formato de fuente es tan malo como para que haya que sanear los archivos
    • El desbordamiento de enteros se identifica como una de las causas de las vulnerabilidades
    • Muchos lenguajes no detectan desbordamientos, y las arquitecturas modernas como RISC-V tampoco incluyen traps de overflow
    • No logro entender por qué lenguajes nuevos como Rust no incluyen traps de overflow