CVE-2026-32608Glances是一款开源的跨平台系统监控工具。该工具的动作系统允许管理员配置shell命令,当监控阈值超过时自动执行。这些命令支持Mustache模板变量(如{{name}}、{{key}}),用于填充运行时监控数据。secure_popen()函数负责执行这些命令,它通过分割命令字符串然后传递给subprocess.Popen(shell=False)来实现管道、重定向和链操作符的处理。在4.5.2之前的版本中,当Mustache渲染的值(如进程名、文件系统挂载点或容器名)包含管道(|)、重定向(>、<)或链操作符(;、&)等元字符时,渲染后的命令会被意外分割,导致攻击者可以通过控制进程名或容器名来注入任意命令。这是一种典型的命令注入漏洞,攻击者无需特殊权限即可在本地利用此漏洞。
漏洞的核心在于secure_popen()函数对Mustache模板渲染值的处理方式。该函数设计用于安全执行管理员配置的监控命令,通过subprocess.Popen(shell=False)来避免shell注入风险。然而,该函数自己实现了管道、重定向和链操作符的解析逻辑,通过分割命令字符串来分别处理各个部分。问题在于,分割逻辑基于shell元字符(|、>、<、;、&等),但没有考虑到Mustache模板变量被渲染后可能包含这些元字符。例如,如果进程名被设置为evil;whoami,则secure_popen()会将其分割为evil和whoami两部分,从而导致命令注入。攻击者只需创建一个包含shell元字符的进程名或容器名,等待Glances的监控阈值触发,即可执行任意命令。由于secure_popen()仍然使用subprocess.Popen(shell=False),原本设计是安全的,但分割逻辑破坏了这种安全性。