本文为您介绍Alibaba Cloud Linux 2和Alibaba Cloud Linux 3系统的CVE-2021-33909安全漏洞内核热补丁修复方案。
问题描述
在符合如下条件的Alibaba Cloud Linux实例中,存在CVE-2021-33909安全漏洞,特定场景下会造成系统宕机,且出现如下调用栈信息。
Alibaba Cloud Linux 2系统
镜像:Alibaba Cloud Linux 2.1903 LTS 64位。
内核:kernel-4.19.91-24.al7及之前的内核版本。
Alibaba Cloud Linux 3系统
镜像:Alibaba Cloud Linux 3.2104 64位。
内核:kernel-5.10.60-7.al8(含)之前的内核版本。
[ 415.961724] BUG: unable to handle kernel paging request at ffffb807c2f1aff6
[ 415.963259] PGD 42f53b067 P4D 42f53b067 PUD 0
[ 415.964201] Oops: 0002 [#1] SMP PTI
[ 415.965026] CPU: 5 PID: 1537 Comm: seq_poc Kdump: loaded Tainted: G W 4.19.91-23.al7.x86_64 #1
[ 415.967154] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
[ 415.968353] RIP: 0010:__memcpy+0x12/0x20
[ 415.969187] Code: 48 c1 e2 20 48 09 c2 48 31 d3 e9 68 ff ff ff 90 90 90 90 90 90 90 90 90 66 66 90 66 90 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 <f3> 48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 f3 a4
[ 415.973070] RSP: 0018:ffffb80802097dd8 EFLAGS: 00010202
[ 415.974159] RAX: ffffb807c2f1aff6 RBX: ffff8a85f9593450 RCX: 0000000000000001
[ 415.975638] RDX: 0000000000000002 RSI: ffffffff9b0c231c RDI: ffffb807c2f1aff6
[ 415.977097] RBP: ffffb80842f1b000 R08: ffffffff9b0c231c R09: 0000000000000001
[ 415.978563] R10: ffffe41e47d4fa80 R11: ffffe41e47d4fac0 R12: ffffffff9b0a9cc2
[ 415.980168] R13: ffff8a87a83eaa00 R14: ffffb80802097f10 R15: ffff8a87ad6de700
[ 415.981664] FS: 00007f9ef5d86740(0000) GS:ffff8a87afb40000(0000) knlGS:0000000000000000
[ 415.983464] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 415.984722] CR2: ffffb807c2f1aff6 CR3: 0000000279c40005 CR4: 00000000000606e0
[ 415.986253] Call Trace:
[ 415.986802] prepend+0x23/0x30
[ 415.987517] dentry_path+0x7e/0xa0
[ 415.988249] seq_dentry+0x36/0xa0
[ 415.988954] show_mountinfo+0x203/0x280
[ 415.989764] seq_read+0x14a/0x3d0
[ 415.990514] vfs_read+0x89/0x130
[ 415.991209] ksys_read+0x4a/0xc0
[ 415.991898] do_syscall_64+0x5b/0x1b0
[ 415.992661] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[ 415.993713] RIP: 0033:0x7f9ef5891a30
[ 415.994450] Code: 0b 31 c0 48 83 c4 08 e9 be fe ff ff 48 8d 3d c7 c3 09 00 e8 42 8c 02 00 66 90 83 3d 8d d5 2d 00 00 75 10 b8 00 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 de cc 01 00 48 89 04 24
[ 415.998217] RSP: 002b:00007f9ef5d84f78 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
[ 415.999792] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f9ef5891a30
[ 416.001249] RDX: 0000000000000400 RSI: 0000000000603240 RDI: 0000000000000003
[ 416.002794] RBP: 00007f9ef5d84ff0 R08: 0000000000603240 R09: 00007f9ef58fcc30
[ 416.004310] R10: 00007f9ef5d849e0 R11: 0000000000000246 R12: 0000000000400c00
[ 416.005786] R13: 00007ffcf5fdd070 R14: 0000000000000000 R15: 0000000000000000
[ 416.007255] Modules linked in: sunrpc intel_rapl_msr intel_rapl_common iosf_mbi sb_edac crct10dif_pclmul crc32_pclmul mousedev ghash_clmulni_intel pcbc aesni_intel psmouse i2c_piix4 crypto_simd cryptd pcspkr glue_helper ip_tables ata_generic pata_acpi cirrus drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops ttm ata_piix uhci_hcd drm crc32c_intel libata serio_raw i2c_core floppy
[ 416.014226] CR2: ffffb807c2f1aff6
[ 416.014952] ---[ end trace 558647d5169dc4e0 ]---
[ 416.015915] RIP: 0010:__memcpy+0x12/0x20
[ 416.016733] Code: 48 c1 e2 20 48 09 c2 48 31 d3 e9 68 ff ff ff 90 90 90 90 90 90 90 90 90 66 66 90 66 90 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 <f3> 48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 f3 a4
[ 416.024072] RSP: 0018:ffffb80802097dd8 EFLAGS: 00010202
[ 416.026964] RAX: ffffb807c2f1aff6 RBX: ffff8a85f9593450 RCX: 0000000000000001
[ 416.030291] RDX: 0000000000000002 RSI: ffffffff9b0c231c RDI: ffffb807c2f1aff6
[ 416.033583] RBP: ffffb80842f1b000 R08: ffffffff9b0c231c R09: 0000000000000001
[ 416.036819] R10: ffffe41e47d4fa80 R11: ffffe41e47d4fac0 R12: ffffffff9b0a9cc2
[ 416.040063] R13: ffff8a87a83eaa00 R14: ffffb80802097f10 R15: ffff8a87ad6de700
[ 416.043332] FS: 00007f9ef5d86740(0000) GS:ffff8a87afb40000(0000) knlGS:0000000000000000
[ 416.046754] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 416.049766] CR2: ffffb807c2f1aff6 CR3: 0000000279c40005 CR4: 00000000000606e0
[ 416.052964] Kernel panic - not syncing: Fatal exception
问题原因
seq_buf_alloc函数的参数是size_t(unsigned long)类型为64位,其他内核函数在使用size_t(unsigned long)参数时,将该参数的类型修改为int类型,导致64位的数字被截断为32位,通过精心构造,该漏洞可实现代码任意执行。在主机内可以用于提权,容器内能够崩溃宿主机或者逃逸。更多说明,请参见官方文档说明。
解决方案
当遇到该问题时,您可以参考以下方案处理:
登录ECS实例,详情请参见连接方式概述。
执行以下命令,确认系统内核版本适用此方案。
uname -r
系统显示类似如下。
Alibaba Cloud Linux 2系统
4.19.91-21.al7.x86_64
Alibaba Cloud Linux 3系统
5.10.60-7.al8.x86_64
请根据系统内核版本,选择以下对应的解决方法:
Alibaba Cloud Linux 2系统
对于4.19.91-19.1.al7.x86_64(不含)版本
更新操作系统版本至最新的内核版本。
yum update kernel
重启服务器生效。
reboot
更新内核热补丁。
若最新内核版本的操作系统同样存在该问题,请参见4.19.91-19.1.al7.x86_64(包含)到4.19.91-24.al7.x86_64(包含)之间版本的解决方案更新内核热补丁。
对于4.19.91-19.1.al7.x86_64(包含)到4.19.91-24.al7.x86_64(包含)之间的版本,可通过安装内核热补丁解决,安装命令如下。
yum install -y kernel-hotfix-5956925-`uname -r | awk -F"-" '{print $NF}'`
Alibaba Cloud Linux 3系统
对于kernel-5.10.60-8.al8(不含)之前的版本
更新操作系统版本至最新的内核版本。
yum update kernel
重启服务器生效。
reboot
更新内核热补丁。
若最新内核版本的操作系统同样存在该问题,请参见kernel-5.10.60-7.al8(含)之前版本的解决方案更新内核热补丁。
对于kernel-5.10.60-7.al8(含)之前的版本,可通过安装内核热补丁解决,安装命令如下。
yum install -y kernel-hotfix-5956925-`uname -r | awk -F"-" '{print $NF}'`