Atop 2.11 中的堆问题

Openwall

Message-ID: 53411a5a-3b7f-4993-a66e-8e93cd2efb1c@atoptool.nl Date: Sat, 29 Mar 2025 18:39:29 +0100 From: Gerlof Langeveld <gerlof.langeveld@...ptool.nl> To: oss-security@...ts.openwall.com Subject: CVE-2025-31160 Atop 2.11 heap problems

简介: Atop 主要从 /proc/sys 目录读取系统级别和进程级别的信息。然而,某些计数器可能需要从其他可选来源获取,这些来源需要显式激活。

其中一个来源是 atopgpud 守护进程,它持续收集关于 GPU 利用率的指标。它提供一个本地 TCP 端口,atop 可以连接到该端口以检索与 GPU 相关的计数器。 这些计数器以字符串的形式提供,需要由 atop 进行解析。

漏洞: 该漏洞是由于 atop 在初始化期间总是尝试连接到 atopgpud 的 TCP 端口而引起的。当另一个本地程序(而不是 atopgpud)已经启动并监听此 TCP 端口时,atop 将连接到该程序。 这样,该程序就能够发送意外的字符串,这可能导致 atop 中的解析失败。 这些失败会导致堆问题和段错误。

虽然没有收到关于这些堆问题的更多信息,但通过自定义开发的测试程序重现了所描述的堆问题。 该漏洞从 atop 2.4.0 中引入 atopgpud 时就已存在。

解决方案:

  1. 大多数系统不会显式激活 atopgpud 守护进程。 因此,现在 atop 的默认行为是不连接到 TCP 端口。 只有当 atop 启动时带有 -k 标志时,它才会尝试连接到 TCP 端口(如果您知道 atopgpud 正在运行)。
  2. 当使用 -k 标志时,字符串的解析得到了改进,以避免出现堆问题。
  3. atop 的另一个可选来源可能是 netatopnetatop-bpf。 由于大多数系统不会显式安装/使用这些来源,因此 atop 的默认行为现在是不尝试查找这些来源。 只有当 atop 启动时带有 -K 标志时,它才会尝试查找 netatopnetatop-bpf