漏洞简介:
当用户在“网站”菜单页面的“其他项目”中添加“通用项目”时如果选择“运行用户”为非“root”用户则会造成系统“root”账户的home目录“/root”下所有子目录和文件的“所有者”和“所属组”变更,而一旦此home目录的所有权被错误修改为风险账户极易造成风险账户被提权,从而控制整个系统。(如 /root 被修改成 www:www 并且某个网站没有设置防跨站还有漏洞的情况下)此问题不仅容易造成安全漏洞还会造成 root 账户的 ssh 密钥认证功能。
相关文件和描述:
文件1:
路径:/www/server/panel/class/projectModel/otherModel.py
行数:823~826
代码:
823 if 'project_path' in project_find['project_config']:
824 jar_path = project_find['project_config']['project_path']
825 else:
826 jar_path = '/root' 行数:843~844 代码: 843 public.ExecShell("chown -R {}:{} {}".format(project_find['project_config']['run_user'],
844 project_find['project_config']['run_user'], jar_path))
描述:
代码823行至826行判断 project_path 是否存在于 project_find['project_config'] 数组中。存在则赋值与 jar_path 变量不存在则赋值于 jar_path 文本 /root。代码843行至844行执行 shell 命令将变量 jar_path 储存的路径目录“所有者”修改为项目设置的“运行用户”。数组 project_find['project_config'] 为“通用项目”的项目配置信息,存在“宝塔面板”产品的SQLite数据库的“site”表中。风险点在于:数据库储存的配置信息并没有 project_path 字段存在,所以823~826行的判断条件永远为 false 变量 jar_path 的值永远为 /root 。
如果项目设置的时候选择的运行用户为非 root 用户时就会造成 root 用户的 home 目录 /root 发生权限变更。轻则影响 root 用户登录和正常使用,重则可以让风险用户轻松提权并控制整个系统。 修复建议:
修改823~826行代码逻辑并在项目配置信息中给定 project_path 正确的值。当找不到 project_path 值时可以根据“项目执行文件”自动生成 project_path 的值。
|
|