qnnp 发表于 2023-1-9 20:34:59

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

漏洞简介:
当用户在“网站”菜单页面的“其他项目”中添加“通用项目”时如果选择“运行用户”为非“root”用户则会造成系统“root”账户的home目录“/root”下所有子目录和文件的“所有者”和“所属组”变更,而一旦此home目录的所有权被错误修改为风险账户极易造成风险账户被提权,从而控制整个系统。(如 /root 被修改成 www:www 并且某个网站没有设置防跨站还有漏洞的情况下)此问题不仅容易造成安全漏洞还会造成 root 账户的 ssh 密钥认证功能。


相关文件和描述:
文件1:
路径:/www/server/panel/class/projectModel/otherModel.py
行数:823~826
代码:
823if 'project_path' in project_find['project_config']:
824      jar_path = project_find['project_config']['project_path']
825else:
826      jar_path = '/root'行数:843~844代码:843public.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 的值。

qnnp 发表于 2023-1-9 20:56:03

本人的简单解决办法是将 826 行代码修改为 jar_path = project_find['path']

qnnp 发表于 2023-1-9 20:57:43

qnnp 发表于 2023-1-9 20:56
本人的简单解决办法是将 826 行代码修改为 jar_path = project_find['path']

另外多说一句,其他项目 的设置表单并没有提供运行目录的设置项目

大炮运维V587 发表于 2023-1-10 09:14:44

非常感谢您的反馈,已经提交到开发和安全部门

宝塔技术-小强 发表于 2023-1-10 09:39:43

已经处理。明天更新
页: [1]
查看完整版本: 【奖励宝塔币200】宝塔面板Linux存在权限疑问