【漏洞预警】Ubuntu Linux 权限升级漏洞PoC(CVE-2019-7304)

  • 来源:深信服安全中心
  • 发布时间:2019-02-14
#

事件描述

在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

图片1.png 然后我们生成一个公钥,在Ubuntu SSO上注册一个账户,将公钥配置到账户中,通过利用访问控制检查来使用本地snapd服务的受限API函数(POST / v2 / create-user)。这将在Ubuntu SSO中查询提供的电子邮件地址的用户名和公共SSH密钥,然后根据这些值创建本地用户,我们直接使用公开的利用脚本进行测试,发现攻击成功后会自动跳转到名字和远程sso注册一样的账号的shell,但是权限很低。

图片2.png 但是我们直接使用Sudo -i的时候发现不需要输入验证密码就可以变成root权限

图片3.png 影响版本

安全问题会影响这些Ubuntu及其衍生产品的发布:

· Ubuntu 18.10

· Ubuntu 18.04 LTS

· Ubuntu 16.04 LTS

· Ubuntu 14.04 LTS

时间轴

 2019-01月 研究人员通过在Ubuntu Linux的默认安装中发现了一个权限提升漏洞

2019-02-13  研究人员通过博客披露漏洞的详情

2019-02-13 深信服千里目安全实验室复现漏洞并发布漏洞预警

参考链接

https://initblog.com/2019/dirty-sock/

解决方案

修复建议

 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