Atop 2.11 heap problems
Atop 2.11 存在堆问题,源于其在初始化时无条件尝试连接 `atopgpud` 的 TCP 端口。如果其他程序占用该端口,atop 会接收到恶意字符串,导致解析失败,进而引发堆问题和段错误。该漏洞自 atop 2.4.0 引入 `atopgpud` 时就已存在。
解决方案包括:默认情况下,atop 不连接 TCP 端口,仅在启动时使用 `-k` 标志时才连接;改进字符串解析以避免堆问题;默认情况下,atop 不尝试查找 `netatop` 或 `netatop-bpf`,仅在启动时使用 `-K` 标志时才查找。
Atop 2.11 中的堆问题
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 时就已存在。
解决方案:
- 大多数系统不会显式激活
atopgpud守护进程。 因此,现在 atop 的默认行为是不连接到 TCP 端口。 只有当 atop 启动时带有-k标志时,它才会尝试连接到 TCP 端口(如果您知道atopgpud正在运行)。 - 当使用
-k标志时,字符串的解析得到了改进,以避免出现堆问题。 - atop 的另一个可选来源可能是
netatop或netatop-bpf。 由于大多数系统不会显式安装/使用这些来源,因此 atop 的默认行为现在是不尝试查找这些来源。 只有当 atop 启动时带有-K标志时,它才会尝试查找netatop或netatop-bpf。
