揭秘wolfSSL漏洞:TLS协议模糊测试新突破

Trail of Bits公开披露了影响wolfSSL的四个漏洞(CVE-2022-38152至CVE-2022-42905),这些中高危漏洞均可导致拒绝服务攻击。文章深入分析了基于Dolev-Yao模型的协议模糊测试工具tlspuffin如何自动发现这些漏洞,并详细介绍了该创新工具的架构原理与技术实现。

Targeting wolfSSL

在Trail of Bits实习期间,我们添加了多个wolfSSL版本作为模糊测试目标。选择wolfSSL库是因为它在2022年初被发现存在两个认证漏洞(CVE-2022-25640和CVE-2022-25638),这让我们能验证tlspuffin通过重新发现已知漏洞的有效性。

由于tlspuffin使用Rust编写,我们首先需要为wolfSSL创建绑定。在实现绑定过程中,我们在OpenSSL兼容层发现了几个bug并报告给wolfSSL团队。绑定完成后,模糊测试器就可以开始工作:发现wolfSSL中的异常状态。

Discovered Vulnerabilities

实习期间,我在wolfSSL中发现了多个可导致拒绝服务(DoS)的漏洞:

DOSC: CVE-2022-38153允许中间人或恶意服务器通过拦截修改TLS数据包对TLS 1.2客户端发起DoS攻击,影响wolfSSL 5.3.0。

DOSS: CVE-2022-38152是针对使用wolfSSL_clear函数而非wolfSSL_free/wolfSSL_new组合的wolfSSL服务器的DoS漏洞,会话恢复会导致空指针解引用崩溃,影响wolfSSL 5.3.0至5.4.0。

BUF: CVE-2022-39173是由缓冲区溢出引起的wolfSSL服务器DoS漏洞,攻击者通过伪装会话恢复并在Client Hello中发送重复密码套件触发,可能在某些架构上实现远程代码执行(RCE),影响5.5.1之前版本。

HEAP: CVE-2022-42905是解析TLS记录头时的缓冲区越读漏洞,影响5.5.2之前版本。

“几个wolfSSL的CVE,tlspuffin的巨大飞跃”

这些漏洞标志着该模糊测试器的重要里程碑:它们是首个使用该工具发现的具有广泛影响的漏洞。平均而言,模糊测试器发现漏洞和崩溃用时不到一小时。

在准备wolfSSL测试环境时,我们还发现了一个严重的API误用导致的内存泄漏问题。wolfSSL团队在一周内修复了所有发现的问题,堪称"最佳协调披露"典范。

DOSC: 针对客户端的拒绝服务

在wolfSSL 5.3.0中,中间人或恶意服务器可崩溃TLS客户端。漏洞存在于AddSessionToCache函数中,当客户端收到服务器的新会话票据时调用。

关键问题在于当新会话票据较大(700字节)时,会尝试释放未在堆上分配的内存指针。与Heartbleed不同,此漏洞是由逻辑错误而非缓冲区溢出引起。

模糊测试器通过将会话票据替换为700字节大数组,在大约一小时内发现了该漏洞。触发漏洞需要客户端会话缓存中有约30个先前连接。

BUF: 服务器缓冲区溢出

wolfSSL 5.5.1之前版本中,恶意客户端可在恢复TLS 1.3握手时引发缓冲区溢出。攻击者需要发送两个精心构造的Client Hello:第一个伪装会话恢复,第二个响应Hello重试请求。

漏洞位于RefineSuites函数中,当ssl->suites包含单个密码套件而peerSuites包含13个重复相同套件时,会导致169个套件写入仅支持150个套件的缓冲区,造成栈溢出。

下一代协议模糊测试

加密协议实现历来容易出错。与传统文件格式模糊测试不同,加密协议需要特定的加密消息流才能到达深层协议状态。

tlspuffin受Dolev-Yao模型启发,这是自1980年代以来用于形式化协议验证的符号模型。该模型假设攻击者能完全控制通信网络中的消息。

Dolev-Yao跟踪

Dolev-Yao跟踪使用术语代数符号化表示消息。例如有缺陷的Needham-Schröder协议可表示为包含输入输出步骤的跟踪序列,精确建模中间人攻击。

TLS 1.3握手协议

TLS握手分为四个阶段:密钥交换(未加密)、服务器参数、服务器认证和可选的客户端认证。每个消息都可以用符号术语表示,如Client Hello可表示为fn_client_hello(fn_key_share, fn_signature_algorithm, psk)。

模糊测试Dolev-Yao跟踪

tlspuffin基于LibAFL进化模糊测试器设计,主要流程:

  1. 种子语料库:包含常见攻击场景的手工跟踪
  2. 调度和变异阶段:基于启发式选择种子并进行变异
  3. 执行器、反馈和目标:在实际实现中执行跟踪,收集覆盖率反馈和安全违规目标

实习亮点

实习期间为tlspuffin增加了多项新功能:

  • 支持更多模糊测试目标(如wolfSSL)
  • 扩展协议支持(添加SSH)
  • 改进安全违规检测
  • 增强漏洞重现能力

结论

Dolev-Yao模型引导的模糊测试是测试加密协议的新颖技术,已通过重新发现已知认证漏洞和在wolfSSL中发现新DoS攻击证明其可行性。

虽然集成新协议或目标需要大量工作(SSH支持耗时5-6周,新目标1-2周),但对TLS或SSH等广泛使用协议来说非常值得。开发者还可使用tlspuffin编写测试套件,实现回归测试。

互联网高度依赖TLS和SSH协议,其安全问题影响深远。让我们通过验证、测试和模糊测试加密协议来保持网络安全!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计