在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的安全补丁:
· Ubuntu 18.10:https://launchpad.net/ubuntu/+source/snapd/2.35.5+18.10.1
· Ubuntu 18.04 LTS:https://launchpad.net/ubuntu/+source/snapd/2.34.2+18.04.1
· Ubuntu 16.04 LTS:https://launchpad.net/ubuntu/+source/snapd/2.34.2ubuntu0.1
· Ubuntu 14.04 LTS:https://launchpad.net/ubuntu/+source/snapd/2.34.2~14.04.1
时间轴
· 2019-01月 研究人员通过在Ubuntu Linux的默认安装中发现了一个权限提升漏洞
· 2019-02-13 研究人员通过博客披露漏洞的详情
· 2019-02-13 深信服千里目安全实验室复现漏洞并发布漏洞预警
参考链接
https://initblog.com/2019/dirty-sock/