OSSN/OSSN-0026
< OSSN
对配置文件拥有无限制的写入权限可能导致代码执行
总结
在 OpenStack 项目的许多地方,变量会直接从配置文件中读取,并用于构建语句,这些语句将以 OpenStack 服务的权限执行。由于配置文件是受信任的,因此不会检查或清理输入。如果恶意用户能够写入这些文件,他们可能能够以 OpenStack 服务的身份执行任意代码。
受影响的服务 / 软件
Nova / 所有版本, Trove / Juno, 可能还有其他版本
讨论
一些 OpenStack 服务依赖于操作系统命令来执行某些操作。在某些情况下,这些命令是通过将配置文件中的输入附加到指定的命令,并将完整的命令直接传递给操作系统 shell 来执行而创建的。例如
command='ls -al ' + config.DIRECTORY subprocess.Popen(command, shell=True)
在这种情况下,如果 config.DIRECTORY 设置为像 '/opt' 这样无害的内容,代码的行为符合预期。另一方面,如果攻击者能够将 config.DIRECTORY 设置为恶意内容,例如 '/opt ; rm -rf /etc',shell 将执行 'ls -al /opt' 和 'rm -rf /etc'。当使用 shell=True 调用时,shell 会盲目执行传递给它的任何内容。在上述提及的服务和版本中,已经识别出具有潜在 shell 注入漏洞的代码,但其他服务也可能存在漏洞。
请参阅底部的链接,了解 Nova 和 Trove 中的一些示例。
建议的操作
确保所有 OpenStack 服务的配置文件的权限设置为只有所有者用户才能读取/写入。在其他进程或用户可能具有对配置文件的写入访问权限的情况下,请确保所有设置都经过清理和验证。
此外,应始终遵守最小权限原则 - 文件应使用尽可能严格的权限进行保护。允许恶意用户查看敏感数据(读取访问权限)可能会导致其他严重的安全问题,例如暴露明文凭据。
联系方式 / 参考文献
- 作者:Travis McPeak, HPE
- 此 OSSN : https://wiki.openstack.org/wiki/OSSN/OSSN-0026
- 原始 LaunchPad Bug : https://bugs.launchpad.net/ossn/+bug/1343657
- OpenStack Security ML:openstack-security@lists.openstack.org
- OpenStack Security Group:https://launchpad.net/~openstack-ossg
- Shell 注入
- 其他 LaunchPad Bug