Python-LDAP输出编码与空字符处理漏洞分析
漏洞概述
CVE-2025-61912 是一个影响python-ldap库的中等严重性漏洞,涉及输出编码不当和空字符处理错误。该漏洞存在于ldap.dn.escape_dn_chars()函数中,影响版本低于3.4.5的所有版本。
技术细节
受影响组件
- 包: python-ldap (pip)
- 受影响版本: < 3.4.5
- 修复版本: 3.4.5
漏洞原理
问题函数: ldap.dn.escape_dn_chars(s)
问题文件: Lib/ldap/dn.py
错误行为: 对于空字符(NUL),函数执行:
|
|
这会产生包含嵌入NUL的Python字符串,当传递给python-ldap API(如add_s、modify_s、rename_s或用作搜索基础)时,python-ldap会在任何网络I/O之前抛出ValueError: embedded null character异常。
标准要求
RFC 4514要求特殊字符和控制字符使用十六进制形式转义,字面NUL不是有效的DN字符。
修复方案
正确的十六进制转义应为:
|
|
漏洞验证
概念验证代码
|
|
观察结果
add_s(有漏洞的): ValueError embedded null character ← 客户端拒绝服务add_s(安全的): INVALID_DN_SYNTAX (结果34, BAD_NAME) ← 请求到达服务器;由于服务器策略拒绝,非客户端错误
影响分析
类型: 拒绝服务(客户端侧)
受影响对象:
任何使用ldap.dn.escape_dn_chars()从(部分)不受信任输入构建DN的应用程序,包括:
- 用户创建/重命名工具
- 同步/ETL作业
- 允许自助服务属性的门户
- 设备上线
- 批量导入
单个包含\x00的精心构造值可可靠地强制异常/失败,并可能使处理程序崩溃或用毒记录阻塞管道。
安全指标
CVSS评分
- 总体评分: 5.5/10(中等)
- 攻击向量: 网络
- 攻击复杂度: 低
- 权限要求: 无
- 用户交互: 无
- 可用性影响: 低
弱点分类
- CWE-116: 输出编码或转义不当
- CWE-170: 空字符终止不当
参考信息
- GHSA-p34h-wq7j-h5v6
- python-ldap/python-ldap@6ea8032
- https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.5
- https://nvd.nist.gov/vuln/detail/CVE-2025-61912