Linux包管理器snap本地提权漏洞安全通告

发布时间 2019-02-15

漏洞编号和级别


CVE编号:CVE-2019-7304,危险级别:高危,CVSS分值:官方未评定


影响版本


snapd 2.28 至2.37版本


漏洞概述


snap是一个Linux系统上的包管理软件。在Ubuntu18.04后默认预安装到了系统中。2019213日,Chris Moberly公开了利用snap包管理工具的服务进程snapd中提供的REST API服务因对请求客户端身份鉴别存在问题从而提权的漏洞细节。


利用该漏洞可以让普通用户伪装成root用户向snapd提供的REST API发送请求。攻击者利用精心构造的安装脚本或Ubuntu SSO可以让并不具有sudo权限的普通用户获得执行sudo的权限,从而获得提升到root用户权限的能力,达到本地提权的效果。


漏洞验证


EXPhttps://shenaniganslabs.io/2019/02/13/Dirty-Sock.html


snapdsnap包管理器的一个服务进程。它以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/