在 2019 年 1 月,国外安全人员在 Ubuntu Linux 的默认安装中发现了一个权限提升漏洞。这是由于 snapd API 中的一个错误,这是一个默认服务。任何本地用户都可以利用此漏洞获取对系统的直接 root 访问权限,CVE 编号 CVE-2019-7304。
为了简化 Linux 系统上的打包应用程序,各种新的竞争标准正在出现。Canonical,Ubuntu Linux 的制造商,正在推广他们的 "Snap" 软件包。这是一种将所有应用程序依赖项转换为单个二进制文件的方法 – 类似于 Windows 应用程序。
Snap 生态系统包括一个" 应用程序商店 ",开发人员可以在其中贡献和维护随时可用的软件包。
管理本地安装的 Snap 以及与此在线商店的通信部分由名为"snapd" 的系统服务处理。此服务自动安装在 Ubuntu 中,并在 "root" 用户的上下文中运行。Snapd 正在发展成为 Ubuntu 操作系统的重要组成部分,特别是在用于云和物联网的 "Snappy Ubuntu Core" 等更精简的旋转中。
漏洞描述
snapd 提供附加到本地 UNIX_AF 套接字的 REST API。通过查询与该套接字的任何连接相关联的 UID 来完成对受限 API 函数的访问控制。在 for 循环中进行字符串解析期间,可能会影响用户控制的套接字对等数据以覆盖 UID 变量。这允许任何用户访问任何 API 函数。
通过访问 API,有多种方法可以获取 root。下面提到了两种可能性:
1. 使用 "create-user"API 根据从 Ubuntu SSO 查询的详细信息创建本地用户。
2.Sideloads Snap 包含一个生成新本地用户的 install-hook。
漏洞复现
首先我们保证有一个叫 vulnbug_spyder 的低权限用户,我们查 vulnbug_spyder 版本为 2.35.5
然后我们生成一个公钥,在 Ubuntu SSO 上注册一个账户,将公钥配置到账户中,通过利用访问控制检查来使用本地 snapd 服务的受限 API 函数(POST / v2 / create-user)。这将在 Ubuntu SSO 中查询提供的电子邮件地址的用户名和公共 SSH 密钥,然后根据这些值创建本地用户,我们直接使用公开的利用脚本进行测试,发现攻击成功后会自动跳转到名字和远程 sso 注册一样的账号的 shell,但是权限很低。
但是我们直接使用 Sudo -i 的时候发现不需要输入验证密码就可以变成 root 权限
影响版本
安全问题会影响这些 Ubuntu 及其衍生产品的发布:
· Ubuntu 18.10
· Ubuntu 18.04 LTS
·Ubuntu 16.04 LTS
·Ubuntu 14.04 LTS
修复建议
Canonical 官方已经针对该漏洞发布了修复 CVE-2019-7304 的安全补丁:
时间轴
·2019-01 月 研究人员通过在 Ubuntu Linux 的默认安装中发现了一个权限提升漏洞
·2019-02-13 研究人员通过博客披露漏洞的详情
·2019-02-13 深信服千里目安全实验室复现漏洞并发布漏洞预警
参考链接
https://initblog.com/2019/dirty-sock/