首页 存档 技术 查看内容

CVE-2017-7187漏洞分析

2018-3-30 13:00 |来自: 互联网 379 0

摘要: 更多资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn) Summary 前段时间,Linux upstream 上更新了一个栈溢出漏洞的patch CVE-2017-7187 。目前已知受影响的版本为Linux Kernel 4 ...

更多资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)


Summary


前段时间,Linux upstream 上更新了一个栈溢出漏洞的patch CVE-2017-7187 。目前已知受影响的版本为Linux Kernel 4.10.4,可导致本地拒绝服务,或其他影响。


Vulnerability Analysis


这个漏洞很有意思,在用户空间下,应用程序可以设置下一条命令行长度的最大值。

首先,看一下第一条code path:

接着 review 一下代码:

从上一段代码中我们可以得到:

参数 arg 是由用户空间传进来的一个值,它是unsigned long ,并且我们可以控制它。

参数 arg 传进来后,分别把指针p、ip指向它[1][2];紧接着,在SG_NEXT_CMD_LEN 中调用get_user()函数,然后,调用 get_user() 将它的值拷贝到 val 中[3],get_user() 是一个类似

copy_from_user的函数,不过它只能从用户空间拷贝简单的数据类型,如: char、int等,不能拷贝复杂的数据类型,如:struct、arrays;最后,设置next_cmd_len,如果val 的值大于0,则使用val 的值,否则为0 。OK,我们看到[4] 这里,代码中没有做任何检查,这允许攻击者在用户空间设置一个很大很大的值。

再看第二条code path:

整个code path分析下来,我们发现了一个非常有趣的的函数__copy_from_user(),它被 sg_write()函数调用,现在让我们看看这个函数的细节吧。

同样,参数 buf 是可控的,在[1] 处,调用__copy_from_user()函数,从用户空间拷贝cmd_size大小的buf到内核空间cmnd 中;cmd_size的大小,在触发第一条code path时被设置,存储在sfp-

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部