CVE-2026-44288protobufjs在7.5.6和8.0.2之前的版本中存在安全绕过漏洞。其包含的最小UTF-8解码器错误地接受并解码了超长UTF-8字节序列。攻击者可利用此漏洞构造特殊的二进制数据,绕过应用程序在字符串解码前对原始字节的检查,导致原本被过滤的ASCII字符通过解码后出现,从而破坏应用的安全校验机制。
该漏洞的根本原因在于protobufjs库自带的UTF-8解码器实现不符合标准。标准UTF-8解码应拒绝或替换超长编码,但受影响版本将其解码为对应的规范字符。例如,攻击者可以将斜杠字符(ASCII 0x2F)编码为超长UTF-8序列(如0xC0 0xAF)。如果应用程序在解析protobuf消息前检查原始字节中是否存在0x2F以防止目录遍历,该检查会通过。然而,当protobufjs将数据解码为字符串时,超长序列会被还原为“/”,从而绕过了防御逻辑。这属于一种编码混淆攻击,利用了输入验证层和解码层对字符理解的不一致性。