Python-LDAP输出编码与空字符终止漏洞分析
漏洞概述
CVE-2025-61912 是一个影响python-ldap库的中等严重性漏洞,涉及输出编码不当和空字符终止处理不当问题。
受影响版本
- 受影响版本:< 3.4.5
- 已修复版本:3.4.5
漏洞详情
问题描述
ldap.dn.escape_dn_chars() 函数对 \x00 的转义处理不正确,它发出反斜杠后跟字面NUL字节,而不是RFC-4514要求的十六进制形式 \00。任何使用此辅助函数从不可信输入构建DN的应用程序,都可能在请求发送到LDAP服务器之前一致性地失败,导致客户端拒绝服务。
技术细节
受影响函数: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 (result 34, BAD_NAME)← 请求到达服务器;由于服务器策略拒绝,而非客户端错误
影响评估
类型:拒绝服务(客户端)
受影响对象:任何使用ldap.dn.escape_dn_chars()从(部分)不可信输入构建DN的应用程序——例如,用户创建/重命名工具、同步/ETL作业、允许自助服务属性的门户、设备上线、批量导入等。单个包含\x00的精心构造值可可靠地强制异常/失败,并可能使处理程序崩溃或用毒记录阻塞管道。
参考链接
- 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
安全指标
CVSS总体评分: 5.5(中等) CVSS v4基础指标:
- 攻击向量:网络
- 攻击复杂性:低
- 攻击要求:无
- 所需权限:无
- 用户交互:无
- 受影响系统可用性:低
弱点类型:
- CWE-116:输出编码或转义不当
- CWE-170:空字符终止不当