漏洞关键信息总结 漏洞类型: Use-after-realloc (使用后重分配) 受影响函数: 问题描述: 在使用 时,堆排序算法在数组的比较过程中可能会捕获原始数据指针,并在数组变化(如调用 )后继续使用该指针,导致堆排序算法使用过时的指针,将无效的 分条目给 ,从而调用 ,引发崩溃。 触发条件: 对一个超过 的数组进行排序,并使用一个在比较过程中修改数组的自定义块。例如,Ruby fuzzer 输入 会导致数组存储收缩或重分配,而堆排序仍然使用旧指针,从而引发崩溃。 哈希名称: mruby_fuzzer 崩溃输入: 崩溃输出: 包含堆栈跟踪和内存地址信息,显示由于使用了无效内存地址而导致的段错误(SEGV)。 修复补丁: - 在 中添加或更新代码,以在排序过程中每次比较、堆化等操作后刷新数组指针。查看具体补丁代码。 关键讨论: - tim-becker 认为崩溃的根本原因是无效数据,触发条件是由于使用了重分配的数组。 - matz 指出 函数在 时引发异常,这种使用后释放的情况不应发生,修复补丁似乎没有解决根本问题。 - tim-becker 进一步调查,并认为根本原因更准确地描述为 “use-after-realloc”。 解决状态: 该问题已在 commit eb39897 中解决并关闭。