linux 内核支持sctp,Linux 内核 SCTP 协议漏洞分析与复现 (CVE-2019-8956)

一、 漏洞背景

Linux 内核 SCTP 协议实现中存在一个安全漏洞 CVE-2019-8956(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 不同,SCTP 是通过多宿主(Multi-homing)和多流(Multi-streaming)功能提供这些收益的,这两种功能均可提高可用性。

多宿主(Multi-homing)为应用程序提供了比 TCP 更高的可用性。多宿主主机就是一台具有多个网络接口的主机,因此可以通过多个 IP 地址来访问这台主机。在 TCP 中,连接(connection) 是指两个端点之间的一个通道(在这种情况下,就是两台主机的网络接口之间的一个套接字)。SCTP 引入了“联合(association)”的概念,它也是存在于两台主机之间,但可以使用每台主机上的多个接口进行协作。

9293d1c492ac10d9bd778178280edfe9.png

三、 漏洞原理

漏洞补丁代码如下,补丁代码将list_for_each_entry换成了list_for_each_entry_safe。

f9652021ce2c1d14deab7f7b247391c0.png

宏定义list_for_each_entry功能是遍历ep->asocs链表中的asoc节点。宏定义list_for_each_entry和list_for_each_entry_safe如下所示:

72da18b61512f09726446b16a96d99d9.png

宏定义list_for_each_entry_safe中添加了一个 n,该 n 用来存放 pos 指向的节点的下一个节点位置。使用该宏可以对链表进行删除操作。

下面对sctp_sendmsg函数调用链进行分析。sctp_sendmsg是基于 SCTP 协议的sendmsg类型函数,用于发送 SCTP 数据包。关键实现如下:

d13a9f50fb13abffa332b2172fc9965d.png

行 2038,从msg中解析出sinfo;行 2043,获取到sflags。

a25dec875110efc85f0b2faa80cb2fd9.png

行 2055,判断sflags是否为SCTP_SENDALL。如果存在,进入list_for_each_entry循环中,依次遍历ep->asocs链表。这里的asocs就是存放多个 association 连接的链表。SCTP_SENDALL标志代表向asocs链表中的所有 association 连接发送数据包。所以asocs链表中至少要存在一个 association 节点。进入sctp_sendmsg_check_sflags函数后,该函数实现如下:

787c82eab106225e34c46c2d5f2d1408.png

首先,检查asoc是否处于 CLOSED 状态,检查asoc是否处于监听状态,检查asoc 是否 shutdown。

0612a89c2d0c4db185c3958ed349f079.png

接下来,检查sflags是否为SCTP_ABORT,根据 rfc 文档可知 ABORT 的用法以及 ABORT 指令的数据包格式。SCTP_ABORT标志代表中止一个 association 连接,这个也是导致漏洞的关键。

2f05c2536fa4c358563f0c20d9ad8c2c.png

行 1863,sctp_make_abort_user构造 ABORT 指令的 chunk;行 1868,调用sctp_primitive_ABORT发送中止一个 association 的 chunk。

82420476ba1702e439306f0503cc025c.png

通过调试可知调用sctp_sf_do_9_1_prm_abort函数进行 ABORT 操作,该函数将会进行如下操作:

c9433352729b739f63810c8a007e8a72.png

添加一条删除asoc的 commands,然后返回SCTP_DISPOSITION_ABORT。正常返回,继续分析,返回到sctp_do_sm函数中。

29d1993ab99b6aed9bb9a103e2c1faf4.png

行 1188 正常返回后,行 1191 调用sctp_side_effects函数根据状态机对应的状态进行操作。

16757b23c49b427933debeae199110a3.png

行 1246,将asoc置空,ABORT 标志代表中止一个 association 操作结束。从sctp_sendmsg_check_sflags函数返回到sctp_sendmsg函数中,宏list_for_each_entry循环中遍历获取第一个asoc节点时,进入sctp_sendmsg_check_sflags函数将第一个asoc置空,然后再进行遍历后面节点时,就发生了零地址引用导致漏洞发生。

四、漏洞复现

将sflags设置成 SENDALL | ABORT,保证进入list_for_each_entry循环和sctp_sendmsg_check_sflags()函数即可。在 4.20 内核下验证如下。由于该漏洞是NULL-PTR deref,即是零地址解引用,无法进一步利用。

8003ea8f4630dd952c218be6d83b65a0.png

五、 漏洞修复建议

该漏洞影响 Linux Kernel 4.19.x 和 4.20.x,建议更新到 version 4.20.8 或4.19.21。

补丁链接如下:

https://git.kernel.org/linus/ba59fb0273076637f0add4311faa990a5eec27c0

启明星辰积极防御实验室(ADLab)

ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截止目前,ADLab已通过CVE累计发布安全漏洞近1000个,通过 CNVD/CNNVD累计发布安全漏洞近500个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。

本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/938/

Mrs.Wong
关注 关注
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lksctp-rs:Rust 的 Linux 内核 SCTP 低级绑定
06-29
Rust 绑定到 Linux 内核SCTP 网络功能。 道歉 我为名称的长首字母缩写词道歉,但“lksctp”是我创建绑定的项目名称,所以我认为应该保留它。 LK = Linux 内核 SCTP = 流控制传输协议 RS = (for) RuSt SCTP ...
LinuxLinux 系统内核日志查看方法
长行
08-07 2097
命令,可以用于查看系统内核日志(Kernel messages)和应用日志
Linux本地提权漏洞复现与检测思路
weixin_46137328的博客
10-15 1786
我做的是linux本地提权漏洞复现。但本地提权漏洞并不像其他web漏洞一样,可以直接pull一个docker镜像就ok了,提权的洞复杂在于配置环境,基本都是在虚拟机里复现,一个镜像的大...
Linux系统漏洞复现分析,linux 内核溢出漏洞利用分析
weixin_39732491的博客
04-29 246
0x01 环境搭建文件: centos6.9 x64位, linux-kernel-2.6.32.29 内核源码工具: qemu平台: archlinux打开终端,创建一个使用10G 的qcow2 文件Qemu-img create –f qcow2 centos.qcow2 10G开始安装centosQemu-system-x86_64 –hda centos.qco2 –m 1024M –bo...
linux 系统内核日志,请教 Linux 系统日志内核日志的区别
weixin_34370877的博客
04-28 630
内核日志(dmesg 和 alog)所有 UNIX 和 Linux 系统的日志实际上是内核的一部分。日志实际上是内核中内存的一部分,用于记录无法写入磁盘的有关内核的信息,这是因为该信息是加载文件系统之前生成的。例如,在启动过程中,不能以写入方式访问文件系统(大多数内核以读取模式启动文件系统,直到认为系统足够安全,能够切换到读/写模式为止)。此日志中的数据包含关于连接到系统的设备的信息,以及在启动和...
添加proc文件,控制sctp的debug输出
Kami_Jiang的博客
09-14 256
通过打开 kernel 的 menuconfig 的选项可以输出sctp的debug日志。 但是debug消息输出较多,如果没有不需要定位sctp问题时最好能关闭debug日志。 记录下在/proc/sys/net/sctp下添加一配置文件以实现配置日志是否输出的功能的实现。
sctp-0.2.27.tar.gz_ST_sctp_sctp linux
09-22
sctp的unix,linux 源代码,希望能对有用的朋友参考
linux内核协议SCTP协议处理简析
07-19
文档中简要的描述了linux内核SCTP实现的基础以及相关代码流程,欢迎大家互相交流
sctp.tar.gz_linux server_sctp_udp 重传_拥赛控制协议
09-23
一种在UDP协议中实现了拥赛控制和重传机制的协议
MPTCP与CMT-SCTP多路径传输协议性能分析
03-27
MPTCP与CMT-SCTP多路径传输协议性能分析
linux提权工具利用2.6内核漏洞
12-27
wunderbar_emporium-3.tgz linux提权工具 linux提权 2.6内核漏洞
Linux系统漏洞复现分析,CVE-2019-14287(Linux sudo漏洞分析
weixin_35724794的博客
04-29 229
原标题:CVE-2019-14287(Linux sudo漏洞)分析近日 sudo 被爆光一个漏洞,非授权的特权用户可以绕过限制获得特权。官方的修复公告请见:https://www.sudo.ws/alerts/minus_1_uid.html。一、漏洞复现实验环境:操作系统 CentOS Linux release 7.5.1804 内核 3.10.0-862.14.4.el7.x86_64 s...
linux主机安装sctp协议
sheehan_xu的博客
02-17 1670
linux主机底层不支持sctp,安装支持sctp协议
使用 SCTP 优化网络
Bekars涡轮增压的Blog ^_^
04-12 1859
  M. Tim Jones, 资深首席软件工程师, Emulex 2006 年 4 月 10 日 流控制传输协议(Stream Control Transmission Protocol,SCTP)是一种可靠的传输协议,它在两个端点
linux修改sctp参数,Linux Kernel sctp_setsockopt() 整数溢出的漏洞
weixin_36221149的博客
05-12 349
漏洞存在于Linux kernel源代码树中的'net/sctp'中,由于未能充分过滤函数参数,sctp_setsockopt()在解析和处理SCTP 'SCTP_SOCKOPT_DEBUG_NAME'套接口选项时存在整数溢出,可导致错误的分配内存。精心构建参数数据,可导致覆盖过小的内存空间而造成权限提升。受影响系统:Linux kernel 2.4.9Linux kernel 2.4.8Linu...
Linux近两年高危漏洞修复过程记录
企业实战系列集 ●●● https://ximenjianxue.blog.csdn.net
07-28 1619
另外,对于一个大规模的补丁安装,还可以使用脚本的方式,将所有的补丁文件集中到脚本中,这样可以实现大规模的补丁安装。修复措施:目前该漏洞已经修复,https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?下载地址:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/refs/,打补丁fs/overlayfs/copy_up.c。
Linux-dirty pipe内核提权漏洞复现-编号:CVE-2022-0847
╲ゞ紅桃K
08-31 1244
漏洞属于Linux提权漏洞, 攻击者可利用该漏洞使任何非特权(本地)用户在易受攻击的主机上获得root权限,非特权进程可以将代码注入到根进程使得攻击者可获取服务器的所有权限。与该漏洞CVE-2022-0847(Dirty Pipe)类似的另一个漏洞CVE-2016-5195 “Dirty Cow”(脏牛提权),很多人应该了解并且能利用该漏洞。...
Linux内核提权漏洞(Dirty-pipe)复现_linux提权漏洞
最新发布
dzqxwzoe的博客
12-06 561
CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而可将普通权限的用户提升到特权 root。CVE-2022-0847 的漏洞原理类似于 CVE-2016-5195 脏牛漏洞(Dirty Cow),但它更容易被利用。漏洞作者将此漏洞命名为“Dirty Pipe”。
Linux kernel安全漏洞修复方法(CNNVD-202203-522、CVE-2022-0847)
zhangyuxun3的博客
03-30 2206
漏洞详情: Linux kernel是美国Linux基金会发布的开源操作系统Linux所使用的内核Linux kernel存在安全漏洞,攻击者可利用漏洞覆盖重写任意可读文件中的数据,从而将普通权限的用户提升到root权限用户。 漏洞评级: 高危漏洞 影响范围: Linux Kernel 5.8-5.16.11、5.8-5.15.25、5.8-5.10.102等版本均受此漏洞影响。 修复方案 本文以Centos7为例,具体操作步骤如下: #CentOS 7 上启用 ELRepo 仓库 rpm --impor
linux sctp setsockopt详解
09-08
Linux中的SCTP(Stream Control Transmission Protocol)是一种可靠传输协议,它提供了面向消息的传输机制,适用于多播和多路径通信。在Linux中,你可以使用setsockopt函数来设置SCTP套接字选项。 在SCTP中,可以使用setsockopt函数来设置以下选项: 1. SCTP_INITMSG:用于设置SCTP套接字的初始化参数。主要包括最大传输单元(MTU)大小、初始传输窗口大小等。 2. SCTP_EVENTS:用于设置SCTP套接字的事件通知选项。可以设置关于数据到达、连接状态改变、错误发生等事件的通知方式。 3. SCTP_SOCKOPT_PEER_ADDR_PARAMS:用于设置SCTP套接字的对端地址参数。可以设置对端地址的最大重传次数、传输超时时间等。 4. SCTP_SOCKOPT_PEER_ADDR_THLDS:用于设置SCTP套接字的对端地址阈值参数。可以设置对端地址的最大重传次数和最小重传时间等。 5. SCTP_DELAYED_ACK_TIME:用于设置SCTP套接字的延迟应答时间。可以设置发送方等待接收方应答的时间间隔。 6. SCTP_MAXSEG:用于设置SCTP套接字的最大分段大小。可以设置发送或接收数据包的最大大小。 7. SCTP_ASSOCINFO:用于设置SCTP关联信息。可以设置关联的最大传输单元大小、心跳间隔等。 8. SCTP_RTOINFO:用于设置SCTP的重传超时信息。可以设置重传超时的初始值、最小值和最大值等。 以上仅是一些常见的SCTP套接字选项,根据具体需求,还可以设置其他选项。你可以参考Linux的相关文档或手册来详细了解每个选项的具体含义和使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • c语言for循环1到100奇数和,使用for循环结构编写程序计算1到100之间的奇数之和、偶数之和,输出格式为“1到100奇数和=xxx;1到100偶数和... 9255
  • java反射面试_总结Java反射面试题(附答案) 8267
  • 解一元二次方程 matlab,如何用Matlab求一元二次方程式解的个数以及解 6348
  • pandas中size方法_Pandas基本属性和方法 5169
  • maya表情blendshape_【Maya】角色表情绑定-BlendShape的使用技巧 4378

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 云服务器可视化界面显示数据,云服务器可视化界面
  • jquery ajax 超时处理 不起作用,jQuery ajax超时处理
  • 王者服务器维护7月九号,新一服海纳百川7月9日9:30-11:00维护更新公告
2021年130篇
2020年25篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳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次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化