网页字体的内存安全性 | 博客 | Chrome 开发者

主要观点:

  • Chrome 从 FreeType 迁移到 Skrifa,Skrifa 用 Rust 编写,可让 Chrome 字体处理更安全、迭代更快。
  • FreeType 存在诸多安全问题,如使用不安全语言、项目特定问题、依赖问题等,虽经模糊测试仍有问题漏检,替换为 Rust 可避免多类漏洞。
  • Skrifa 是 Chrome 图形库 Skia 的安全替换库,已逐步向用户推出,未来还将用于操作系统字体。
  • Skrifa 注重安全性,避免自身不安全代码,借助 bytemuck 处理字节 reinterpretation,同时重视正确性,通过 fauntlet 工具对比输出,进行大量像素比较和模糊测试。

关键信息:

  • 发布时间:2025 年 3 月 19 日
  • Skrifa 作者:Dominik Röttsches、Rod Sheeter、Chad Brokaw
  • Skrifa 基于 Rust,用于替代 FreeType
  • FreeType 存在多种安全问题及模糊测试的局限性
  • Chrome 迁移过程:2024 年 8 月在 Chrome 128 中为少数字体格式启用 Fontations,2025 年 2 月在 Chrome 133 中用于所有 web 字体等
  • Skrifa 注重安全性,避免自身不安全代码,借助 bytemuck,重视正确性,通过 fauntlet 对比,进行模糊测试且未发现安全关键漏洞

重要细节:

  • FreeType 用于计算字体指标和加载提示轮廓,在 Chrome 多个系统中使用,存在大量用户暴露风险
  • 安全问题类别包括使用不安全语言(如手动内存管理、 unchecked 数组访问、整数溢出、无效类型转换等)、项目特定问题(宏掩盖类型、新代码添漏洞、缺乏测试等)、依赖问题(依赖库存在问题)
  • 字体文件复杂,包含多种信息,模糊测试有局限性,如难以达到良好代码覆盖、数据同步难等
  • Skia 依赖 FreeType,Skrifa 是其安全替换库,Chrome 团队开发新 Skia 字体后端并逐步推出
  • Skrifa 组件设计为不可变,有 700 多个单元测试,通过 fauntlet 工具对比输出,在 Chromium 集成前进行大量像素比较,自 2024 年 6 月持续模糊测试发现 39 个非安全关键漏洞
阅读 3
0 条评论