漏洞编号和级别
CVE 编号:CVE-2019-7304,危险级别:高危,CVSS 分值:官方未评定
影响版本
snapd 2.28 至2.37 版本
漏洞概述
snap 是一个Linux 系统上的包管理软件。在Ubuntu18.04 后默认预安装到了系统中。2019 年2月13日,Chris Moberly公开了利用snap 包管理工具的服务进程snapd 中提供的REST API 服务因对请求客户端身份鉴别存在问题从而提权的漏洞细节。
利用该漏洞可以让普通用户伪装成 root 用户向snapd 提供的REST API 发送请求。攻击 者利用精心构造的安装脚本或 Ubuntu SSO 可以让并不具有 sudo 权限的普通用户获得执行 sudo 的权限,从而获得提升到 root 用户权限的能力,达到本地提权的效果。
漏洞验证
EXP:https://shenaniganslabs.io/2019/02/13/Dirty-Sock.html
snapd 是snap 包管理器的一个服务进程。它以 root 用户权限在后台运行,并允许普通用 户以 UNIX 套接字的方式与其进行通信,并提供服务,其中一些特权操作需要鉴别用户身份 (uid)才能执行。其中获取客户端信息的代码最终会使用ucrednetGet(如下)函数来获取客户端 用户 id,在该函数中会把字符串 remoteAddr 按";"分割后寻找"uid="字符串来判断当前用户 的uid,通常情况下,remoteAddr 大致为“ pid=5100;uid=1002;socket=/run/snapd.socket;@”这 样的格式。从代码逻辑可以看出,后面出现的"uid="结果会覆盖前面得到的 uid。攻击者利 用这一点即可通过构造UNIX socket 绑定地址,例如"/tmp/sock;uid=0;"。达到伪装root 用户 发出请求的目的。进而通过 snapd 执行一些特权操作达到提权的目的。
修复建议
目前漏洞细节已经披露,官方也在 2.37.1 中予以修复。
Ubuntu 用户可以通过apt update && apt-get install snap ,将snap 升级至最新版本予以修 复。
https://people.canonical.com/~ubuntu-security/cve/2019/CVE-2019-7304.html
参考链接
https://shenaniganslabs.io/2019/02/13/Dirty-Sock.html
https://initblog.com/2019/dirty-sock/