主要实现 SHA-3 算法的库中存在漏洞

XKCP 包(扩展 Keccak 代码包)中提供的 SHA-3 (Keccak) 加密哈希函数的实现中发现了一个漏洞 (CVE-2022-37454),该漏洞可能导致在处理某些数据时出现缓冲区溢出。格式化数据。 该问题是由 SHA-3 特定实现的代码中的错误引起的,而不是由算法本身的漏洞引起的。 XKCP 包被誉为 SHA-3 的官方实现,由 Keccak 开发团队的投入开发,并用作各种编程语言中 SHA-3 函数的基础(例如,XKCP 代码用于 Python hashlib 中)模块、Ruby 摘要包 sha3 和 PHP hash_* 函数)。

据发现该问题的研究人员称,他能够利用该漏洞违反哈希函数的加密属性,找到第一和第二原像,并检测冲突。 此外,还宣布将创建一个原型漏洞利用程序,允许在计算特殊设计文件的哈希值时执行代码。 该漏洞还可能用于攻击使用 SHA-3(例如 Ed448)的数字签名验证算法。 计划稍后在漏洞全部被消除后公布攻击方法的详细信息。

目前尚不清楚该漏洞对现有应用程序的实际影响有多大,因为要使问题在代码中显现出来,必须使用块中的循环哈希计算,并且处理后的块之一的大小必须约为 4 GB(至少2^32 - 200 字节)。 当一次处理输入数据时(不按顺序分部分计算哈希值),问题不会出现。 作为最简单的保护方法,提出限制哈希计算的一次迭代中涉及的数据的最大大小。

该漏洞是由输入数据的块处理错误引起的。 由于与“int”类型的值进行不正确的比较,确定了挂起数据的不正确的大小,从而导致尾部被写入到分配的缓冲区之外。 特别是,比较使用了“partialBlock + instance->byteIOIndex”的表达式,导致组成部分的值较大时出现整数溢出。 此外,代码中存在不正确的类型转换“(unsigned int)(dataByteLen - i)”,这会导致 64 位 size_t 类型的系统发生溢出。

导致溢出的示例代码: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

来源: opennet.ru

添加评论