CVE-2026-22693HarfBuzz是一个开源的文本塑形引擎,广泛应用于各种应用程序和操作系统中处理复杂文字渲染。2026年1月,安全研究人员发现HarfBuzz在12.3.0之前的版本中存在空指针解引用漏洞。该漏洞位于SubtableUnicodesCache::create函数中,当hb_malloc内存分配失败时(例如在低内存环境或使用模拟分配失败的自定义分配器时),函数未对返回值进行NULL检查就直接使用placement new语法在该空指针地址上构造对象。这导致未定义行为,最终引发段错误(Segmentation Fault)。攻击者可通过构造特定字体文件或触发特定内存分配失败场景来利用此漏洞,造成应用程序崩溃,从而影响服务可用性。由于该漏洞可通过网络触发且无需认证即可利用,具有一定的安全风险。
漏洞根源在于src/hb-ot-cmap-table.hh文件中的SubtableUnicodesCache::create函数实现不当。该函数调用hb_malloc尝试分配内存,但在分配失败返回NULL时,代码直接使用placement new语法(如 new (ptr) Type())在该NULL指针处构造对象。正确的做法是在使用指针前应检查malloc返回值是否为NULL,并在分配失败时进行适当错误处理。当hb_malloc因系统内存不足或自定义分配器返回失败状态时,未检查的NULL指针被解引用,触发构造函数调用在无效内存地址上执行,导致程序崩溃。此漏洞属于条件性触发漏洞,需要满足特定的内存分配失败场景。攻击者可通过大量解析复杂字体文件或操纵内存分配行为来触发该条件。修复方案已在版本12.3.0中实现,主要添加了对hb_malloc返回值的NULL检查逻辑。