CVE-2025-58183CVE-2025-58183是Go语言标准库中archive/tar包的拒绝服务漏洞。该漏洞源于tar.Reader在处理GNU tar pax 1.0格式的稀疏文件时,没有对稀疏区域数据块的数量设置合理的上限。攻击者可以精心构造一个包含大量稀疏区域的tar归档文件,当受害者程序尝试读取该恶意归档文件时,会导致Reader从归档中读取无界数据到内存中,造成内存耗尽。特别值得注意的是,当从压缩源(如gzip压缩的tar文件)读取时,较小的压缩输入可以触发巨大的内存分配,从而放大攻击效果。此漏洞可能导致目标程序因内存耗尽而崩溃,造成拒绝服务。漏洞由[email protected]发现并报告,影响所有使用Go语言archive/tar包解析用户提供的tar文件的应用程序。
该漏洞的技术核心在于Go语言archive/tar包的Reader实现中缺少对稀疏区域数量的验证。在GNU tar pax 1.0稀疏文件格式中,稀疏区域通过PAX头部扩展属性定义,包含稀疏块的位置和大小信息。正常情况下,稀疏文件可以有效地存储大量零数据,但恶意构造的归档可以包含数百万个稀疏区域声明。当tar.Reader调用readSparse函数处理这些稀疏区域时,会为每个区域执行内存分配操作,导致累积性的内存消耗。攻击者利用这一特性可以:1)创建一个包含极多稀疏区域的tar文件;2)通过压缩进一步减小文件体积但保持高内存放大因子;3)诱使受害者程序解析该文件。修复方案需要在Reader中增加稀疏区域数量的上限检查,建议限制为合理值(如10000个稀疏区域),并在超出限制时返回错误而非继续处理。