Linux内核SCTP协议漏洞分析与复现2019-05-30 ADLab
漏洞背景
Linux
内核
SCTP
协议实现中存在一个安全漏洞
CVE-2019-0708(CNVD-2019-06182、CNNVD-201902-823)
,可以导致拒绝服务。该漏洞存在于
net/sctp/socket.c
中的
sctp_sendmsg()
函数
,该函数在处理
SENDALL
标志操作过程时存在
use-after-free()
漏洞。
SCTP协议简介
流控制传输协议
(Stream Control Transmission Protocol,SCTP)
是一种可靠的传输协议,它在两个端点之间提供稳定、有序的数据传递服务
(非常类似于
TCP)
,并且可以保护数据消息边界
(例如
UDP)
。与
TCP
和
UDP
不同,
STCP
是通过多宿主
(Multi-homing)
和多流
(Multi-streaming)
功能提供这些收益的,这两种功能均可提高可用性。
多宿主
(Multi-homing)
为应用程序提供了比 TCP 更高的可用性。多宿主主机就是一台具有多个网络接口的主机,因此可以通过多个 IP 地址来访问这台主机。在 TCP 中,连接
(connection)
是指两个端点之间的一个通道(在这种情况下,就是两台主机的网络接口之间的一个套接字)。
STCP
引入了“联合
(association)
”的概念,它也是存在于两台主机之间,但可以使用每台主机上的多个接口进行协作。
漏洞原理
漏洞补丁代码如下,补丁代码将
list_for_each_entry
换成了
list_for_each_entry_safe。
宏定义
list_for_each_entry
功能是遍历
ep->asocs
链表中的
asoc
节点。宏定义
ep->list_for_each_entry
和
list_for_each_entry_safe
如下所示:
宏定义
list_for_each_entry_safe
中添加了一个n,该n用来存放
pos
指向的节点的下一个节点位置。使用该宏可以对链表进行删除操作。
下面对
sctp_sendmsg
是基于SCTP协议的
sendmsg
类型函数,用于发送SCTP数据包。关键实现如下:
行
2038
,从
msg
中解析出
sinfo
,行
2043
,获取到
sflags。
行
2055
判断
sflags
是否为
SCTP_SENDALL
。如果存在,进入
list_for_each_entry
循环中,依次遍历
ep->asocs
链表。这里的
asocs
就是存放多个
association
连接的链表。
SCTP_SENDALL
标志代表向
asocs
链表中的所有
association
连接发送数据包。所以
asocs
链表中至少要存在一个
association
节点。进入
sctp_sendmsg_check_sflags
函数后,该函数实现如下:
首先,检查
asoc
是否处于
CLOSED
状态,检查
asoc
是否处于监听状态,检查
asoc
是否
shutdown。
接下来,检查
sflags
是否为
SCTP_ABORT
,根据
rfc
文档可知
ABORT
的用法以及
ABORT
的用法以及
ABORT
指令的数据包格式。
SCTP_ABORT
标志代表中止一个
association
连接,这个也是导致漏洞的关键。
行
1863,sctp_make_abort_user
构造
ABORT
指令的
chunk
;行
1868
,调用
sctp_primitive_ABORT
发送中止一个
association
和
chunk。
通过调试可知调用
sctp_sf_do_9_1_prm_abort
函数进行ABORT操作,该函数将会进行如下操作:
添加一条删除
asoc
的
commands
,然后返回
SCTP_DISPOSITION_ABORT
。正常返回,继续分析,返回到
sctp_do_sm
函数中。
行
1188
正常返回后,行
1191
调用
sctp_side_effects
函数根据状态机对应的状态进行操作。
漏洞复现
将
sflags
设置成
SENDALL | ABORT
,保证进入
list_for_each_entry
循环和
sctp_sendmsg_check_sflags()
函数即可。在
4.20
内核下验证如下。由于该漏洞是
NULL-PTR deref
,即是零地址解引用,无法进一步利用。
修复建议
该漏洞影响
Linux Kernel 4.19.x
和
4.20.x
,建议更新到
version 4.20.8
或
4.19.21。
补丁链接如下:
https://git.kernel.org/linus/ba59fb0273076637f0add4311faa990a5eec27c0
·
end
·
数据运营·情报赋能
深圳SEO优化公司楚雄网站优化排名报价大连品牌网站设计报价扬州英文网站建设滁州网站设计公司大丰网站建设公司哈密百度网站优化排名哪家好大同网站制作推荐唐山设计网站价格那曲设计网站哪家好晋中网页制作多少钱黄山外贸网站建设哪家好鹰潭关键词按天扣费多少钱白山外贸网站设计哪家好孝感网站设计公司罗湖网络营销报价鞍山SEO按效果付费推荐驻马店seo排名报价宜春至尊标王报价北海网站优化多少钱呼和浩特网站优化按天计费推荐怀化英文网站建设价格肇庆优化报价张家口设计网站价格临猗模板推广报价平湖企业网站改版推荐邵阳模板制作价格横岗营销网站公司伊犁网站排名优化公司上饶网站seo优化价格潮州seo歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运