CVE-2025-12758validator.js是一个流行的JavaScript验证库,广泛用于Node.js和浏览器环境中对用户输入进行验证。该库的isLength()函数存在一个安全漏洞,版本低于13.15.22的受影响版本在处理包含Unicode变体选择符(\uFE0F、\uFE0E)的字符串时,未能正确计算字符串长度。Unicode变体选择符是用于修改字符显示形式的特殊符号,例如将表情符号从文字形式转换为表情符号形式。攻击者可以利用此漏洞构造包含特殊Unicode序列的输入字符串,使得isLength()函数返回错误的验证结果,导致应用程序接受超出预期长度的字符串。这可能引发多种安全问题,包括数据库字段截断、缓冲区溢出风险,以及拒绝服务攻击等。
isLength()函数的验证逻辑存在缺陷,未能正确处理Unicode变体选择符(\uFE0F和\uFE0E)。当字符串中包含这些变体选择符时,函数可能将其视为独立字符进行计数,或者在某些情况下完全忽略它们,导致字符串的'视觉长度'与'实际长度'不一致。例如,一个包含表情符号和变体选择符的字符串可能被计算为2个字符,而实际上它包含多个代码点。攻击者可以利用这一特性绕过基于isLength()的长度验证检查,提交超出应用程序预期的超长字符串。在数据库存储场景中,这可能导致数据被意外截断;在需要精确长度控制的场景中,可能引发缓冲区处理问题;在极端情况下,大量畸形输入可能导致应用程序资源耗尽。