On 1/10/26 19:54, Alan Coopersmith wrote:
https://github.com/harfbuzz/harfbuzz/security/advisories/GHSA-xvjr-f2r9-c7ww
advises:

HarfBuzz Null Pointer Dereference Vulnerability Report
======================================================

[...]

2. Vulnerability Description and Impact

Description
-----------

A null pointer dereference vulnerability exists in the
SubtableUnicodesCache::create function located in
src/hb-ot-cmap-table.hh:1672-1673. The function fails to check if
hb_malloc returns NULL before using placement new to construct an
object at the returned pointer address.

When hb_malloc fails to allocate memory (which can occur in low-memory
conditions or when using custom allocators that simulate allocation
failures), it returns NULL. The code then attempts to call the
constructor on this null pointer using placement new syntax, resulting
in undefined behavior and a Segmentation Fault.

Impact
------
DoS can be triggered.

3. Scenario

The function prototype is as follows:

// src/hb-ot-cmap-table.hh:1669-1675
static SubtableUnicodesCache* create (hb_blob_ptr_t<cmap> source_table)
{
  SubtableUnicodesCache* cache =
      (SubtableUnicodesCache*) hb_malloc (sizeof(SubtableUnicodesCache));
  new (cache) SubtableUnicodesCache (source_table);
  return cache;
}

[...]

Although all operands are pointer types, there is no null check for the return value of hb_malloc, causing placement new to be executed on a null pointer.

[...]

5. Result

Segmentation Fault occurs.
[...]
Analysis

    Error Type: SEGV (Segmentation Violation)
    Access Address: 0x000000000000 (null pointer)
    Access Type: WRITE (write access)
    Occurrence Location: hb-ot-cmap-table.hh:1692 (inside constructor)
    Root Cause Location: hb-ot-cmap-table.hh:1673 (missing null check)
[...]
Severity: Moderate 5.3 / 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
CVE ID: CVE-2026-22693


The fix is listed as:
https://github.com/harfbuzz/harfbuzz/commit/1265ff8d990284f04d8768f35b0e20ae5f60daae which was merged yesterday, weeks after the 12.3.0 release, despite the CVE record
claiming "This issue has been patched in version 12.3.0."

Aside from the dubious patch, this is a good example of a legitimate bug but bogus CVE:  how exactly does an attacker trigger this without either having *already* completed a DoS attack (consuming all memory) or achieved arbitrary code execution (altering the allocator to return NULL even though memory is available)?

In short, this is a crash bug, but not a security issue.  This is different from (for example) a parser bug that results in NULL being dereferenced if crafted input is processed.

Are we now using CVE IDs as some kind of global bug tracker?


-- Jacob


Reply via email to