联想最新发布的系统更新公告中的两个提权漏洞是我在几周前提交的(CVE-2015-8109,CVE-2015-8110)IOActive以及联想在这个报告中发出警告!

细节铺垫

在解读细节之前,我们先来点高大上的概览。联想系统更新以管理员权限弹出GUI应用程序的整个流程如下:

tvsu

 

1.用户运行tvsu.exe或者带特定参数运行TvsuCommandLauncher.exe启动系统更新,在此之前联想对IOActive发现的漏洞已经进行了修复。在新版本TvsuServiceCommon.dll中定义了一组任务,参数范围为1~6

2.TvsuCommandLauncher.exe之后,通常联系运行系统权限的SUService服务,处理所需的查询需要更高的权限

3.SUService服务之后,以系统权限打开UACSdk.exe并使用管理员权限运行GUI接口

4.UACSdk.exe检测用户为无权限的普通用户或者是能够提权的Vista管理员

5.根据用户权限:

(1)如果为Vista管理用户,那么就会提升权限

(2)如果为普通用户,UACSdk.exe创建创建一个随机密码的临时管理员账户,应用关闭后就删除

临时管理员账户遵循tvsu_tmp_xxxxxXXXXX格式,小写x为随机生成的小写字符,大写X为随机生成的大写字符,生成的随机密码为19个字节。

这是一个创建随机的用户的示例:

tvsu2

 

6.通过tvsukernel.exe,主要的联想系统更新GUI便以管理员权限开始运行

tvsu3

 

BUG 1:联想系统更新帮助主题提权

第一个BUG在帮助系统中,并且有两种进入点。用户可以通过Internet Explorer打开在线帮助主题。

1 – 主应用程序接口中的链接:

tvsu4

 

2 – 通过点击右上角的帮助图标,然后点击设置:

tvsu5

 

当以管理员身份运行Tvsukernel.exe主应用程序,浏览器实例打开一个Help URL继承父管理员权限。

在这里,一个无特权的攻击者有许多方法利用浏览器实例来提升帐号为Administrator或者SYSTEM权限。

tvsu6

 

BUG 2 : 联想系统弱密码函数提权

该BUG的技术含量要高些,步骤5b相关的创建临时管理员账户利用这个漏洞

sub_402190函数用来创建临时管理原账户,包含以下重要的代码片段:

tvsu7

 

sub_401810函数接收3个参数并负责生成随机字符串格式。

当sub_401810使用RAND生成一个格式,seed初始化是基于增加当前时间,rand值以及如下的定义:

tvsu8

 

一旦定义好seed,函数使用RAND循环以及division/multiplication特定值生成一个随机值。

注意下图所示的循环

tvsu9

 

第一个函数调用是用来生成管理员用户名后面的10个字符(tvsu_tmp_xxxxxXXXXX)

由于是基于rand,实际上该算法是可预测的。基于帐户被创建的时间,攻击者是有可能再生成相同用户名的。

对于生成的密码(哪个更重要)联想有一个更安全的方法:在函数sub_401BE0内的Microsoft Crypto API(Method #1),对于这个method我们并不会神人解读,这是因为IOActive发现的漏洞与此无关。我们要看的当Method #1失效后,Method #2如何生成密码。

返回密码生成相关的代码片段:

tvsu10

 

我们清楚的看到如果sub_401BE0函数失效,使用RAND-based算法返回执行流程(在sub_401810函数前就定义好了)给临时管理员账户生成一个可预测密码。换句话说,攻击者可通过Method #2预测密码。

这意味着攻击者可以在某些情况下预测用户名和密码,并利用其来提升账户权限!

【*原文:ioactive编译/FB小编鸢尾  安全脉搏小编整理发布

源链接

Hacking more

...