# N/A
## 概述
在 `validator` 包 13.15.22 版本之前的版本中,存在一个由于未完全过滤特殊元素(Unicode 变体选择符)引起的漏洞。
## 影响版本
- 受影响版本:`validator` < `13.15.22`
## 细节
- **漏洞函数**:`isLength()` 函数
- **主要问题**:未正确处理 Unicode 变体选择符(如 `\uFE0F`、`\uFE0E`)
- **结果**:导致在计算字符串长度时产生误差
## 影响
- 输入验证可能误判过长字符串
- 导致数据被截断(数据库中)
- 引发其他组件中缓冲区溢出
- 导致拒绝服务(DoS)
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|---|---|---|
| 1 | None | https://github.com/dajneem23/CVE-2025-12758 | POC详情 |
标题: fix(isLength): correctly handle Unicode variation selectors by koral-- · Pull Request #2616 · validatorjs/validator.js · GitHub -- 🔗来源链接
标签:
神龙速读:
## 关键信息
- **漏洞描述:**
- 之前,验证器会从字符串的总长度中减去所有的Unicode变异选择器(\uFE0F, \uFE0E),这使得字符串可以通过最大长度验证,同时包含潜在无限数量的这些字符。例如,字符串“test\uFE0F\uFE0F\uFE0F...”可以绕过最大长度验证的检查。
- 现在,只有直接跟在基础字符之后的变异选择器才会从长度中减去。如果它们出现在字符串的开头或序列中,它们将正确计算在总长度内。
- **修复措施:**
- 确保变异选择器只有直接跟在基础字符之后时才从长度中减去。
- 编写测试以验证修复的有效性。
- 重新放置`isLength`测试。
- **代码审查和合并:**
- 该修复已通过代码审查,并且Codecov报告显示所有修改和可覆盖的行都已被测试覆盖。
- 该修复已被合并到`validatorjs:master`分支中。
标题: Incomplete Filtering of One or More Instances of Special Elements in validator | CVE-2025-12758 | Snyk -- 🔗来源链接
标签:
神龙速读:
### 关键信息
#### 漏洞信息
- **漏洞名称**: Incomplete Filtering of One or More Instances of Special Elements
- **受影响的包**: validator
- **受影响版本**: <13.15.22
- **修复方式**: 升级 validator 至 13.15.22 或更高版本
#### 漏洞详情
- **CVE编号**: CVE-2025-12758
- **CWE编号**: CWE-792
- **严重性**: 8.7 (高)
- **漏洞简介**: 受影响的 `validator` 版本在 `isLength` 函数中存在对 Unicode 变体选择符(\uFE0F, \uFE0E)处理不当的问题,导致字符串长度计算不准确。这可能导致应用在输入验证时接受比预期长得多的字符串,从而引发数据截断、缓冲区溢出或拒绝服务等问题。
#### 证明代码
- **输入示例**:
```javascript
const validator = require('validator');
console.log(`"test" (String.length: 4) length less than or equal to 3? ${(validator.isLength("test", { max: 3 }))}`);
console.log(`"test" (String.length: 4) length less than or equal to 4? ${(validator.isLength("test", { max: 4 }))}`);
console.log(`"test\uFE0F\uFE0F\uFE0F\uFE0F" (String length: 8) length less than or equal to 4? ${(validator.isLength("test\uFE0F\uFE0F\uFE0F\uFE0F", { max: 4 }))}`);
```
- **输出示例**:
```
"test" (String.length: 4) length less than or equal to 3? false
"test" (String.length: 4) length less than or equal to 4? true
"test\uFE0F\uFE0F\uFE0F\uFE0F" (String length: 8) length less than or equal to 4? true
```
#### 其他信息
- **Snyk ID**: SNYK-JS-VALIDATOR-13653476
- **公开时间**: 2025-11-26
- **披露时间**: 2025-10-18
- **报告人**: Karol Wrótniak
标题: JS validator isLength bug · GitHub -- 🔗来源链接
标签:
神龙速读:
### 漏洞关键信息
- **漏洞类型**: 输入验证漏洞
- **影响版本**: `validator`库的版本`^13.15.15`
- **漏洞描述**:
- 问题在于`isLength`函数在处理包含Unicode变体选择符(`\uFE0F`, `\uFE0E`)的字符串时,无法正确计算字符串长度。
- 按照Unicode标准,当变体选择符是组合字符的一部分时,应该被视为零宽字符,但在该函数中未能准确处理。
- 利用此漏洞,攻击者可以通过在字符串中嵌入大量变体选择符来绕过最大长度限制。
- **示例代码**: 在`index.js`中,展示了正常情况下和包含变体选择符时的字符串长度对比,以及`isLength`函数的校验结果。
- **测试结果**:
- 对于正常字符串"test"(长度4),校验其长度小于等于3时返回false,小于等于4时返回true。
- 对于包含变体选择符的字符串"`test\uFE0F\uFE0F\uFE0F\uFE0F`"(长度8),校验其长度小于等于4时返回true,表明校验结果不正确。
- **影响**: 此漏洞可能导致输入验证失效,使得输入的长度限制条件形同虚设,从而可能引发更严重的安全问题。
暂无评论