当前位置:论坛首页 > BUG提交 > Linux面板

【奖励宝塔币200】宝塔面板Linux存在权限疑问

发表在 BUG提交2023-1-9 20:34 [复制链接] 4 2988

漏洞简介:
当用户在“网站”菜单页面的“其他项目”中添加“通用项目”时如果选择“运行用户”为非“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 的值。

使用道具 举报 只看该作者 回复
发表于 2023-1-9 20:56:03 | 显示全部楼层
本人的简单解决办法是将 826 行代码修改为 jar_path = project_find['path']
使用道具 举报 回复 支持 反对
发表于 2023-1-9 20:57:43 | 显示全部楼层
qnnp 发表于 2023-1-9 20:56
本人的简单解决办法是将 826 行代码修改为 jar_path = project_find['path']

另外多说一句,其他项目 的设置表单并没有提供运行目录的设置项目
使用道具 举报 回复 支持 反对
发表于 2023-1-10 09:14:44 | 显示全部楼层
非常感谢您的反馈,已经提交到开发和安全部门
使用道具 举报 回复 支持 反对
发表于 2023-1-10 09:39:43 | 显示全部楼层
已经处理。明天更新
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

企业版年付运维跟进群

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急问题处理

论坛响应时间:10分钟

问题处理方式:1对1处理(优先)

工作时间:白班:9:00 - 18:00

工作时间:晚班:18:00 - 24:00

立即付费处理
快速回复 返回顶部 返回列表